“随机数”不等于“随便产生的数”。
用于密码学的“真随机数”必须满足其分布为平均分布(uniform random distribution)这个要求。而这个,在技术实现上是很难的,采样、启动噪声源都是导致随机bit产生的速度远远慢于“随便弄个数”的原因。
“伪随机”(pseudorandom)的字面意思是说,“看起来像真随机”。
学界已经有很多怎么把长度较小的“真随机数”扩展为长度较大的“伪随机数”(PRN)的算法,这种类型的算法叫“伪随机数产生器”(pseudorandom number generator, 简称PRNG或PRG)。所有的PRNG都是确定的算法,意思就是说,如果把一个“真随机数”作为种子(seed),那么这个算法产生的伪随机数是固定的。一个PRNG通常可以把n位的seed扩展为L(n)位的PRN, L(n)大于n,比如把5位的seed变8位的PRN输出。使用PRNG可以节省很多用来产生随机数的时间。
对PRNG的要求是,它的输出必须和同样长度的真随机数很难区别。
回头谈到seed怎么取.很重要的一个seed产生方式是从噪声中采样。
所以才有了通过鼠标、键盘动作来强化背景噪声(white noise, backgroud noise)的方法。
“熵”念做“伤”,是用来描述一个(或者一组)事件的随机程度的度量。熵越大,事件就越随机。
转载请注明:江海志の博客 » GPG的生成随机数的原理思考