当前位置: 首页 > 工具软件 > haveged > 使用案例 >

Linux中使用haveged对/dev/random补熵

陶星渊
2023-12-01

SecureRandom

随机数安全一文中提过安全随机数的概念 , 这里不具体描述 , 就是指强伪随机数甚至真随机数 . 在Java中除了弱伪随机数生成器java.util.Random之外 , 也提供了java.security.SecureRandom这种强伪随机数生成器 . 使用这种方式时 , Java会读取系统默认的随机源 . Java中有两种方法可以改变随机源的来源 :

  • JVM的启动项参数-Djava.security.egd
  • 配置文件$JAVA_PATH/jre/lib/security/java.security是否配置参数securerandom.source

当两种随即源都存在时,1的优先级高于2 ; JDK1.8中,java.security文件中的securerandom.source的默认值为:file:/dev/random


/dev/random

/dev/random产生随机数的原理是利用当前系统的**熵池(random pool)**来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回

熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过 很多参数来评估,如内存的使用文件的使用量不同类型的进程数量等等。如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候,这产生的随机数的效果就不是很好了,/dev/random会阻塞当前的程序,直到根据熵池产生新的随机字节之后才返回

由于/dev/random生成强伪随机数的过程会阻塞当前的程序 , 所以生成随机数的速度必须越快越好 ; 而熵值从小数值升到目标数值的速度就是生成随机数的速度 , 为此 , 我们必须想办法提高熵值


haveged的使用

我们可以使用haveged组件来进行补熵

执行service haveged status或者ps –ef | grep "haveged" | grep -v "grep"命令可以确认系统是否开启了haveged进程

启动haveged , 并将其设置为随系统启动 :

systemctl start haveged
systemctl enable haveged.service

停止haveged : service haveged stop

在启动完havged后 , 可以通过cat /dev/random | od –x来查看屏幕输出随机数的速度明显比未开启时要快得多 ; cat /proc/sys/kernel/random/entropy_avail可以查看当前熵值 ; 没开启havaged正常是100多 , 开启之后会增大到1000多甚至2000

 类似资料: