【问题标题】:Generate RSA keypair in perl efficently with custom PRNG使用自定义 PRNG 在 perl 中有效地生成 RSA 密钥对
【发布时间】: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 哈希链作为随机数据,获得正确哈希的唯一方法是暴力破解密码。

标签: perl rsa private public


【解决方案1】:

我会尝试 Crypt::OpenSSL::RSA,它似乎绑定 直接到 libssl

【讨论】:

  • 行不通。测试它:sebn.us.to/old/RSAgen.cgi 完整代码:sebn.us.to/old/RSAgen.txt 即使我指定了一个随机种子,OpenSSL 似乎也会向这个种子“添加”随机数据。我希望每次输入相同的密码时都生成相同的公钥/私钥对。
猜你喜欢
  • 2017-07-26
  • 1970-01-01
  • 2011-01-07
  • 2019-08-12
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多