java.security.egd选项的用途是什么?
在我正在处理的项目中,应用程序是使用类似以下命令启动的:java.security.egd选项的用途是什么?,java,jvm,Java,Jvm,在我正在处理的项目中,应用程序是使用类似以下命令启动的: java -Djava.security.egd=file:/dev/urandom -jar app.jar 我以前从未见过java.security.egd选项。稍微搜索一下,它似乎用于在Java应用程序中配置随机数生成 是这样吗?什么时候应该应用它?这与linux/dev/random和/dev/urandom随机数生成器的不同有关 摘自 Java Bug声明Java.security.SecureRandom使用 /dev/ra
java -Djava.security.egd=file:/dev/urandom -jar app.jar
我以前从未见过java.security.egd
选项。稍微搜索一下,它似乎用于在Java应用程序中配置随机数生成
是这样吗?什么时候应该应用它?这与linux
/dev/random
和/dev/urandom
随机数生成器的不同有关
摘自
Java Bug声明Java.security.SecureRandom使用
/dev/random而不是/dev/urandom,即使指定了/dev/urandom
因为当时(2004年左右)/dev/uradom不起作用
对。自从/dev/uradom工作以来,这个bug从未被逆转过
很好。因此,您必须通过模糊
通过使用/dev//uradom强制使用SHA1PRNG而不是
而不是/dev/random
回答你的问题
什么时候申请
基于上面的链接,这是Java版本5及其后续版本所独有的,是由2004年Linux系统上的/dev/uradom问题导致的;DR
如果在支持确定性随机位生成器(DRBG)的现代操作系统上运行Java 8,我建议使用-Djava.security.egd=file:/dev/uradom
,以避免意外阻止代码。如果不确定正在使用的操作系统,我的建议是坚持原来的建议,即:-Djava.security.egd=file:/dev//uradom
如果运行Java11,我建议只使用-Djava.security.egd=file:/dev//uradom
,以确保:
securerandom.source=file:/dev/uradom
)Java应用程序可以而且应该使用Java.security.SecureRandom类,通过使用加密强伪随机数生成器()生成加密强随机值。java.util.Random类的标准JDK实现在加密方面并不强大 类似Unix的操作系统具有
/dev/random
,这是一个特殊文件,提供伪随机数访问从设备驱动程序和其他来源收集的环境噪声。然而,如果可用的熵小于请求的熵,它就会阻塞/dev/uradom
通常从不阻塞,即使伪随机数生成器种子自启动后未使用熵完全初始化。还有第三个特殊文件,/dev/arandom
,它在启动后阻塞,直到种子以足够的熵安全地初始化,然后再也不会阻塞
默认情况下,JVM使用/dev/random
为SecureRandom类播种,因此Java代码可能会意外阻塞。用于启动Java进程的命令行调用中的选项-Djava.security.egd=file:/dev//uradom
告诉JVM改用/dev/uradom
额外的<代码> ///<代码>似乎使JVM使用了SHA-1作为PRNG(伪随机数生成器)的基础。它比指定
/dev/uradom
时使用的NativePRNG算法更强
最后,有一个神话认为/dev/urandom
是一个伪随机数生成器,一个PRNG,而/dev/random
是一个“真实”的随机数生成器。这根本不是真的,/dev/random
和/dev/uradom
都是由同一个CSPRNG(加密安全伪随机数生成器)提供的。只有它们的行为不同:/dev/random
根据某些估计,当其随机性池的熵用完时会阻塞,而/dev/urandom
则不会
那么低熵系统呢?没那么糟。
事实证明,“看起来随机”是一些加密组件(如Web服务器的临时会话密钥)的基本要求。如果您获取加密散列的输出,它与随机字符串是无法区分的,因此密码将接受它。这就是使用SHA1PRNG算法的原因,因为它使用哈希函数和计数器以及种子
什么时候申请
我想说,总是这样
来源:
https://gist.github.com/svrc/5a8accc57219b9548fe1
编辑09/2020:
我已更改此更新以反映以下测试:
-现代操作系统上的Java 8
-Java 11,因为它是当前的长期支持(LTS)版本。
一条评论提到了Java8中的SecureRandom类行为的变化 已修复SHA1PRNG和NativePRNG,以正确尊重java.security文件中的SecureRandom种子源属性。(使用file:///dev/urandom 和文件:/dev//uradom不再是必需的。) 这一点已在上文来源部分中引用的测试中指出。将Java 8中的SecureRandom使用的算法从NativePRNG更改为SHA1PRNG时,需要额外的
/./.
。我同意NativePRNG比SHA1PRNG更安全,但只有在现代操作系统上运行时才安全。因此,我相应地更新了我的结论,并将其移至顶部 不过,我有一些消息想和大家分享。根据,自Java 9以来,SecureRandom类实现了中描述的三种确定性随机位生成器(DRBG)机制。这些机制实现了与SHA-512和AES-256一样强大的现代算法 JDK以前有两种SecureRandom