Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.security.egd选项的用途是什么?_Java_Jvm - Fatal编程技术网

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
,以确保:

  • 利用最强大的安全随机实施(DRBG),而不考虑基础平台
  • 避免意外阻止代码(
    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