Метод SecureRandom setSeed не работает на MacOS - PullRequest
0 голосов
/ 11 июня 2018

Запуск 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, кажется, пытается получить доступ к /dev/urandom, который OSX, по-видимому, не позволяет писать.Есть ли способ, которым я могу разрешить запись в него, или другой способ избежать этого при сохранении неблокирующего поведения?

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я мог бы воспроизвести проблему в Oracle JDK 1.8.0-152, но проблема, кажется, исправлена ​​в Oracle JDK 1.8.0-202

, см. Также https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8156709

0 голосов
/ 12 июня 2018

Стандартное семя уже должно обеспечивать достаточную энтропию.

См. Также: Должен ли я сеять SecureRandom?

Если вам все еще нравится ваше собственное семя, извините, что яне может дать ответ, как писать в OSX /dev/urandom.

В целях безопасности / dev / urandom - не лучший выбор, / dev / random или начальное число по умолчанию для SecureRandom могут стать лучшим решением.

Редактировать: Ну, некоторые люди думают, что / dev / urandom тоже подойдет: https://www.2uo.de/myths-about-urandom/

...