RNGCryptoServiceProvider和硬件RNG一样好吗?

时间:2010-09-28 10:11:21

标签: .net security cryptography random

我正在尝试确定硬件RNG是否实际上比RNGCryptoServiceProvider更安全。

鉴于来自RNGCryptoServiceProvider 的随机性是使用各种系统和用户数据提供的,例如进程ID,线程ID,系统时钟,系统时间,系统计数器,内存状态,可用磁盘集群和散列用户环境块使用国际标准加密算法 [ref],除了速度之外,是否真的有理由将硬件RNG用于安全应用?

编辑:我想在所有这些中假设运行RNG的计算机没有被压缩 - 也就是说,没有间谍应用程序。

3 个答案:

答案 0 :(得分:7)

这是一个很好的问题,我怀疑答案是(正如Henk建议的那样)更具理论性。可以采用硬件组件来产生白噪声,然后对其进行采样并用作硬件RNG。在理论中,这比使用系统中的时间更“随机”。

在实践中,RNG经过FIPS certification时会受到考验。 RNGCryptoServiceProvider已通过FIPS 140-2认证(来源:http://technet.microsoft.com/en-us/library/cc750357.aspx

一些答案​​基于一种误解,即由于软件RNG使用已知来源作为其输入值,因此可以监控这些输入值并发现种子。

这不是一个真正的弱点(如果可以说硬件RNG相同,我们可以监控其当前(单个?)值并确定种子)

弱点(如果有的话)是大多数软件RNG使用可以在软件中操作(在某种程度上)的输入源。这将允许制作精良的恶意软件将硬件操纵到RNG输出可预测(即非随机)数字的点。

答案 1 :(得分:5)

不,RNGCryptoServiceProvider不如使用硬件。

但它比每台机器便宜得多。对于大多数用例来说足够好(并且足够快)。

答案 2 :(得分:4)

无论PRNG实现用作种子的参数是什么,它们都具有有限的熵量 - 最多是值的表示长度,但实际上要小得多(例如,PID很容易限制在可能的范围内) ;系统时间很容易猜测,等等)。无论您从PRNG以这种方式生成多少数据,熵的数量保持不变,因此确定种子所需的工作量保持不变。

相反,对于硬件RNG,熵量是生成的数据量。没有可能蛮力搜索可能的种子值集,因为没有可利用的状态。