Что такое эквивалент /dev/urandom на уровне Windows JVM
В последнее время я сталкиваюсь с неприятностями, потому что отсутствие энтропии и блокировка случайных операций ввода-вывода привели к зависаниям. В Linux я могу сделать следующее:
JAVA_OPTS=-Djava.security.egd=/dev/urandom ./myStartScript.sh
Что эквивалентно в Windows? Мы запускаем приложение как на серверах Linux и Windows, так и на серверах Linux, использующих OpenJDK JRE, и на серверах Windows, использующих Oracle JRE.
Я нашел много предложений о CryptGenRandom
, но как я могу передать это приложению на уровне JVM?
1 ответ
Я нашел документацию в jre/lib/security/java.security, которая подтверждает это. Вот цитата
Выберите основной источник начальных данных для реализаций SecureRandom "SHA1PRNG" и "NativePRNG" в поставщике "Sun". (Другие реализации SecureRandom также могут использовать это свойство.)
В Unix-подобных системах (например, Solaris/Linux/MacOS) реализации "NativePRNG" и "SHA1PRNG" получают начальные данные из специальных файлов устройств, таких как file:/dev/random.
В системах Windows указание URL-адресов "file:/dev/random" или "file: / dev / urandom" активирует собственный механизм заполнения Microsoft CryptoAPI для SHA1PRNG.
По умолчанию делается попытка использовать устройство для сбора энтропии, указанное в свойстве Security "securerandom.source". Если исключение происходит при доступе к указанному URL:
SHA1PRNG: the traditional system/thread activity algorithm will be used. NativePRNG: a default value of /dev/random will be used. If neither are available, the implementation will be disabled. "file" is the only currently supported protocol type.