运行macOS High Sierra 10.13.5和Java 1.8.0u171。
我有类似下面的代码:
free
运行时遇到以下异常,我编写了一些包含敏感位的堆栈跟踪:
SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking");
random.setSeed(bla byte array);
看起来它正试图写点什么,但我不知道是什么,或者在哪里。该区域中的代码提到/ dev / random,所以我想我会查看其中的权限,但我不知道该怎么做。
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--
任何想法是什么问题,以及我可以做些什么来补救它?
编辑:我发现似乎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
似乎试图访问OSX显然不允许写入的NativePRNGNonBlocking
。有没有办法让我可以写入它,或者另一种避免这种情况的方法,同时仍然保持非阻塞行为?
答案 0 :(得分:1)
标准种子应该已经提供了足够的熵。
另请参阅:Should I seed a SecureRandom?
如果您仍然喜欢自己的种子,抱歉我无法提供如何写入OSX / dev / urandom的答案。
出于安全目的,/ dev / urandom不是最佳选择,/ dev / random或SecureRandom的默认种子可能是更好的解决方案。
编辑:有些人认为/ dev / urandom也很好: https://www.2uo.de/myths-about-urandom/
答案 1 :(得分:0)
我可以在Oracle JDK 1.8.0-152上重现该问题,但是该问题似乎在Oracle JDK 1.8.0-202中已解决
另请参阅https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8156709