Как вскрыть линейный конгруэнтный генератор псевдослучайных чисел? В учебных целях, я хочу взломать самый простой ГПСЧ.
Здесь могут помочь даже те, кто не знает про линейный конгруэнтный генератор или про гпсч в принципе, т.к. вопрос в недопонимании английского текста и немного математики.
Для вас вкратце: Есть такая штука как генератор псевдослучайных чисел. т.е. рандом, если проще. "Псевдослучайные" они потому что они не случайны, но похожи на таковые. Одна из реализаций такого генератора:
Xn+1=(aXn+c) mod m
Где Xn – это n-ый член последовательности. Переменные a, c и m – постоянные: a – множитель, c – инкремент, m – модуль. X0 – начальное значение.
Мои условия взлома:
1. Мы знаем, что генератор основан на линейном конгруэнтном методе.
2. Мы не знаем a, c и m.
3. Мы можем получить любые члены последовательности.
Задача: определить a,c,m (с большей вероятностью).
Несколько способов нашел в английском варианте. Мне нужен любой из них или другой, который я не знаю.
На этом сайте решают это брутфорсом. Единственное, там дана не вся последовательность, а каждый второй член. Поэтому, насколько я понял, проделывать PowerMod не нужно. Вопросы по этому способу следующие:
1. Я правильно понял, что второй код реализован потому, что первый выдавал два результата, а нам нужен один?
2. Вопрос по модульной арифметике: Как получили, что c = X2 - ((X1 * a) % m) (в первом коде)?
3. Почему m < 10*M_START?
4. Что происходит во втором коде?
Вот тут - Plumstead’s algorithm. А здесь - алгоритм Дж. Марсальи Поясните пожалуйста, кто понял, с математической точки зрения.
Другие ссылки :Modular arithmetic + division by multiplication + ...Why 1103515245 is used in rand?Cracking a linear congruential generatorDesign of Cryptographically Strong Generator By Tr...

21 Авг 2019 в 06:10
427 +1
0
Ответы
1
Да, вы правильно поняли. Во втором коде каждый второй член последовательности используется для нахождения параметров a, c и m.Формула c = X2 - ((X1 * a) % m) получена из уравнения Xn+1=(aXn+c) mod m, заменой X1 и X2 на соответствующие значения.Условие m < 10*M_START может быть связано с тем, что выбор модуля m важен для обеспечения цикличности и хороших свойств генератора.Во втором коде используется алгоритм, который позволяет найти параметры a, c и m, используя последовательность псевдослучайных чисел.

По ссылкам можно изучить дополнительные материалы по модульной арифметике и обоснованию использования определенных чисел в ГПСЧ.

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 89 837 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир