Рейтинг:4

Java: SecureRandom.getInstanceStrong() против нового SecureRandom()

флаг ht

Данный SecureRandom считается подходящим для использования в криптографии, я считаю новый безопасный случайный() быть в безопасности (забавный термин, не так ли?).

Если новый безопасный случайный() уже безопасно, какая польза от использования SecureRandom.getInstanceStrong() вместо?

Это такая же разница, как между /dev/urandom и /dev/случайный?

Я обсуждаю это в следующем сценарии, где меня больше всего беспокоит случайность IV (для использования с AES-GCM):

закрытый финал SecureRandom secureRandom = new SecureRandom();

[...]

частный байт[] getIv() {
    интервал ivLength = 12;
    byte[] iv = новый байт[ivLength];
    SecureRandom.nextBytes(iv);
    вернуться IV;
}
kelalaka avatar
флаг in
[См. сноску: зависит от ОС, в IOS они одинаковы] (https://crypto.stackexchange.com/a/85545/18298)
kelalaka avatar
флаг in
Это вызов библиотеки для получения экземпляра... [SecureRandom.getInstanceStrong()](https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html). ] (https://stackoverflow.com/a/37256739/1820553)
Paul Uszak avatar
флаг cn
Ре. random: Нет (для старых версий ядра ex.NSA). `\dev\random` было TRNG, а `dev\urandom` было PRNG.
Gilles 'SO- stop being evil' avatar
флаг cn
GCM IV не обязательно должен быть случайным. Только он должен быть уникальным. Так что для данного конкретного случая это не имеет значения. Единственная причина для использования случайного IV для GCM заключается в том, что вы не можете вспомнить все IV, которые использовались ранее, поэтому вместо этого вы полагаетесь на статистическую уникальность. Для этого достаточно иметь статистически случайное значение, оно даже не обязательно должно быть криптографически случайным (что является более сильным свойством, включая непредсказуемость и независимость от всех других случайных значений).
Paul Uszak avatar
флаг cn
@kelalaka На самом деле это немного беспорядок в Java. `securerandom.source=file:/dev/random`, который, конечно же, блокируется.Поэтому, если вы запустили сервер приложений, для возврата HTTP-запроса потребовалось около пяти минут. Даже такой глупый, как мой сайт без https, что довольно удивительно (вероятно, генерация файлов cookie).
kelalaka avatar
флаг in
То, что сказал @Gilles, верно. Если возможно, используйте [AES-GCM-SIV] (https://crypto.stackexchange.com/q/82105/18298), чтобы смягчить эту проблему...
Рейтинг:2
флаг in

SecureRandom.getInstanceStrong() гарантирует, что будет использоваться надежный алгоритм (securerandom.strongAlgorithms).

  • Он доступен с Java версии 8. Проверьте свою версию перед началом использования.

  • Если такого алгоритма нет при работающей виртуальной машине он выдаст NoSuchAlgorithmException.

  • Этот сбой является лучшей практикой, чем использование по умолчанию слабой безопасности.

kelalaka avatar
флаг in
Добро пожаловать в Криптографию. Ссылка на это утверждение или строку кода из источника сделает этот ответ намного лучше. В противном случае это самоутверждение. Например, можно также сказать, что нет сильного (в чем смысл сильного) алгоритма, тогда он будет использовать алгоритм по умолчанию; java.util. Случайный. Нужна ссылка, а в случае с Java даже версии.
флаг in
Спасибо за ваш отзыв, kelalaka, я добавил еще немного пояснений, как вы и предложили.
kelalaka avatar
флаг in
Есть ли список сильных алгоритмов?
Paul Uszak avatar
флаг cn
@kelalaka «Сильный» — это общий термин, используемый криптографами, агентствами и тоталитарными правительствами для обозначения того, что шифрование невозможно взломать в режиме реального времени. Список есть [здесь] (https://crypto.stackexchange.com/a/62515/23115). Я не знаю, следует ли добавлять AES, поскольку нет математических доказательств того, что он по-прежнему безопасен.
kelalaka avatar
флаг in
@PaulUszak, о котором я говорю в контексте безопасности Java и особенно о генераторах случайных чисел.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.