Openssl RAND_bytes 算法
OpenSSL 中的 RAND_bytes
函数使用什么算法?
What algorithm does the RAND_bytes
function use in OpenSSL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
OpenSSL 中的 RAND_bytes
函数使用什么算法?
What algorithm does the RAND_bytes
function use in OpenSSL?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
OpenSSL 可以加载和运行不同的随机数引擎,并且不限于单一实现。
RAND_bytes
在crypto/rand/rand_lib.c
中实现,它通过调用函数RAND_get_rand_method()
获取指向具体RNG实现的函数指针> 在同一个文件中。因此,假设您尚未加载新的 RNG 引擎,OpenSSL 将选择以下选项之一:
默认情况下,它选择
RAND_SSLeay()
,在crypto/rand/md_rand 中实现。 c
,最终调用ssleay_rand_bytes()
。我认为它没有真正的名称,随机性最终来自消息摘要 (MD_Update)。如果您在 FIPS 模式下运行 1.0 FIPS 模块,您将获得 ANSI X9.31 RNG,其核心使用 3DES 或 AES。 (请注意,FIPS 140-2 中不再允许使用 ANSI X9.31)。
如果您在 FIPS 模式下运行 2.0 FIPS 模块,您将获得一个 SP 800-90A 确定性随机位生成器 (DRBG)。
OpenSSL can load and run different random-number engines, and is not limited to a single implementation.
RAND_bytes
is implemented incrypto/rand/rand_lib.c
, and it gets a function pointer to the concrete RNG implementation by calling the functionRAND_get_rand_method()
in the same file.So assuming you haven't loaded a new RNG engine, OpenSSL will pick one of the following:
By default it chooses,
RAND_SSLeay()
, implemented incrypto/rand/md_rand.c
, which ultimately callsssleay_rand_bytes()
. I don't think it really has a name, and the randomness ultimately comes from the message digest (MD_Update).If you are running the 1.0 FIPS module in FIPS mode, you get an ANSI X9.31 RNG, which uses either 3DES or AES at its core. (Note that ANSI X9.31 is no longer allowed in FIPS 140-2).
If you are running the 2.0 FIPS module in FIPS mode, you get an SP 800-90A Deterministic Random Bit Generator (DRBG).