SecureRandom: init однажды или каждый раз это необходимо?

Попробуйте назвать внешние ключи для employeeid и changeid, так как они ссылаются на один и тот же столбец идентификаторов таблицы Employee.

20
задан ngn 18 November 2008 в 08:25
поделиться

7 ответов

В отличие от этого, java.util.Random класс, java.security.SecureRandom класс должен произвести недетерминированный вывод на каждом вызове.

то, Что это означает, в случае java.util.Random, если бы необходимо было воссоздать экземпляр с тем же семенем каждый раз, когда Вам было нужно новое случайное число, Вы по существу добрались бы тот же , заканчиваются каждый раз. Однако SecureRandom, как гарантируют, НЕ сделает это - так, создавая единственный экземпляр или создавая новый, который каждый раз делает не , влияют на случайность случайных байтов, которые она генерирует.

Так, от просто нормальной хорошей точки наблюдения методов кодирования, почему создают слишком много экземпляров, когда каждый сделает?

10
ответ дан 30 November 2019 в 00:19
поделиться

Инициализируйте статический экземпляр и используйте его для всех пар ключей. Это больше не будет или менее случайно.

4
ответ дан 30 November 2019 в 00:19
поделиться

Я не полагался бы на SecureRandom, чтобы быть чем-либо кроме криптографически безопасного PRNG. Полная кавычка, которую Gowri использует от javadocs:

Кроме того, SecureRandom должен произвести недетерминированный вывод, и поэтому требуется, что материал семени непредсказуем и что вывод SecureRandom быть криптографически сильными последовательностями, как описано в RFC 1750: Рекомендации Случайности для безопасности.

менее, чем ясно из этого, что реальное ожидание - RFC 1750 детализирует использование аппаратных средств для улучшения генерации случайных чисел, но javadocs говорят "поэтому, что требуется, что материал семени непредсказуем", который, казалось бы, противоречил бы этому.

самое безопасное предположение, чтобы продолжить работать - то, что Ваша реализация SecureRandom является просто криптографически безопасным PRNG, и поэтому что Ваши ключи не более безопасны, чем случайное семя, которое Вы используете. Таким образом инициализируя новый SecureRandom с новым (уникальный, действительно случайный) семя для каждого ключа было бы самой безопасной ставкой.

3
ответ дан 30 November 2019 в 00:19
поделиться

Однажды должен быть достаточно. Мой опыт также состоял в том, что инициализация генераторов типа SecureRandom может иногда быть медленной также (из-за того, как случайность достигается), таким образом, необходимо принять это во внимание.

1
ответ дан 30 November 2019 в 00:19
поделиться

Почему Вы хотели бы создать новый экземпляр каждый раз? Это не похоже, который был бы [еще 110] случайный. Я думаю, что было бы лучше инициализировать однажды и использовать его для всех пар.

-1
ответ дан 30 November 2019 в 00:19
поделиться

Каждое поколение SecureRandom засевается из некоторого пула энтропии. В зависимости от используемой ОС, это может быть пул энтропии, поддерживаемый ОС, например / dev / random в Linux, или это может быть что-то, что готовит JVM. В некоторых более ранних реализациях Sun JVM использовалась для порождения ряда потоков и использования их временных данных для создания начального числа.

Создание нового SecureRandom при каждом вызове может замедлять работу приложения с момента создания. семян может блокировать. Лучше повторно использовать статически созданный экземпляр, но не забудьте повторно заполнить его после того, как из него извлечено фиксированное число случайных байтов. new SecureRandom () - это не что иное, как оболочка для / dev / random , и каждый вызов nextBytes или generateSeed фактически истощает энтропию ОС бассейн. В Linux и Solaris для создания SecureRandom лучше использовать поставщика JCE.

4
ответ дан 30 November 2019 в 00:19
поделиться

Для SecureRandom вы могли бы иногда рассмотреть возможность повторного заполнения ( с использованием системной энтропии в большинстве случаев ) с помощью такого вызова:

mySecureRandom.setSeed(mySecureRandom.generateSeed(someInt));

, чтобы дать потенциальному злоумышленнику что-то меньшее чем неограниченное время, чтобы найти свой ключ.

В блоге Лига справедливости есть несколько замечательных статей об этом.

13
ответ дан 30 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: