Pull to refresh

Comments 14

Вопрос от неспециалиста - а почему во время каждой генерации числа к сиду не прибавляется другая псевдослучайная величина (количество микросекунд, к примеру)?

Вообще, reseeding иногда вызывается, но в лоб прибавлять слабо меняющуюся величину — смотря куда. Если к выдаче, то толком ничего не поменяется, правда в свете этой статьи закономерность работы ГПСЧ для нейросети поломается. Если внутри ГПСЧ, то можно его целиком сломать вплоть до выдачи одного и того же набора чисел. Вероятно, криптостойкость снизится при хоть каком-то использовании дополнительного источника возмущений, особенно текущего/прошедшего времени, но если в качестве добавки брать источник энтропии вроде генератора белого шума — стойкость увеличится на какую-то величину, зато упадет скорость, так как энтропия генерируется за большее время, чем прогоняется довольно простой и быстрый алгоритм ГПСЧ. По-моему так.

Потому что это не всегда полезно, а иногда даже и вредно. Например, когда количество микросекунд (относительно чего, кстати) имеет низкую энтропию (предсказуемо).

Например, была как-то история с массовым взломом ssh на soho-роутерах некоторого производителя. Там ключ хоста за неимением аппаратного генератора создавался из программного генератора с сидом микросекундами аптайма. Казалось бы, что может пойти не так? Только вот после первого включения коробочки в розетку ключи на всех устройствах генерились ±в один и тот же момент аптайма.

Или ещё вариант — периодически "досид" микросекундами сетевой задержки. Казалось бы, что может пойти не так? А если злоумышленник врезался в сетевой провод и может контролировать сетевую задержку?

Многие генераторы пытаются выжимать максимум скорости из генерации (статья про гонку рандомов), в частности xorshiro был рекордсменом и смог пройти часть мейнстримных тестов рандома, которые определяли насколько рандомные данные, чтобы статистически нельзя было определять следующее значение (wiki). Получение энтропии из девайсов или как вы предлагаете — даты времени, процесс супер не быстрый в сравнении с основным куском кода. Видимо скоро нас ждут новые варианты тестов для генераторов.

чтобы статистически нельзя было определять следующее значение

Теперь статистически можно.

По крайней мере некоторые тестовые наборы типа DIEHARD просто оценивают качество рандома на определенных данных — всякие распределения пуассона, нормаьности и пр. Никого из тех кого считают криптографически безопасным пока в списке нет.

Потому, что это недостаточная, но затратная мера. Если вам нужен защищенный генератор — используйте криптографический ГПСЧ, дополненный системой сбора энтропии. А пытаясь прикрутить сбор энтропии к обычному ГПСЧ, вы по всем показателям потеряете: ни защищенности не получите, ни скорости.
ГПСЧ должен выдавать одну и ту же последовательность чисел при одинаковом сиде по определению. Так что использование любого аппаратного источника энтропии сразу же выводит алгоритм из класса ГПСЧ
UFO landed and left these words here

Как я понимаю, взломом здесь назвали получение стартового сида по нескольким значениям "чистого" вывода PRNG, взятым подряд (в оригинальной статье слово есть, в этом посте — нет). Обойти довольно просто — выдавать не подряд идущие значения, а количество, сколько пропускать, определять со стороннего источника раз в сотню вызовов, например. При этом пропускать можно тоже по алгоритму, скажем, 0-1 в зависимости от пришедшего dword, какой следующий бит управляет, также можно сгенерировать из соседней выдачи перестановку 0-31, ну или покороче, или просто забить на перестановку и использовать 0-31…


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

Неужели никто не пробовал никогда складывать шесть или более раз числа, производимые ГПСЧ, а потом оценить полученные значения на соответствие нормальному распределению?

Интересно, а как насчёт посчитать SHA-256 в обратную сторону?

Фарш Хэш невозможно прокрутить назад, но высчитать что-то дающее такой же хеш наверно можно. А вот АЕS-256...

высчитать что-то дающее такой же хеш наверно можно

Тоже нельзя. Ну, то есть, можно, но чрезвычайно затратно. Создать коллизию для криптостойкого хеша — это то же самое, что подделать электронную подпись (которая на хеше, как правило, и основана).
Sign up to leave a comment.