对于那些赶时间,这是不相关的争议Dual_EC_DRBG
埋下NIST的SP800-90A内。
关于两个RNG:
Microsoft BCRYPT 层基于他们的 C API。BCryptGenRandom
遵循 NIST SP800-90A CTR_DRBG
(即使用经批准的分组密码 AES 来创建随机位)。但是,尚不清楚它是否使用硬件随机源作为种子(或种子的一部分)......
Microsoft .NETRNGCryptoServiceProvider
是基于 C# 的。查看.NET 源代码(或此处),我看到它最终调用了 C++ 方法CapiNative.GenerateRandomBytes()
。C#=>C++ 转换应该有一个 P/Invoke 存根,但我在框架源代码中的任何地方都找不到它。所以我不知道它是如何实际实施的。
有没有人有关于这两个随机数生成器的其他信息?是否使用 HW 随机种子(通过旧英特尔中的二极管噪声或RDRAND
最新英特尔中的争议)。
PS:不确定这应该在安全、StackOverflow 或密码学...