【问题标题】:Cryptographically secure RNG in C++ for RSA PKCS#1 (key generation)用于 RSA PKCS#1(密钥生成)的 C++ 中的加密安全 RNG
【发布时间】:2020-06-13 23:06:36
【问题描述】:

我正在尝试在 C++ 中重新实现 RSA 密钥生成(作为爱好/学习游乐场),到目前为止,我最大的问题似乎是 在 x,y 范围内生成一个随机数,这也是加密的安全(例如素数 p 和 q)。

我想在这种情况下 (RSA) 使用带有安全随机种子(例如 /dev/urandom 或 OpenSSL RAND_bytes 等)的 mt19937 或 std::rand 不会被视为“加密安全”?

ISAAC 看起来很有希望,但我对如何使用它一无所知,因为我根本找不到任何文档。

值得注意的是,这也是我的第一个 C++ 项目(我之前做过一些 C、Rust 等...所以 C++ 至少感觉有些熟悉,而且我不是一个完整的新手,请注意)。

【问题讨论】:

  • 您不需要伪随机数生成器。只需从 /dev/urandom 或 rand_bytes 获取所需数量的字节即可。

标签: c++ random cryptography rsa


【解决方案1】:

我想在这种情况下 (RSA) 将 mt19937 或 std::rand 与安全随机种子(例如 /dev/urandom 或 OpenSSL RAND_bytes 等)一起使用不会被视为“加密安全”?

不,对于任何目的来说,这些都不是加密安全的。

ISAAC 看起来很有希望,但我对如何使用它一无所知,因为我根本找不到任何文档。

嗯,我猜的时间到了。但我会简单地使用 C++ 库,例如 Crypto++ 或 Botan 或类似的东西,然后只需实现 RSA 密钥对生成位,借用他们的一个安全随机生成器。幸运的是,他们还有一个 bignum 库,因此您也不必实现它。

【讨论】:

  • 在环顾四周后,我想我只需将 /dev/urandom 用于我的 CSRNG 和 GMP 作为我的 BigInt 库。感谢您指出更多库并回答我的问题:)
  • 使用/dev/urandom 从加密的角度来看是好的(假设实现是正确的),但从可移植性的角度来看可能不是。如果你不关心那没关系:)
猜你喜欢
  • 2011-11-28
  • 2020-09-16
  • 2016-09-21
  • 2012-04-09
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 2012-10-07
相关资源
最近更新 更多