对于那些赶时间的人来说,这是NOT与有争议的Dual_EC_DRBG
种植在 NIST SP 800-90A 内。
关于两个RING:
Microsoft BCRYPT 层基于其 C API。BCryptGenRandom http://msdn.microsoft.com/en-us/library/windows/desktop/aa375458%28v=vs.85%29.aspx遵循 NIST SP800-90ACTR_DRBG
(即使用经批准的分组密码 AES 来创建随机位)。然而,尚不清楚它是否使用硬件随机源作为种子(或种子的一部分)......
微软.NETRNGCryptoServiceProvider http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx基于 C#。看着.NET源代码 http://referencesource.microsoft.com/netframework.aspx (or here http://www.dotnetframework.org/default.aspx/4@0/4@0/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/src/BCL/System/Security/Cryptography/RNGCryptoServiceProvider@cs/1305376/RNGCryptoServiceProvider@cs),我看到它最终调用了 C++ 方法CapiNative.GenerateRandomBytes()
。应该有一个用于 C#=>C++ 转换的 P/Invoke 存根,但我在框架源代码中找不到它。所以我不知道它是如何实际实现的。
有人有关于这两个随机数生成器的更多信息吗?是否使用硬件随机种子(通过旧英特尔中的二极管噪声或有争议的RDRAND
在最新的情报中)。
PS:不确定这应该在安全性、StackOverflow 或密码学中......
Microsoft .NET RNGCryptoServiceProvider 是基于 C# 的
不完全是这样,托管框架类只是 Windows 内置的 Crypto api 的一个薄包装。所有名称以以下结尾的 System.Security.Cryptography 类ServiceProvider
是本机 API 的包装器。名字结尾为Managed
以纯托管代码实现。据此,XxxServiceProvider
类使用 FIPS 验证的加密技术,并且XxxManaged
类不是。
它并不完全是 pinvoke,它使用通用机制在 CLR 代码中直接调用。抖动查阅包含C++函数地址的表并直接编译CALL机器代码指令。该机制描述于这个答案 https://stackoverflow.com/a/8870593/17034。查看实际代码是不可能的,它不包含在 SSCLI20 发行版中,并且已更改为使用 .NET 4 中的 QCall 机制。
因此,该断言无法证明,但 RNGCryptoServiceProvider 和您传递给 BCryptGenRandom() 的算法提供程序很可能使用相同的随机数源。在 Windows 中,它是 advapi.dll 中的未命名导出函数,这个答案 https://stackoverflow.com/a/9575747/17034对其用途进行了很好的总结。
如果这确实与您有关并且您想要reliable信息来源,然后不要从免费的问答网站获取建议来满足您的安全需求。致电微软支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)