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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建/dev/random和/dev/urandom字符设备相关的知识,希望对你有一定的参考价值。

    /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字符设备的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中使用 /dev/random 或 urandom?

/dev/random和/dev/urandom的一点备忘

hostapd/dev/random/dev/urandom

/dev/random

tomcat 启动慢解决(/dev/random)

Hacking /dev/random: Pipe