首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么/dev/urandom不阻塞?

/dev/urandom是Linux系统中的一个设备文件,用于生成伪随机数。与/dev/random相比,/dev/urandom不会阻塞,即使系统熵池(entropy pool)中的随机数位数不足。

/dev/urandom之所以不会阻塞,是因为它使用了伪随机数生成器(pseudo-random number generator,PRNG)。PRNG是一种基于确定性算法的随机数生成器,它通过一个种子(seed)来生成随机数序列。在Linux系统中,/dev/urandom使用的是一个称为Fortuna的PRNG算法。

Fortuna算法的特点是可以根据系统熵池中的随机数位数来调整生成随机数的速度。系统熵池是由系统收集的各种随机事件(如键盘输入、鼠标移动、磁盘活动等)生成的随机数池。当系统熵池中的随机数位数不足时,Fortuna算法会使用一个熵估计器来估计熵池中的随机数位数,并根据估计结果来调整生成随机数的速度。

因此,即使系统熵池中的随机数位数不足,/dev/urandom仍然可以生成随机数,而不会阻塞。这使得开发人员可以方便地获取随机数,而无需担心阻塞的问题。

/dev/urandom的优势在于它的高效性和可用性。由于不会阻塞,开发人员可以在需要随机数的任何时候使用它,而无需等待。此外,由于使用了PRNG算法,/dev/urandom的生成速度相对较快,可以满足大部分应用的需求。

在实际应用中,/dev/urandom可以广泛应用于密码学、安全通信、随机数生成等领域。例如,在密码学中,随机数被广泛用于生成密钥、初始化向量等。在安全通信中,随机数可以用于生成会话密钥、随机挑战等。在随机数生成中,随机数可以用于模拟随机事件、生成随机样本等。

腾讯云提供了一系列与随机数生成相关的产品和服务,例如云加密机(Cloud HSM)和密钥管理系统(Key Management System)。这些产品和服务可以帮助用户安全地生成和管理随机数,保障系统的安全性和可靠性。

更多关于/dev/urandom的信息,可以参考腾讯云产品文档中的相关介绍:腾讯云产品文档链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

重启Tomcat时,报错deployDirectory Deploying web application directory解决办法

接下来解释一下 /dev/urandom  和  /dev/random  这两种不同的文件的区别, /dev/random 在不能产生新的随机数的情况下会阻塞程序,程序挂起便没法继续执行,直到熵池产生新的随机字节后才能返回...,程序再接着执行,这就是  /dev/random 比 /dev/urandom 产生大量随机数的速度要慢的原因,也是为什么使用这个文件生成随机数时,tomcat启动的速度被拖慢的原因。...而 /dev/urandom 这种方式在不能产生新的随机数时不会阻塞程序,当然了,这样的话生成随机数的效果没有  /dev/random 这种方式好,这对于加解密这样的应用来说并不是一个很好的选择。    ...但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待(程序挂起/tomcat启动拖慢)。.../urandom 这里值为何要在 dev 和 random 之间加一个点呢?

1.2K20

Tomcat启动一直卡在webappsROOT的解决方案

/urandom 说一下这个random和urandom的区别: tomcat启动的时候会实例化SecureRandom对象,实例化对象使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom...Linux 中的随机数可以从两个特殊的文件中产生,一个是 /dev/urandom,另外一个是 /dev/random。...这就是为什么会有 /dev/urandom 和 /dev/random 这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会(ublock),当然产生的随机数效果就不太好了,这对加密解密这样的应用来说就不是一种很好的选择.../dev/random 会阻塞当前的程序,直到根据熵池产生新的随机字节之后才返回,所以使用 /dev/random 比使用 /dev/urandom 产生大量随机数的速度要慢。...但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待。键盘和鼠标输入以及磁盘活动可以产生所需的随机性或熵。

77210

Tomcat启动一直卡在webappsROOT的解决方案

/urandom 说一下这个random和urandom的区别: tomcat启动的时候会实例化SecureRandom对象,实例化对象使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom...Linux 中的随机数可以从两个特殊的文件中产生,一个是 /dev/urandom,另外一个是 /dev/random。...这就是为什么会有 /dev/urandom 和 /dev/random 这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会(ublock),当然产生的随机数效果就不太好了,这对加密解密这样的应用来说就不是一种很好的选择.../dev/random 会阻塞当前的程序,直到根据熵池产生新的随机字节之后才返回,所以使用 /dev/random 比使用 /dev/urandom 产生大量随机数的速度要慢。...但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待。键盘和鼠标输入以及磁盘活动可以产生所需的随机性或熵。

69120

Linux系统下Tomcat8启动速度很慢的解决方法

1)如果java.security.egd属性或securerandom.source属性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM会使用本地种子产生器...这就是为什么我们设置值为”file:///dev/urandom”或者值为”file:/./dev/random”都会起作用的原因。...当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。...这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。 解决 有两种解决办法: 1)在Tomcat环境中解决 可以通过配置JRE使用非阻塞的Entropy Source。...在catalina.sh中加入这么一行: -Djava.security.egd=file:/dev/./urandom 即可。

1.9K42

又出生产事故!那些年我曾犯过的错-SecureRandom

