Рейтинг:1

Как измерить длину 128-битного цикла PRNG?

флаг tf
Tom

Я набрал 128-битный PRNG. Он прошел тесты PractRand и Dieharder, но я понятия не имею, какая от него ожидается продолжительность цикла (для разных ключей и разных семян).

Есть ли способ оценить это с помощью анализа выходных данных этого генератора? Я пытаюсь анализировать циклы в 16-битных частях 128-битных выходов. 16-битные числа повторяются в усеченных 16-битных частях 128-битного вывода в среднем через каждые $6331708$ шаги. Например номер $14649$ встречается в младших 16 битах нерегулярно после:

$1385856, 6793856, 4734720, 4043776, 17823744, 3705088, 5609216, 1174784, 3718656, 181504, 14063616, 13729024, 10346880, 15782016, 1561088, 1996672, 988544$

шагов (и это выглядит аналогично, когда мы проверяем каждое второе 16-битное число с помощью этих ключей). Но на основе такого анализа последовательных частей 16-битного генератора можно сделать какие-то выводы о цикле всего генератора?

Кстати, разве мы не должны ожидать, что случайное 16-битное число будет встречаться один раз в каждом $2^{16}$ шаги? Поначалу случайно выбранные 16-битные числа мне кажутся редкостью или я что-то не понимаю?

fgrieu avatar
флаг ng
Можно экспериментально показать, что ГПСЧ небезопасен или имеет короткий период. Никакой метод изучения его вывода не может определить, является ли он безопасным или имеет длительный период. Для этого необходимо изучить, как работает PRNG.
Tom avatar
флаг tf
Tom
Хорошо, я должен учитывать, что у меня нет теории о периоде. Так что нет никакого способа узнать что-нибудь о периоде PRNG? Таким образом, не имеет значения, передает ли он PractRand до 2^42 байт, он может войти в цикл длины $2^{50}$ или $2^{100}$, и мы не можем выяснить, как это происходит, просто анализируя выходы?
Maarten Bodewes avatar
флаг in
По определению (?) выходные данные ГСЧ ничего не должны говорить вам о состоянии ГСЧ. Таким образом, просто глядя на части вывода, вы не получите многого, если вообще поймете возможность цикла. Вы можете найти только нарушения, но они должны проявиться при тестировании. Если тесты не пройдены, я думаю, цикл это или нет, не имеет значения :)
fgrieu avatar
флаг ng
Точно. Если период не меньше (с небольшим запасом), чем проверяемая длина, статистический тест, работающий на выходе PRNG, не может найти период. Опять же, статистические тесты полезны только для того, чтобы доказать, что плохие PRNG плохи или/и имеют короткий период. Когда тест не обнаруживает дефект / короткий период, мы не можем сделать вывод о тестируемом PRNG. Точно так же, как после того, как мы увидели муравья, благополучно идущего по мосту, мы не можем прийти к положительному выводу о мосте. Нам нужно увидеть его схему и осмотреть его конструкцию.
kodlu avatar
флаг sa
ваше утверждение неточно. если это распределения промежутков для определенного 16-битного «окна», проверили ли вы *все* 16-битные окна? характерно ли такое распределение пропусков для всего набора 16-битных окон?
Tom avatar
флаг tf
Tom
@kodlu Я сделал это неправильно, таких больших пробелов быть не может и нет (я сделал неправильный код Python).
user2357 avatar
флаг us
@fgrieu как насчет lfsr, где вычисляется самый длинный период, и его можно было бы достичь с помощью соображений с примитивными полиномами? Я только что читал о чем-то подобном в книге под названием «Понимание криптографии».
Рейтинг:3
флаг my

Есть ли способ оценить это с помощью анализа выходных данных этого генератора?

Как говорится в комментариях, не совсем (если только генератор не был очень плохим).

Я пытаюсь анализировать циклы в 16-битных частях 128-битных выходов. Кстати, разве мы не должны ожидать, что случайное 16-битное число будет встречаться один раз в каждом $2^{16}$ шаги?

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

С другой стороны, вы, кажется, перечисляете пробелы в вхождениях определенного 216-битного значения (14649), и эти пробелы выглядят довольно странно. Если бы PRNG был хорошим, мы ожидали бы, что промежутки между появлениями будут следовать экспоненциальному распределению (со средним значением 65536, как вы сказали); хотя иногда вы будете видеть разрывы, значительно превышающие среднее значение, вы почти никогда не должны видеть разрыв в 100 раз больше среднего (и вы показываете даже большие) - это тип "многократного выигрыша в лотерею" событие. Тот факт, что вы, кажется, указывает на то, что: а) я неправильно интерпретирую данные, б) вы неправильно измеряете разрыв, или в) PRNG серьезно неоднороден.

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

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

Tom avatar
флаг tf
Tom
Вы правы, я ошибся в своем коде и неправильно измерил эти повторения. При таких отклонениях этот генератор наверняка провалил бы испытания. Так или иначе, я должен работать над теорией о циклах этого генератора.

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

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