首页 > 其他 > 详细

如何创建/dev/random和/dev/urandom字符设备

时间:2017-10-30 20:49:16      阅读:406      评论:0      收藏:0      [点我收藏+]

    /dev/random和/dev/urandom是内核随机数源设备,用于产生随机数。产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候,而当前需要大量的随机比特,这时产生的随机数的随机效果就不是很好了。

    这就是为什么会有/dev/urandom和/dev/random这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会(ublock),当然产生的随机数效果就不太好了,这对加密解密这样的应用来说就不是一种很好的选择。/dev/random会阻塞当前的程序,直到根据熵池产生新的随机字节之后才返回,所以使用/dev/random比使用/dev/urandom产生大量随机数的速度要慢。

    如果你的系统不存在这两个文件,可以通过以下命令来进行创建。

mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom

    当一个linux系统启动没有太多交互式操作时,熵池可能处于一个相当可预测的状态。这降低了熵池的实际噪声量低于估计值。为了抵消这种影响,它有助于跨关闭和初创企业进行熵池信息。为此,请将下列行添加到Linux系统启动顺序中运行的适当脚本中:


echo "Initializing random number generator..."
    random_seed=/var/run/random-seed
    # Carry a random seed from start-up to start-up
    # Load and then save the whole entropy pool
    if [ -f $random_seed ]; then
        cat $random_seed >/dev/urandom
    else
        touch $random_seed
    fi
    chmod 600 $random_seed
    poolfile=/proc/sys/kernel/random/poolsize
    [ -r $poolfile ] && bytes=‘cat $poolfile‘ || bytes=512
    dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

    另外,在Linux系统关闭期间运行的适当脚本中添加以下行:

# Carry a random seed from shut-down to start-up
    # Save the whole entropy pool
    echo "Saving random seed..."
    random_seed=/var/run/random-seed
    touch $random_seed
    chmod 600 $random_seed
    poolfile=/proc/sys/kernel/random/poolsize
    [ -r $poolfile ] && bytes=‘cat $poolfile‘ || bytes=512
    dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

本文出自 “Hello,World!” 博客,请务必保留此出处http://bovin.blog.51cto.com/7402899/1977498

如何创建/dev/random和/dev/urandom字符设备

原文:http://bovin.blog.51cto.com/7402899/1977498

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!