linux 内核内建了随机数生成器。从系统收集环境噪声放入熵池,产生随机数。通过/dev/random和/dev/urandom向应用提供随机数。
/dev/random 生成的随机数质量较高,产生随机数的速度较慢,应用从中读取随机数速率过快默认会阻塞
/dev/urandom 生成随机数的速度很快,质量较差,但并不会发生阻塞。
可以使用cat 或 hexdump 直接读出随机数
hexdump -C /dev/random
hexdump -C /dev/urandom
可以发现从 /dev/random 比 /dev/urandom 要明显快很多。
/proc/sys/kernel/random 提供了关于/dev/random额外信息
entropy_avail:可用熵大小
poolsize:熵池大小
read_wakeup_threshold:可读阈值
write_wakeup_threshold:可写阈值
扫描二维码关注公众号,回复:
12981339 查看本文章
uuid 和 boot_id:随机性字符串;前者每读一次变化一次,后者启动后一直不变
ioctl 提供接口访问或改变这些值。包括读取熵池大小,获取熵池中熵大小,改变熵大小,往熵池写数据增加熵,清空熵池。
rng-tools快速增加熵池中熵大小
安装rng-tools
yum install rng-tools
启动rngd
service rngd start
查看熵池中熵大小,发现由20-30变成了3000多,/dev/random 速率也快了很多
cat /proc/sys/kernel/random/entropy_avail