【发布时间】:2011-02-17 20:12:38
【问题描述】:
我想在 perl 中高效(快速)生成一个公钥和私钥对,并且能够为自己输入随机数据。 在输入随机数据时,我当然是说该函数需要 X 个随机位来生成 Y 位的公钥/私钥对,我应该能够将这些 X 位提供给函数。
因此,函数应该如下所示:
($private, $public) = genRSAkeypair($randomdata, 1024);
然后 $private 包含:
----BEGIN RSA PRIVATE KEY-----
....
----END ....
并且 $public 包含
----BEGIN RSA PUBLIC and so on...
$randomdata 然后只是来自任何随机生成器的一串随机位。如果 instance1 和 instance2 之间的 $randomdata 一致,则 instance1 和 instance2 应该返回相同的公钥和私钥。
如果你想知道这个有什么用,我打算做一个基于密码的 RSA 密钥生成系统,不需要在任何地方存储任何密钥。因此,密钥是直接从密码中生成的,通过使用以特定方式链接的 SHA512 来创建静态随机数据。
当然,每次在系统中输入相同的密码,都必须返回相同的公钥和私钥,否则系统将无用。
有什么想法吗?
【问题讨论】:
-
我怀疑这是否安全。除非您使用 huge 密码(如一段文本),否则您将没有足够的熵来使用完整的键空间。我想知道自己在做什么的人不太可能有兴趣攻击您的密码系统,但如果有人这样做,我敢打赌他们可以破解它。
-
只要生成基于密码的随机数据的 CSPRNG 具有 avalance 效果,并且其隐秘性强,您需要知道密码才能生成正确的公共/私人键。如果密码足够好,唯一的选择就是暴力破解密码。在这种情况下,使用 SHA512 哈希链作为随机数据,获得正确哈希的唯一方法是暴力破解密码。