java - SecureRandom setSeed 方法在 MacOS 上失败

标签 java macos secure-random

运行 macOS High Sierra 10.13.5 和 Java 1.8.0u171。

我有类似以下代码:

SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking");
random.setSeed(bla byte array);

每当运行时,我都会遇到以下异常,我已经编辑了一些包含一些敏感位的堆栈跟踪:

java.security.ProviderException: setSeed() failed
    at sun.security.provider.NativePRNG$RandomIO.implSetSeed(NativePRNG.java:472)
    at sun.security.provider.NativePRNG$RandomIO.access$300(NativePRNG.java:331)
    at sun.security.provider.NativePRNG$NonBlocking.engineSetSeed(NativePRNG.java:312)
    at java.security.SecureRandom.setSeed(SecureRandom.java:427)
--redacted--
Caused by: java.io.IOException: Operation not permitted
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:313)
    at sun.security.provider.NativePRNG$RandomIO.implSetSeed(NativePRNG.java:470)
    at sun.security.provider.NativePRNG$RandomIO.access$300(NativePRNG.java:331)
    at sun.security.provider.NativePRNG$NonBlocking.engineSetSeed(NativePRNG.java:312)
    at java.security.SecureRandom.setSeed(SecureRandom.java:427)
--redacted--

它似乎正在尝试写一些东西,但我不知道什么,也不知道在哪里。该区域中有代码提到了/dev/random,所以我想我应该检查它的权限,但我也不知道该怎么做。

x@y:~ $ ls -ld /dev/null
crw-rw-rw-  1 root  wheel    3,   2 Jun 11 15:25 /dev/null
x@y:~ $ ls -ld /dev/urandom
crw-rw-rw-  1 root  wheel   14,   1 Jun 11 15:02 /dev/urandom
x@y:~ $ ls -ld /dev/random
crw-rw-rw-  1 root  wheel   14,   0 Jun  7 08:15 /dev/random

您知道问题是什么以及我可以采取什么措施来解决它吗?

编辑:我发现 NativePRNGNonBlocking 似乎尝试访问 OSX 显然不允许写入的 /dev/urandom 。有没有一种方法可以允许对其进行写入,或者有另一种方法可以避免这种情况,同时仍保持非阻塞行为?

最佳答案

标准种子应该已经提供足够的熵。

另请参阅:Should I seed a SecureRandom?

如果您仍然喜欢自己的种子,抱歉我无法提供如何写入 OSX/dev/urandom 的答案。

出于安全目的,/dev/urandom 不是最佳选择,/dev/random 或 SecureRandom 的默认种子可能是更好的解决方案。

编辑:嗯,有些人认为/dev/urandom 也不错: https://www.2uo.de/myths-about-urandom/

关于java - SecureRandom setSeed 方法在 MacOS 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50805678/

相关文章:

java - Hibernate的 `setFirstResult`不工作

macos - Mac 应用商店应用程序可以访问本地文件系统吗?

java - 使用 SecureRandom 生成安全随机数

java - Eclipse 插件外的 Eclipse 工作区引用

java - 使用通配符和类型化泛型会生成 "is not applicable for the arguments"错误

javascript - 如何在 TypeScript 中使用泛型模拟 Java 类文字?

objective-c - XCode/OS X : Storyboard Minimum Requirements

swift - 在 MacOS 中以编程方式关闭模式对话框

java - 如何在 Java 中创建特定位大小的随机输出?