Как (если это вообще возможно) предсказуемый генератор случайных чисел становится более безопасным после выхода SHA-1? - PullRequest
9 голосов
/ 08 июля 2011

В этой статье говорится, что

Несмотря на то, что Mersenne Twister является чрезвычайно хорошим генератором псевдослучайных чисел, он сам по себе не является криптографически защищенным по очень простой причине. Можно определить все будущие состояния генератора по состоянию, которое имеет генератор в любой момент времени, и для обеспечения этого состояния достаточно либо 624 32-битных выходов, либо 19 937 однобитных выходов. Использование криптографически защищенной хеш-функции, такой как SHA-1, на выходе Mersenne Twister было рекомендовано в качестве одного из способов получения потока ключей, полезного в криптографии.

Но нет никаких ссылок на то, почему переваривание вывода сделало бы его более безопасным. И, честно говоря, я не понимаю, почему это должно быть так. Твистер Мерсенна имеет период 2 ^ 19937-1, но я думаю, что мои рассуждения также применимы к любому периодическому PRNG, например, Линейные конгруэнтные генераторы, а также. Из-за свойств безопасной односторонней функции h можно думать о h как о инъективной функции (в противном случае мы могли бы создавать коллизии), таким образом, просто отображая значения из ее области в свой диапазон однозначным образом.

Имея в виду эту мысль, я бы сказал, что хэшированные значения приведут к точно такому же периодическому поведению, что и оригинальная версия Mersenne Twister. Это означает, что если вы наблюдаете все значения за один период и значения начинают повторяться, то вы вполне можете предсказать все будущие значения.

Я предполагаю, что это связано с тем же принципом, который применяется в шифровании на основе паролей ( PKCS # 5 ) - поскольку домен паролей не обеспечивает достаточной энтропии, просто хеширование паролей не дает добавьте любую дополнительную энтропию - вот почему вам нужно подсолить пароли, прежде чем их хешировать Я думаю, что здесь применяется точно такой же принцип.

Один простой пример, который окончательно убедил меня: предположим, у вас очень плохой PRNG, который всегда выдаст «случайное число» 1. Тогда даже если SHA-1 будет идеальной односторонней функцией, применяя SHA-1 к результат всегда будет давать одно и то же значение, что сделает выход не менее предсказуемым, чем раньше.

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

Ответы [ 2 ]

15 голосов
/ 08 июля 2011

Состояние мерсеннового твистера определяется предыдущими n выходами, где n - степень повторения (постоянная). Таким образом, если вы дадите атакующему n выходы прямо из твистера Мерсенна, они сразу смогут предсказать все будущие значения.

Передача значений через SHA-1 усложняет задачу, так как теперь злоумышленник должен попытаться обратить вспять ГСЧ. Однако для 32-битного слова это вряд ли будет серьезным препятствием для решительного злоумышленника; они могут построить радужную таблицу или использовать какой-то другой стандартный подход для обращения вспять SHA-1 и в случае коллизий отфильтровать кандидатов по тому, генерируют ли они наблюдаемый поток ГСЧ. Как таковой, мерсенновый твистер не должен использоваться для криптографически чувствительных приложений, маскировки SHA-1 или нет. Есть несколько стандартных CSPRNG , которые могут быть использованы вместо.

5 голосов
/ 08 июля 2011

Злоумышленник может прогнозировать выходной сигнал MT на основании относительно небольшого количества выходных данных не потому, что он повторяется в течение такого короткого периода времени (он этого не делает), а потому, что выходные данные пропускают информацию о внутреннем состоянии PRNG.Хэширование выходных данных скрывает эту утечку информации.Однако, как указывает @bdonlan, если выходной размер небольшой (например, 32 бита), это не помогает, поскольку злоумышленник может легко перечислить все действительные открытые тексты и предварительно рассчитать их хэши.

Использование более 32 битов вывода PRNG в качестве входных данных для хэша сделало бы это непрактичным, но криптографически безопасный PRNG по-прежнему гораздо лучший выбор, если вам нужно это свойство.

...