什么算法确实OpenSSL中RAND_bytes
功能使用?Openssl的RAND_bytes算法
回答
的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)。
“......一个ANSI X9.31 RNG。随机性最终来自3DES。” - 使用FIPS对象模块2.0的OpenSSL 1.0.x,现在使用AES。我在追查AES128/AES/192/AES256时遇到了问题(或者默认使用了什么)。 – jww 2012-07-22 01:31:48
是的,谢谢你指出它改变了。 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
好的,这是{intersting | embarrasing}(我之前没有检查不好)。根据OpenSSL FIPS 2.0用户指南“缺省DRBG”,第64页:“使用称为”默认DRBG“的特殊DRBG实例将DRBG映射到RAND接口。”但它仍然不清楚使用SP800-90的四个发生器中的哪一个,也不清楚底层算法的安全级别。 – jww 2012-07-28 23:03:02
- 1. openssl CRC32计算
- 2. 如何从OpenSSL源代码中禁用/删除特定的OpenSSL加密算法?
- 3. 无法与OpenSSL的
- 4. OpenSSL BN_exp()用法
- 5. OpenSSL BN_CTX用法
- 6. 是否可以将我们的对称算法添加到OpenSSL?
- 7. system.security.cryptography.sha1是否使用OpenSSL库的SHA1算法实现?
- 8. 如何计算OpenSSL中的PRF?
- 9. 无法链接OpenSSL
- 10. Python和OpenSSL:无法解密
- 11. 添加想法模块openssl
- 12. 无法链接libCURL与OpenSSL
- 13. Qt无法找到openssl
- 14. CMake的内msys2无法找到的OpenSSL
- 15. C#版本的OpenSSL EVP_BytesToKey方法?
- 16. 无法解密使用OpenSSL的
- 17. 从Node.js访问OpenSSL的不同方法
- 18. 无法运行新编译的OpenSSL
- 19. 关于用法的Openssl查询
- 20. 的base64文件摘要计算与OpenSSL的
- 21. 使用OpenSSL的
- 22. RijndaelManaged的OpenSSL中
- 23. 数与OpenSSL的
- 24. 不能OpenSSL的
- 25. iPhone上的OpenSSL
- 26. PHP OpenSSL的openssl_get_cert_locations
- 27. OpenSSL的连接
- 28. OpenSSL的与Java
- 29. 的RSACryptoServiceProvider和OpenSSL
- 30. JRuby Net :: HTTP因OpenSSL :: SSL :: SSLError失败:证书不符合算法约束
看看你自己的源代码,不难发现。 – 2010-04-25 00:58:39