本文主要是介绍linux 随机数生成原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介
在信息学中,信息熵是用来描述系统混乱无序程度的物理量;系统的熵越大,系统就越无序,所含有用信息量越少,不确定度越大。
Linux内核中有一个熵池设备,专门收集来自系统环境的一些噪音,来产生高质量随机数序列;这些噪声主要来自于硬件设备发生中断的时间,用户点击鼠标的时间间隔,硬件噪声,磁盘活动等
/dev/random与/dev/urandom
这两个字符设备文件都是利用Linux内核的熵池来生成随机数,两者的区别主要在于:熵池内的熵不够的情况下,/dev/urandom会利用伪随机数生成器来生成随机数,而/dev/random会阻塞等待熵池数据被填充。
内核熵池属性参数
查看系统熵池的容量:cat /proc/sys/kernel/random/poolsize // 默认4096
查看从熵池中读取熵的阀值:cat /proc/sys/kernel/random/read_wakeup_threshold
查看当前系统熵池中拥有的熵数: cat /proc/sys/kernel/random/entropy_avail
(当entropy_avail中的值少于read_wakeup_threshold阀值,这时读取/dev/random会被阻塞)
一般来说,对于需要高安全性的场景,建议使用 /dev/random;对于需要高性能的场景,建议使用 /dev/urandom。但是,实际上,大多数情况下,/dev/urandom 的安全性也足够,并且速度更快。
这篇关于linux 随机数生成原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!