前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >/dev/urandom和/dev/random的区别

/dev/urandom和/dev/random的区别

作者头像
随心助手
发布2021-12-08 13:47:11
2.3K0
发布2021-12-08 13:47:11
举报
文章被收录于专栏:nginx遇上redis

linux中提供了 /dev/urandom 和 /dev/random 两个特殊设备来提供随机数。那么这两个文件有什么区别呢? 要回答这个问题,先需要了解熵这个概念。

linux是根据系统的熵池来产生随机数的。熵池就是系统当前的环境噪音,环境噪音的来源很多,键盘的输入、鼠标的移动、内存的使用、文件的使用量、进程数量等等。 当系统的熵不够大的时候,则系统产生的随机数随机效果就不是很好,也就是说更容易被人猜测出来。 如何查看系统中的熵 通过下面命令可以查看系统熵池的容量:  

代码语言:javascript
复制
cat /proc/sys/kernel/random/poolsize

结果为:

4096

通过下面命令可以查看系统熵池中拥有的熵数:  

代码语言:javascript
复制
cat /proc/sys/kernel/random/entropy_avail

结果为:

3793

通过下面命令可以查看从熵池中读取熵的阀值,当 entropy_avail 中的值少于这个阀值,读取 /dev/random 会被阻塞: 

代码语言:javascript
复制
cat /proc/sys/kernel/random/read_wakeup_threshold

结果为:

64

如何快速生成熵

通过开启 haveged 服务可以快速产生熵。若 entropy_avail 的值小于1000,则建议安装 haveged,否则加密程序会阻塞直到系统有足够的熵后才继续运行。

代码语言:javascript
复制
pacman -S haveged --noconfirm

然后开启 haveged 服务

代码语言:javascript
复制
systemctl enable havegedsystemctl start haveged

/dev/random 与 /dev/urandom 的区别

/dev/random 是真随机数生成器,它会消耗熵值来产生随机数,同时在熵耗尽的情况下会阻塞,直到有新的熵生成. /dev/urandom 是伪随机数生成器,它根据一个初始的随机种子(这个种子来源就是熵池中的熵)来产生一系列的伪随机数,而并不会在熵耗尽的情况下阻塞。 但是 若在系统启动阶段使用 =/dev/urandom= 则可能存在熵池中还不存在任何熵的情况,这时用 =/dev/urandom= 产生的随机数是可预测的! 结合两者的特点,可以看出,除非要在启动启动阶段产生随机数,否则绝大多数情况下还是使用 /dev/urandom 来产生随机数,这样才不会引起程序莫名的挂起。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx遇上redis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何快速生成熵
  • /dev/random 与 /dev/urandom 的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档