Как вскрыть линейный конгруэнтный генератор псевдослучайных чисел? В учебных целях, я хочу взломать самый простой ГПСЧ. Здесь могут помочь даже те, кто не знает про линейный конгруэнтный генератор или про гпсч в принципе, т.к. вопрос в недопонимании английского текста и немного математики. Для вас вкратце: Есть такая штука как генератор псевдослучайных чисел. т.е. рандом, если проще. "Псевдослучайные" они потому что они не случайны, но похожи на таковые. Одна из реализаций такого генератора: 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...
Да, вы правильно поняли. Во втором коде каждый второй член последовательности используется для нахождения параметров a, c и m.Формула c = X2 - ((X1 * a) % m) получена из уравнения Xn+1=(aXn+c) mod m, заменой X1 и X2 на соответствующие значения.Условие m < 10*M_START может быть связано с тем, что выбор модуля m важен для обеспечения цикличности и хороших свойств генератора.Во втором коде используется алгоритм, который позволяет найти параметры a, c и m, используя последовательность псевдослучайных чисел.
По ссылкам можно изучить дополнительные материалы по модульной арифметике и обоснованию использования определенных чисел в ГПСЧ.
По ссылкам можно изучить дополнительные материалы по модульной арифметике и обоснованию использования определенных чисел в ГПСЧ.