Comments 8
Вы, как человек, разбирающийся больше меня, может знаете — являются ли они взаимозаменяемыми и, если нет, то почему?
Хм, только что наткнулс на википедии, что в /dev/random, Microsoft CryptoAPI и Java SecureRandom используют SHA-1 и MD-5.
Но всё равно лично мне непонятно, почему как нельзя использовать.
random = SHA-3(random)
К примеру тут habr.com/ru/post/122711 пишут: «Самый простой объект который может дать хорошую случайность это хеш-функции.»
habr.com/ru/post/151187 — «Подробно о генераторах случайных и псевдослучайных чисел» («В интернете можно пройти тесты DIEHARD и множество других, чтобы определить критостойкость алгоритма.»)
r = SHA-3( r )
random = r mod 1000
В этом случае даже зная random не получится предсказать значение внутренней переменной r (и предсказать следующее значение random).
PS. По правде говоря, большинство криптостойких хешей имеют длину более 128 бит, а переменная random почти всегда будет 64 бита или короче, поэтому такое усечение будет делаться всегда.
К хеш функциям и "генераторам рандома" предъявляются различные требования при разработке. Криптографические Хеш функции должны быть устойчивы к коллизиям, нахождению прообраза, нахождению второго прообраза и обеспечивать компрессию строк большой длинны в строку малого размера. Генераторы рандома должны уметь генерировать последовательность бит вычислимо неотличимую от случайной последовательности. Так как эти свойства хеш функций и псевдослучайных генераторов не являются эквивалентными, то соответственно криптопримитивы не взаимозаменяемыми в общем случае.
Хеш-функции на основе клеточных автоматов