2010-04-24 781 views

回答

4

的OpenSSL可以加载和运行不同的随机数的发动机,并且不限于单个实施方式。 RAND_bytescrypto/rand/rand_lib.c实现,它通过调用函数RAND_get_rand_method()在同一文件中获取一个函数指针具体RNG实现。

所以,假设你没有装新的RNG引擎,OpenSSL的会选择以下之一:

  1. 默认情况下,选择,RAND_SSLeay(),在crypto/rand/md_rand.c实现,最终调用ssleay_rand_bytes()。我不认为这真的有一个名字,随机性最终来自消息摘要(MD_Update)。

  2. 如果您在FIPS模式下运行1.0 FIPS模块,则会得到ANSI X9.31 RNG,其核心使用3DES或AES。 (请注意,FIPS 140-2不再允许ANSI X9.31)。

  3. 如果您正在运行在FIPS模式下的2.0 FIPS模块,你会得到一个SP 800-90A确定性随机位发生器(DRBG)。

+0

“......一个ANSI X9.31 RNG。随机性最终来自3DES。” - 使用FIPS对象模块2.0的OpenSSL 1.0.x,现在使用AES。我在追查AES128/AES/192/AES256时遇到了问题(或者默认使用了什么)。 – jww 2012-07-22 01:31:48

+0

是的,谢谢你指出它改变了。 OpenSSL现在实现了SP800-90。它定义了不同的关键优势,所以你可以使用AES 128,256或512.我应该在这个答案中编辑一些信息...... http://csrc.nist.gov/publications/nistpubs/800-90A/ SP800-90A.pdf – indiv 2012-07-22 08:21:03

+0

好的,这是{intersting | embarrasing}(我之前没有检查不好)。根据OpenSSL FIPS 2.0用户指南“缺省DRBG”,第64页:“使用称为”默认DRBG“的特殊DRBG实例将DRBG映射到RAND接口。”但它仍然不清楚使用SP800-90的四个发生器中的哪一个,也不清楚底层算法的安全级别。 – jww 2012-07-28 23:03:02