linux熵池太小导致随机函数阻塞
所属分类 architecture
浏览量 1709
熵池本质上是若干字节,单位是bit
/proc/sys/kernel/random/entropy_avail 熵池当前大小
/proc/sys/kernel/random/poolsize 熵池的最大容量
如果entropy_avail的值小于要产生的随机数bit数, /dev/random 会阻塞
熵池从各种noice source中获取数据,noice source可能是键盘事件、鼠标事件、设备时钟等。
linux内核从2.4升级到2.6时,处于安全性的考虑,废弃了一些source。
source减少了,熵池补给的速度当然也变慢,进而不够用。
通过消耗熵池,可以构造DOS攻击。熵池空了,依赖随机数的业务(SSL,加密等)就不能正常进行
某业务系统使用 drools , 运行几天之后 ,规则编译非常慢 ,从10秒左右飙升到700多秒
drools规则编译时使用 UUID.randomUUID() 函数
import java.security.SecureRandom;
import java.util.UUID;
public class SecureRandomTest {
public static void main(String[] args) throws Exception {
// 熵池不够会阻塞
System.out.println(UUID.randomUUID().toString());
SecureRandom secureRandom = new SecureRandom();
System.out.println(secureRandom.nextInt());
}
}
tomcat启动很慢
补充熵池
可以通过安装rng-tools来补充熵池,查看熵池大小
cat /proc/sys/kernel/random/entropy_avail
yum install -y rng-tools
systemctl start rngd
systemctl enable rngd
熵池 一般应大于3000
node_exporter 熵池相关监控指标
node_entropy_available_bits
上一篇
下一篇
prometheus 查询例子
springboot ApplicationContextInitializer 使用
日志框架冲突及解决方法
Random和SecureRandom
熵池与SecureRandom
老程序员的20条编码原则