Random Openssl随机字节算法

Random Openssl随机字节算法,random,openssl,Random,Openssl,在OpenSSL中,RAND_bytes函数使用什么算法?OpenSSL可以加载和运行不同的随机数引擎,并且不限于单个实现RAND_bytes在crypto/RAND/RAND_lib.c中实现,它通过调用同一文件中的函数RAND_get\u RAND_method()来获取指向具体RNG实现的函数指针 因此,假设您尚未加载新的RNG引擎,OpenSSL将选择以下选项之一: 默认情况下,它选择RAND\u-SSLeay(),在crypto/RAND/md\u-RAND.c中实现,最终调用SSLe

在OpenSSL中,
RAND_bytes
函数使用什么算法?

OpenSSL可以加载和运行不同的随机数引擎,并且不限于单个实现
RAND_bytes
crypto/RAND/RAND_lib.c
中实现,它通过调用同一文件中的函数
RAND_get\u RAND_method()
来获取指向具体RNG实现的函数指针

因此,假设您尚未加载新的RNG引擎,OpenSSL将选择以下选项之一:

  • 默认情况下,它选择
    RAND\u-SSLeay()
    ,在
    crypto/RAND/md\u-RAND.c
    中实现,最终调用
    SSLeay\u-RAND\u-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)


  • 看看自己的源代码,不难找到。“…一个ANSI X9.31 RNG。随机性最终来自3DES。”-OpenSSL 1.0.x使用FIPS对象模块2.0,现在使用AES。但我在追踪AES128/AES/192/AES256(或默认使用的内容)时遇到问题。是的,感谢您指出它发生了变化。OpenSSL现在实现SP800-90。它定义了不同的密钥强度,因此您可以让它实际使用AES 128、256或512。我可能应该在这个答案中编辑一些信息。。。好的,这是{有趣的|尴尬的}(我的坏毛病是没有事先检查)。根据OpenSSL FIPS 2.0用户指南,“默认DRBG”,第64页:“一个称为“默认DRBG”的特殊DRBG实例用于将DRBG映射到RAND接口。”但它[仍然]不清楚SP800-90的四个生成器中使用了哪一个,也不清楚底层算法的安全级别。