Обеспечение энтропии для JVM - PullRequest
0 голосов
/ 17 декабря 2018

Я экспериментировал с API BouncyCastle для Java и медленно пробирался через их книгу "Криптография Java - Инструменты и методы".Книга содержит короткий раздел под названием «Слово об энтропии», в котором говорится следующее:

То, что JVM использует в качестве источника энтропии, будет различным, например, в Linux она обычно устанавливается на «/ dev / random », который может блокировать.Обычно установка «rng-tools» или ближайшего аналога будет иметь дело с этим, поскольку она также предоставит любое базовое оборудование, поддерживающее генерацию RNG, которое будет использоваться для заполнения «/ dev / random».В некоторых виртуальных средах аппаратная поддержка RNG может быть недоступна, в этом случае важно найти другие способы сделать энтропию доступной для вашей JVM.Способы сделать это будут зависеть от среды, которую вы используете.

Возможно, я неправильно понимаю, что говорит этот отрывок, но как именно я могу сделать энтропию доступной для JVM?Книга не очень конкретна по этому поводу, кроме того, что в ней говорится, что «Способы сделать это будут зависеть от среды, которую вы используете».Есть ли какой-то энтропийный SPI, о котором я не знаю, который можно использовать, чтобы сделать источник энтропии доступным для JVM?Мой вопрос не в том, как генерировать энтропию или извлекать ее из JVM, а, скорее, если я уже знаю и имею доступ к надежному источнику энтропии (например, файлу случайных битов), как я могу сделать этот источник энтропиидоступны для JVM, чтобы его можно было использовать для посева в тех случаях, когда другие безопасные источники энтропии недоступны?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я не думаю, что ваша цитата является точным отражением хотя бы Oracle JVM.Вот Javadoc для класса NativePRNG, который обычно выбирается по умолчанию.

public final class NativePRNG extends java.security.SecureRandomSpi

Собственная реализация PRNG для Solaris / Linux / MacOS.Он получает начальные и случайные числа, читая системные файлы, такие как специальные файлы устройств / dev / random и / dev / urandom.Эта реализация учитывает свойство securerandom.source Security и свойство java.security.egd System для получения исходного материала.Если файл, указанный в свойствах, не существует, / dev / random является исходным источником по умолчанию. / dev / urandom является источником случайных чисел по умолчанию.

На некоторых платформах Unix / dev / random может блокироваться до тех пор, пока не станет доступной достаточная энтропия, но это может отрицательно повлиять на воспринимаемое время запуска,Выбирая эти источники, эта реализация пытается найти баланс между производительностью и безопасностью.

Как видите, / dev / urandom, а не / dev / random, является источником энтропии по умолчанию.

0 голосов
/ 17 декабря 2018

Это может варьироваться в зависимости от поставщика JVM, но согласно Как избежать задержек JVM, вызванных генерацией случайных чисел для Sun / Oracle JVM можно установить свойство securerandom.source в файле $JAVA_HOME/jre/lib/security/java.security.Это позволяет изменить источник энтропии, например, от /dev/random до /dev/urandom.

Чтобы добавить больше энтропии, можно просто написать в /dev/random.Согласно этому ответу это может быть небезопасно, но:

Также возможно записать в / dev / random.Это позволяет любому пользователю смешивать случайные данные в пул.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...