java慢:与熵相关的问题

问题描述 投票:0回答:2

我遇到了一个问题,即通过 SSL 使用 java 时速度很慢。解决办法是在命令行java中添加

-Djava.security.egd=file:/dev/./urandom
。由于我有多个 JVM,我不想修改每个 JVM 以包含此字符串,因此想将其添加到文件
$JAVA_HOME/jre/lib/security/java.security

现在,java.security文件已经包含

securerandom.source=file:/dev/urandom

有两个问题:

  1. “/dev/urandom”与“/dev/./urandom”为何以及如何不同。为什么java不接受“/dev/urandom”
  2. 对于我正在运行的 JVM,我如何判断它们是否使用正确的 urandmon 设备(与随机)
java tomcat jboss weblogic
2个回答
11
投票

这实际上是 1.3 或 1.4 天时引入 JVM 的 hack。

基本问题是,在本机 JVM 代码中,他们对

/dev/urandom
进行硬编码以实际使用
/dev/random
来尝试确保足够的熵。由于
/dev/urandom
应该保证不会阻塞,因此如果没有足够的熵可用,就会产生阻塞的意外后果。

硬编码专门针对字符串

/dev/urandom
,因此提供解析为相同内容但不匹配导致所需行为的内容。如果您编码
/dev/./urandom
,您将绕过硬编码的别名并获得预期的
urandom
熵源。


4
投票

在大多数情况下使用 /dev/urandom (非阻塞)就可以了。就我个人而言,我会确保将一些硬件随机数生成器配置为正数以具有足够的熵(见下文)。

如果您必须使用 /dev/random (阻塞)并且无法阻塞,那么您应该确保始终有足够的熵。解决此问题的方法是配置硬件随机数生成器。

假设您在 Linux 上,您可以使用以下命令检查可用熵:

cat /proc/sys/kernel/random/entropy_avail

如果您的计算机具有硬件随机数生成器,您很可能需要安装 rngd。您可以通过发出以下命令来检查您的CPU是否有:

cat /proc/cpuinfo

寻找名为 rand 的标志。您还可以检查文件 /dev/hwrng 是否存在。您可能已经/想要加载相应的模块:

ls /lib/modules/*/kernel/drivers/char/hw_random

对我来说这是:

sudo modprobe tpm-rng

使其永久化:

echo tpm-rng | sudo tee -a /etc/modules

如果您碰巧使用的是 Ubuntu/Debian,只需安装 rng-tools 软件包。

sudo aptitude install rng-tools

如果您在安装 rng-tools 之前和之后检查熵,您应该会看到显着增加。

以下命令应显示可用的熵源:

sudo rngd -f -r /dev/hwrng -v

请注意,如果您需要更好的安全性,则需要混合多个熵源。不确定 rng-tools 支持这个。

© www.soinside.com 2019 - 2024. All rights reserved.