C#的替代加密安全伪随机数生成器

5

在所有这些NSA的事情之后,我只是想知道是否有人知道.NET中System.Security.Cryptography.RNGCryptoServiceProvider()的替代方案 - 也许是开源解决方案?

我试图搜索它,但并没有真正成功,所以我希望社区中的任何人都有一个想法?

谢谢


当你已经有一个备选方案时,为什么还需要另一个呢? - Sriram Sakthivel
3
他刚刚说了“在所有这些NSA的事情之后”。 NSA代表“国家安全局”,换句话说,一群人可能有能力将加密文本转化为明文。 - Eduard Dumitru
@SriramSakthivel,我有两个原因:第一是因为我很偏执(请参见http://www.fiercegovernmentit.com/story/nsa-inserted-backdoor-nist-random-number-generator-method/2013-09-09和http://www.technewsdaily.com/18525-microsoft-nsa-encryption.html);第二是因为我只是好奇。 :-) - Chris
我也看过Mono,但是Mono似乎直接依赖于操作系统的随机数生成器。 - Maarten Bodewes
1
你可以使用 OpenSSL 和 p/invoke。 - CodesInChaos
显示剩余2条评论
2个回答

4
使用新的.NET 6 API 从CSPRNG(密码学安全伪随机数生成器)生成随机数比以往任何时候都更容易:
// Give me 200 random bytes
var bytes = RandomNumberGenerator.GetBytes(200);

1
我认为原始问题与https://en.wikipedia.org/wiki/Dual_EC_DRBG有关。仅仅因为.net提供了随机数API,并不能让您确信它是真正的随机数。 - Jeremy Lakeman

3
在Bouncy Castle - C#版本中有两个随机数生成器可能会有用:DigestRandomGeneratorVmpcRandomGenerator,它们都在crypto.prng命名空间中。关键是要从一个你可以信任的来源种子化这些随机熵。
请注意,我对VMPC算法不熟悉。DigestRandomGenerator主要依赖于底层哈希函数的安全性(SHA-512在64位硬件上既安全又快)。它是一个相当简单的实现,但应该仍然是安全的。

有趣的问题是它们是如何被种植的。 - CodesInChaos
@CodesInChaos 一如既往,是的,但问题更具体地针对CSPRNG。 - Maarten Bodewes
我怀疑原帖作者并没有区分确定性部分和收集熵的部分。重要的是即使你不信任“CryptGenRandom”,也能获得安全的随机数。 - CodesInChaos
@CodesInChaos 如果你不信任微软在微软系统上的话,那么选择就很少了。你可以把这个作为答案发布出去,但那样就像是踢开已经敞开的门一样了。 - Maarten Bodewes
这些NIFS符合SP 800-90A修订版1的标准吗? - Susarla Nikhilesh
@SusarlaNikhilesh 不,它看起来相似但不同于HashDRBG。 - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接