随机数

很多库例程产生的“随机”数是准备用于仿真、游戏等等;它们在被用于密钥生成一类的安全函数时是够随机的。其问题在于这些库例程使用的算法的未来值可以被攻击者轻易地推导出来(虽然看起来它们可能是随机的)。对于安全函数,需要的随机值应该是基于量子效应之类的确实无法预测的值。

Linux内核(1.3.30以上)包括了一个随机数发生器,对于很多安全目的是足够的。该随机数发生器收集来自设备驱动程序和其它来源的环境噪音放入一个熵池。在作为/dev/random被访问时,只返回熵池中预计的噪音比特数之内的随机字节(如果熵池为空,则调用被阻塞,直到收集了附加的环境噪音)。在作为/dev/urandom被访问时,即使熵池为空也返回所要求的那么多字节。如果用随机值作加密用途(如产生一个密钥),则应使用/dev/random。更多的信息可以在系统文档random(4)中找到。