Pet*_*r.O 6 performance random
我得到的疯狂不同real times
,当我运行下面的命令。
dd if=/dev/random bs=1k count=1
Run Code Online (Sandbox Code Playgroud)
它不会发生if=/dev/null
,也不会发生if=/dev/urandom
我已经运行了 500 次。以下是一般统计数据(每次通话)。时间以秒为单位。
Minimum Maximum Average Median
00.002 89.999 4.50402 2.275
Run Code Online (Sandbox Code Playgroud)
有没有人对为什么会发生这种情况有任何建议?
系统为Ubuntu 10.04桌面。Bash 版本是 4.1.5(1)
它还显示了运行相同版本 Ubuntu 的 VirtualBox VM 中类似的剧烈波动。
这是实际的测试代码
cp /dev/null "$HOME/dd-random.secs"
for ((i=100;i<=500;i++)); do
if ((i<10)) ;then zi="00$i"
elif ((i<100)) ;then zi="0$i"
else zi="$i"
fi
echo -ne "$zi\t" >>"$HOME/dd-random.secs"
exec 3>/dev/null 4>/dev/null
{ time { dd if=/dev/random bs=1k count=1; } 1>&3 2>&4; } 2>&1 |tail -n 3|tr 'm\n' '\t' |sed -re "s/([0-9])s/\1/g" >>"$HOME/dd-random.secs"
exec 3>&- 4>&-
echo >>"$HOME/dd-random.secs"
done
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 19
这正是/dev/random
和/dev/urandom
-之间的区别-random
使用熵池,它从一堆来源收集噪声并跟踪池中当前“有多少”噪声,因此random
知道它可以产生多少高质量的随机性。由于熵池的噪声量是有限的,random
如果没有足够的可用熵,则可能需要阻塞读取。urandom
从不阻塞,但您可能会从中获得“较少随机”的数据。
从random(4)
手册页:
读取时,/dev/random 设备将仅返回熵池中估计的噪声位数内的随机字节。/dev/random 应该适用于需要非常高质量随机性的用途,例如一次性填充或密钥生成。当熵池为空时,从 /dev/random 读取将阻塞,直到收集到额外的环境噪声。
从 /dev/urandom 设备读取不会阻塞等待更多熵。因此,如果熵池中没有足够的熵,则返回值理论上容易受到对驱动程序使用的算法的加密攻击。