gpt4 book ai didi

c# - 随机数生成器安全 : BCryptGenRandom vs RNGCryptoServiceProvider

转载 作者:行者123 更新时间:2023-12-03 20:37:26 33 4
gpt4 key购买 nike

对于那些赶时间的人,这是 不是 相关争议Dual_EC_DRBG植入 NIST 的 SP800-90A 内。

关于两个RNG:

  • Microsoft BCRYPT 层基于他们的 C API。 BCryptGenRandom 遵循 NIST SP800-90A 的 CTR_DRBG (即使用经批准的分组密码 AES 来创建随机位)。但是尚不清楚它是否使用硬件随机源作为种子(或部分种子)...
  • Microsoft .NET RNGCryptoServiceProvider 是基于 C# 的。看着.NET source code (或 here ),我看到它最终调用了 C++ 方法 CapiNative.GenerateRandomBytes() . C#=>C++ 转换应该有一个 P/Invoke stub ,但我在框架源代码中的任何地方都找不到它。所以我不知道它是如何实际实现的。

  • 有没有人有关于这两个随机数生成器的其他信息?是否使用 HW 随机种子(通过旧英特尔中的二极管噪声或最新英特尔中有争议的 RDRAND)。

    PS:不确定这应该在安全、StackOverflow 或密码学...

    最佳答案

    The Microsoft .NET RNGCryptoServiceProvider is a C# based



    不完全是,托管框架类只是 Windows 内置的 Crypto api 的一个瘦包装器。所有名称以 ServiceProvider 结尾的 System.Security.Cryptography 类是原生 API 的包装器。名字以 Managed结尾的人在纯托管代码中实现。因此, XxxServiceProvider类使用 FIPS 验证的密码学,以及 XxxManaged类不是。

    它不完全是 pinvoke,它使用通用机制在 CLR 代码中进行直接调用。抖动查询包含 C++ 函数地址的表,并直接编译 CALL 机器代码指令。该机制在 this answer 中有描述.无法查看实际代码,它未包含在 SSCLI20 发行版中,并且已更改为使用 .NET 4 中的 QCall 机制。

    所以这个断言是无法证明的,但很有可能 RNGCryptoServiceProvider 和你传递给 BCryptGenRandom() 的算法提供者使用相同的随机数来源。在Windows中是advapi.dll中的一个未命名的导出函数, this answer给出了它使用的一个很好的总结。

    如果这确实与您有关并且您想要可靠的信息来源,那么就不要为了您的安全需要而从免费的 Q+A 网站上寻求建议。调用 Microsoft 支持。

    关于c# - 随机数生成器安全 : BCryptGenRandom vs RNGCryptoServiceProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201461/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com