简单的硬件RNG

时间:2009-07-28 02:13:52

标签: hardware random

我对this关于制作硬件RNG的问题做了一个简短的评论。

有没有人知道任何简单的计划,或者任何人都可以描述一个简单的基于硬件的RNG和驱动它的软件?

  
    

去Radio Shack。买二极管,NTR电阻,电容和串行电缆。切断不适合您的计算机的串行电缆的末端。在电缆的引脚DTR和DSR之间串联焊接二极管和电阻器。在DSR和TXD引脚之间焊接电容。写一个小C程序来执行以下操作:将DTR设置为1.启动计时器。监视DSR直到它进入1.停止计时器。根据经过的时间计算阻力。从该值中检索几个位以用作随机数的一部分。重复,直到累积了足够的位数。

  

5 个答案:

答案 0 :(得分:2)

如果你有一个Linux机器,那么你已经拥有/dev/random

答案 1 :(得分:2)

二极管发射噪声非常好。放大,A / D转换和采样。

答案 2 :(得分:1)

某些服务器主板已经有硬件随机数生成器(英特尔制造一些)。 这不是个玩笑。

答案 3 :(得分:1)

确实不是开玩笑:

(来自维基百科)

“英特尔80802固件集线器芯片包括一个使用两个自由振荡器的硬件RNG,一个快速和一个慢速。热噪声源(来自两个二极管的非共模噪声)用于调制慢速振荡器的频率,然后触发快速振荡器的测量,然后使用冯·诺依曼型去相关步骤(见下文)对该输出进行去噪。该器件的输出速率略低于100,000 bit / s。该芯片是该器件的可选组件。支持早期英特尔总线的840芯片组系列。它不包含在现代PC中。

自2003年以来,所有威盛C3微处理器都在处理器芯片上加入了硬件RNG。使用四个设计为以不同速率运行的自由振荡器,不使用热噪声,而是生成原始位。对两个输出进行异或运算以控制第三个振荡器的偏置,第三个振荡器的输出为第四个振荡器的输出提供时钟以产生原始位。温度,硅特性和局部电气条件的微小变化导致持续的振荡器速度变化,从而产生原始位的熵。为了进一步确保随机性,每个芯片上实际上有两个这样的RNG,每个RNG位于不同的环境中并在硅片上旋转。最终输出是这两个发电机的混合。原始输出速率为每秒数十至数百兆比特,白化速率为每秒几兆比特。用户软件可以使用新的非特权机器语言指令访问生成的随机比特流。“

答案 4 :(得分:0)

无论您的外部资源是什么,您都需要非常小心地注意消除发电机的输出,并进行连续测试以确保您的发电机由于各种原因而无法定期振荡。 FIPS 140包含一些指导原则。

Here is an example project使用反向偏置晶体管。我推荐使用2n4124器件,可以在大约9.6V(+ 5V USB,双倍,肖特基二极管)下驱动,以获得最佳效果。