Хранить начальное число SecureRandom (SHA1PRNG) в секрете — вычислять хэш перед сидированием?

Я использую SecureRandom с SHA1PRNG для создания случайной последовательности. Я не позволю SecureRandom засеять себя, я использую свои собственные значения для его заполнения. (Пожалуйста, не говорите мне, что это небезопасно, у меня есть на то свои причины).

Однако я не хочу, чтобы кто-нибудь знал, какие семена я использовал. Начальное число должно оставаться секретным, и не должно быть возможности пересчитать начальное число из случайной последовательности.

Имеет ли смысл вычислять SHA-512 по моему значению и использовать его для SecureRandom? Или SecureRandom создаст хэш SHA1 из самого семени?

Короче говоря: должен ли я использовать SecureRandom с «value».getBytes() или с хэшем SHA-512 «value», если я хочу сохранить «value» в секрете?

Где я могу найти информацию о том, как работает алгоритм SHA1PRNG?


person lunfdxar    schedule 31.08.2013    source источник


Ответы (1)


С точки зрения безопасности нет никакой реальной разницы между использованием статического значения или использованием хэша статического значения. Поскольку sha1(x) всегда является одним и тем же значением, вы действительно только что обменяли одно статическое значение на другое статическое значение.

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

person slashingweapon    schedule 31.08.2013
comment
На самом деле я инициализирую SecureRandom статическим значением, объединенным со случайным значением. И я выпущу не свою программу, а случайные последовательности, которые она сгенерировала. Правильно ли я понимаю, что пересчитать начальное число будет невозможно, даже если я не сделаю SHA-512 перед сидированием? - person lunfdxar; 01.09.2013
comment
Верный. Но безопасность этой системы напрямую связана с тем, насколько сложно будет угадать случайные биты, которые вошли в ваше начальное число. Было множество нарушений безопасности вокруг слабых мест в PRNG и начальных числах, поэтому вы должны (1) предположить, что злоумышленник имеет доступ к вашему исходному коду (2) собрать достаточное количество неугадываемых битов и (3) заполнить ваш PRNG с помощью sha_512(concat(static ,случайный)). - person slashingweapon; 01.09.2013
comment
В последнее время люди начали задумываться даже об использовании /dev/random в качестве источника данных. Предполагается, что это относительно безопасный способ получения случайных битов, но в последнее время мы слышали, что в некоторых операционных системах АНБ могло скомпрометировать его. - person slashingweapon; 09.10.2013