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

什么';在.NET中,为加密密钥生成随机数的最佳库是什么?,.net,random,.net,Random,在.NET中,您可以使用RSACryptServiceProvider生成RSA密钥对。但这是.NET中生成真正随机数的最佳选择吗?还有很多其他开源库,比如CryptoPlusPlus,可以用来生成随机数。我想听听其他专家的意见。提前谢谢你的两分钱 从RNGCryptoServiceProvider派生的类生成真正的随机数。从RNGCryptoServiceProvider派生的类生成真正的随机数。除非有人提供证据证明它很糟糕,否则我个人不会去RNGCryptoServiceProvider以外

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

从RNGCryptoServiceProvider派生的类生成真正的随机数。

从RNGCryptoServiceProvider派生的类生成真正的随机数。

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

此类使用的实际实现无法获得,因为它是作为运行时的一部分实现的(
System.Security.Cryptography.Utils.\u GetBytes
System.Security.Cryptography.Utils.\u GetNonZeroBytes
),对于我来说,这是令人鼓舞的,因为我希望实现将至少从主机引入环境信息来生成数据

我相信这些都是通过较低级别的win32 API进行路由的,当然,如果在这些API中发现安全漏洞,就会对其进行修补(嗯……希望如此!)

但是,我不知道它是如何在Mono中实现的

对于极度偏执的人

这一切的真正问题在于,恶意黑客可以通过改变主机行为(即编写修改后的运行时)打破.Net中的随机性。在像.Net或Java这样的VM风格的平台中,这比在本机代码中要容易得多(这需要对底层平台进行黑客攻击或修改硬件)

奇怪的是,使用RNGCryptoServiceProvider使这变得容易得多,因为上述内部调用被.Net framework的托管部分隐式信任

然而,在现实中,你的代码必须是一些真正特别的东西,以便有人愿意付出所有的努力。所以我个人还是会使用RNGCryptoServiceProvider


但这就是为什么我在尝试用javascript编写加密库和函数时遇到了真正的问题——一个快速的浏览器黑客可能会毁掉一切。

除非有人提供证据证明RNGCryptoServiceProvider很糟糕,否则我个人不会去任何其他地方

此类使用的实际实现无法获得,因为它是作为运行时的一部分实现的(
System.Security.Cryptography.Utils.\u GetBytes
System.Security.Cryptography.Utils.\u GetNonZeroBytes
),对于我来说,这是令人鼓舞的,因为我希望实现将至少从主机引入环境信息来生成数据

我相信这些都是通过较低级别的win32 API进行路由的,当然,如果在这些API中发现安全漏洞,就会对其进行修补(嗯……希望如此!)

但是,我不知道它是如何在Mono中实现的

对于极度偏执的人

这一切的真正问题在于,恶意黑客可以通过改变主机行为(即编写修改后的运行时)打破.Net中的随机性。在像.Net或Java这样的VM风格的平台中,这比在本机代码中要容易得多(这需要对底层平台进行黑客攻击或修改硬件)

奇怪的是,使用RNGCryptoServiceProvider使这变得容易得多,因为上述内部调用被.Net framework的托管部分隐式信任

然而,在现实中,你的代码必须是一些真正特别的东西,以便有人愿意付出所有的努力。所以我个人还是会使用RNGCryptoServiceProvider


但这就是为什么我在尝试用javascript编写加密库和函数时遇到了一个真正的问题——一次快速的浏览器黑客攻击可能会毁掉一切。

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

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

*我们可以用确定性算法获得尽可能随机的结果。另外:从文档中可以看出:“应用程序代码不直接使用此类。这个抽象类是作为所有加密随机数生成器的基类提供的。”是否有证据证明RandomNumberGenerator的派生类,例如RNGCyrptowareServiceProvider,比您可以从外部源输入随机种子的库要好。实际上,根据机器硬件,
RNGCryptowServiceProvider
可能不依赖于“确定性算法”。@weilin8:No.在Windows平台上,标准做法是,如果您有一个真正随机的数据源,则包括CSP。否则(例如,大多数机器),操作系统将使用包含各种输入的确定性算法,以获得非常接近随机性的近似值。它在这方面比我们做得更好,所以如果“随机种子”只是像鼠标移动这样的东西,那么它肯定最好留给windows。如果您确实有一个由于某种原因而不是CSP的实际随机源,那么您最好直接使用它。*尽可能随机地使用确定性算法。另外:从文档:“应用程序代码不直接使用此类。此抽象类作为所有加密随机数生成器的基类提供。“是否有证据表明RandomNumberGenerator的派生类,如RNGCyrptowareServiceProvider,比您可以从外部源输入随机种子的库更好。实际上,取决于机器硬件,
RNGCryptoServiceProvider
可能不依赖于“确定性算法”@weilin8:不。在Windows平台上,标准做法是如果你有一个真正随机数据源,那么就包含一个CSP。否则(例如,大多数机器),操作系统将使用包含各种输入的确定性算法来获得