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