/dev/random的一个副本是/dev/urandom(“unblocked”,非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。...这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。 它可以作为生成较低强度密码的伪随机数生成器,建议用于生成高强度长期密码。.../urandom参数没起作用,仍使用/dev/random作为随机数的熵池,时间久或调用频繁的话熵池很容易不够用而导致阻塞;于是看了一下 SecureRandom.getInstanceStrong().../urandom作为熵池,不会遇到阻塞问题。.../urandom (这个文件名多个u)强制使用/dev/urandom这个文件,避免阻塞现象。中间加个点的解释是因为某个JDK BUG,SO那个帖子有链接。

3.8K20

devurandom和devrandom的区别

linux中提供了 /dev/urandom 和 /dev/random 两个特殊设备来提供随机数。那么这两个文件有什么区别呢? 要回答这个问题,先需要了解熵这个概念。...与 /dev/urandom 的区别 /dev/random 是真随机数生成器,它会消耗熵值来产生随机数,同时在熵耗尽的情况下会阻塞,直到有新的熵生成..../dev/urandom 是伪随机数生成器,它根据一个初始的随机种子(这个种子来源就是熵池中的熵)来产生一系列的伪随机数,而并不会在熵耗尽的情况下阻塞。...但是 若在系统启动阶段使用 =/dev/urandom= 则可能存在熵池中还不存在任何熵的情况,这时用 =/dev/urandom= 产生的随机数是可预测的!...结合两者的特点,可以看出,除非要在启动启动阶段产生随机数,否则绝大多数情况下还是使用 /dev/urandom 来产生随机数,这样才不会引起程序莫名的挂起。

2.2K30

Linux 中的 devrandom 和 devurandom 是什么?

/dev/urandom 与/dev/random不同,/dev/urandom是一个伪随机数生成器设备文件,它通过使用内部熵池来生成随机数。它会持续生成随机数,无论系统上的环境噪声有多少。...因此,/dev/urandom生成的随机数速度比/dev/random快得多。 由于/dev/urandom使用的是伪随机数生成算法,因此在某些情况下,可能会产生较低质量的随机数。...如何使用 /dev/random 和 /dev/urandom 在Linux系统中,可以通过读取/dev/random或/dev/urandom来获取随机数。...dev/urandom 请注意,这些命令将生成二进制随机数据。.../dev/random 会在熵池中的熵低于一定值时阻塞等待熵的增加,而 /dev/urandom 不会阻塞等待熵,而是使用伪随机数生成器来生成随机数。

2.8K00

L016使用devrandom生成随机数

如果在熵池中没有可用的随机性位, /dev/random 在池中有足够的随机性之前等待,返回结果。这意味着如果使用 /dev/random 来产生许多随机数,就会发现它太慢了,不够实用。...我们经常看到 /dev/random 生成几十字节的数据,然后在许多秒内都不产生结果。 幸运的是有熵池的另一个接口可以绕过这个限制:/dev/urandom。...然而,仍然认为 /dev/urandom 比 /dev/random 要“不安全一些”(并通常值得怀疑)。...应用中出现的问题: 在我们的服务器程序中,用户登陆的时候会读取/dev/random产生随机数,问题来了,当用户登陆比较密集,这时候read就会返回特别慢,并且返回的字节数也比要求的少,甚至返回――阻塞...17 – 19行: 无阻塞模式打开/dev/random设备。如果该设备打开失败尝试打开/dev/urandom

1.1K40

研发:springboot 应用基于k8s 部署pod启动缓慢排查

Linux系统上的设备/dev/random和/dev/urandom是不同的。 /dev/random设备提供的不是伪随机数据,而是基于环境中的真实随机因素(即背景噪声作为熵源)的随机数据。...所以,/dev/random不像设备/dev/urandom。后者是一个伪随机数据生成器,能按照请求快速生成所需数量的数据。/dev/random能生成多少内容由环境中的噪声决定。...数据不足时,/dev/random只能等待。 所以,在内容不足时,/dev/random会将读操作阻塞,直至收集到足够的随机数据。...这就是测试结果差异产生的原因,/dev/random阻塞第二次的读操作将近1分钟时间。 所以,对于使用了/dev/random设备的而言,都有被阻塞的可能。...解决方案简单说,就是除非有明确的理由,必须要使用/dev/random设备。否则,使用/dev/urandom设备即可。

4K10

使用 SecureRandom 产生随机数采坑记录

random 设备了提供了 2 个字符设备供用户态进程使用——/dev/random 和/dev/urandom: /dev/random 适用于对随机数质量要求比较高的请求,在熵池中数据不足时, 读取...这样的设计使得/dev/random 是真正的随机数发生器,提供了最大可能的随机数据熵。 /dev/urandom,非阻塞的随机数发生器,它会重复使用熵池中的数据以产生伪随机数据。...这表示对/dev/urandom 的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random 的。它可以作为生成较低强度密码的伪随机数生成器,对大多数应用来说,随机性是可以接受的。...解决方案 有了以上的的解释,我们就知道解决方案了,使用 /dev/urandom 这种非阻塞的方式来产生随机数即可解决问题,在 Java 中我们改成如下写法即可解决问题 SecureRandom random...= new SecureRandom(); new SecureRandom() 使用 /dev/urandom 生成种子,不会产生阻塞

3.4K20

使用 SecureRandom 产生随机数采坑记录

random 设备了提供了 2 个字符设备供用户态进程使用——/dev/random 和/dev/urandom: /dev/random 适用于对随机数质量要求比较高的请求,在熵池中数据不足时, 读取...这样的设计使得/dev/random 是真正的随机数发生器,提供了最大可能的随机数据熵。 /dev/urandom,非阻塞的随机数发生器,它会重复使用熵池中的数据以产生伪随机数据。...这表示对/dev/urandom 的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random 的。它可以作为生成较低强度密码的伪随机数生成器,对大多数应用来说,随机性是可以接受的。...解决方案 有了以上的的解释,我们就知道解决方案了,使用 /dev/urandom 这种非阻塞的方式来产生随机数即可解决问题,在 Java 中我们改成如下写法即可解决问题 SecureRandom random...= new SecureRandom(); new SecureRandom() 使用 /dev/urandom 生成种子,不会产生阻塞

4.4K30
领券