RAND_bytes
函数在OpenSSL中使用什么算法?
答案 0 :(得分:4)
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)。