Як я можу визначити початкові значення генератора псевдовипадкових чисел, якщо задана послідовність?


10

Припустимо, я знав, що послідовність випадкових чисел генерується лінійним вродженим генератором. Це є,

xn+1=(aXn+c)modm

Якщо мені дають весь період (або принаймні велику суміжну послідовність його), як я можу реконструювати параметри a,c,m та x0 які створили цю послідовність? Я шукаю загальний метод, який зможе визначити початкові параметри, якщо відомий генератор псевдовипадкових чисел.


Що саме відомо? Із суміжного підрядів ви не можете сказати, з чого починається послідовність x0 , якщо елементи не індексуються послідовно. Якщо m відомий, то a і c легко виявляються.
хардмат

Відповіді:


11

Дивіться статтю Як зламати лінійний конгрурентний генератор , Халдір ("Команда зворотного проектування", грудень 2004 р.):

У цій роботі я представлю метод, який вирішить усі значення LCG, включаючи модуль з шести або більше послідовними номерами виходу PRNG.

Документ містить вихідний код "доказ концепції", написаний на C, використовуючи NTL Віктора Шоупа для арифметики розширеної точності.


Це був чудовий папір! :) Чи знаєте ви про більш загальний метод, який міг би застосовуватися до інших генераторів випадкових чисел, а не лише до лінійних конгруентних?
Пол

@Paul: Звичайно, можна знайти RNG, які легко "вирішуються" для їх параметрів із достатньої кількості вихідних даних (зворотна проблема), але, здавалося б, чим краще RNG (більш випадкова поява виходу), тим складніше, ніж обернена проблема була б. Рішення випадку LCG пов'язане з певними розмірними ефектами кластеризації, які добре відомі, завдяки чому пари генерованих значень нерівномірно розподіляються. Докладніше див. Дизайн криптографічно сильного генератора шляхом трансформації лінійно
генерованих
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.