在.NET中为加密密钥生成随机数的最佳库是什么?

时间:2010-07-13 00:55:23

标签: .net random

在.NET中,您可以使用RSACryptoServiceProvide生成RSA密钥对。但这是.NET中生成真正随机数的最佳选择吗?有许多其他开源库,例如CryptoPlusPlus,可用于生成随机数。我想听听其他专家的意见。提前谢谢您的两分钱。

3 个答案:

答案 0 :(得分:3)

除非有人提供证据证明它很糟糕,否则我不会亲自去除RNGCryptoServiceProvider以外的任何地方。

这个类使用的实际实现是不可获得的,因为它是作为运行时(System.Security.Cryptography.Utils._GetBytesSystem.Security.Cryptography.Utils._GetNonZeroBytes)的一部分实现的,对我来说这是令人鼓舞的,因为我希望实现会带来至少来自主机的环境信息来生成数据。

我确实认为这些是通过更低级别的win32 apis进行的,当然,如果在其中找到安全漏洞,那么它将被修补(好吧......希望!)

如何在Mono中完成,但是,我不知道。

对于极度偏执的

任何这一点的真正问题在于,.Net中的随机性可以通过改变主机行为(即通过编写修改后的运行时)来打破恶意黑客。在.Net或Java等虚拟机风格的平台上,这比在本机代码中要容易得多(这需要黑客攻击低级平台或修改硬件)。

奇怪的是,使用RNGCryptoServiceProvider使得这更容易,因为.Net框架的托管部分隐含地信任上述内部调用。

然而 - 实际上 - 你的代码必须是一个非常特别的东西才能让所有人付出努力。所以我个人仍然使用RNGCryptoServiceProvider。

但是这就是为什么我在使用javascript编写加密库和函数的尝试中遇到了一个真正的问题 - 快速的浏览器黑客可以解决所有问题。

答案 1 :(得分:1)

RandomNumberGenerator派生的类生成真正的随机数。

答案 2 :(得分:0)

如果您的项目允许,您可以从random.org获取它们。这应该是随机的。