stringtranslate.com

Генератор псевдослучайных чисел

Генератор псевдослучайных чисел ( PRNG ), также известный как детерминированный генератор случайных битов ( DRBG ), [1] представляет собой алгоритм для генерации последовательности чисел, свойства которой приближаются к свойствам последовательностей случайных чисел . Последовательность, сгенерированная PRNG, не является истинно случайной , поскольку она полностью определяется начальным значением, называемым семенем PRNG (которое может включать истинно случайные значения). Хотя последовательности, которые ближе к истинно случайным, могут быть сгенерированы с помощью аппаратных генераторов случайных чисел , генераторы псевдослучайных чисел важны на практике из-за их скорости генерации чисел и их воспроизводимости. [2]

PRNG играют центральную роль в таких приложениях, как моделирование (например, для метода Монте-Карло ), электронные игры (например, для процедурной генерации ) и криптография . Криптографические приложения требуют, чтобы выходные данные не были предсказуемы из более ранних выходных данных, и необходимы более сложные алгоритмы , которые не наследуют линейность более простых PRNG.

Хорошие статистические свойства являются центральным требованием к выходу PRNG. В общем, требуется тщательный математический анализ, чтобы иметь уверенность в том, что PRNG генерирует числа, которые достаточно близки к случайным, чтобы соответствовать предполагаемому использованию. Джон фон Нейман предостерегал от неправильного толкования PRNG как действительно случайного генератора, шутя, что «Любой, кто рассматривает арифметические методы получения случайных цифр, конечно, находится в состоянии греха». [3]

Возможные проблемы

На практике выходные данные многих распространенных PRNG демонстрируют артефакты , из-за которых они не проходят статистические тесты на обнаружение закономерностей. К ним относятся:

Дефекты, демонстрируемые неисправными PRNG, варьируются от незаметных (и неизвестных) до очень очевидных. Примером может служить алгоритм случайных чисел RANDU , который десятилетиями использовался на мэйнфреймах . Он имел серьезные недостатки, но его неадекватность оставалась незамеченной в течение очень долгого времени.

Во многих областях исследовательская работа до 21-го века, которая опиралась на случайный выбор или моделирование Монте-Карло , или иным образом опиралась на PRNG, была гораздо менее надежной, чем идеальная, в результате использования PRNG низкого качества. [4] Даже сегодня иногда требуется осторожность, как показано в следующем предупреждении в Международной энциклопедии статистической науки (2010). [5]

Список широко используемых генераторов, от которых следует отказаться, гораздо длиннее [чем список хороших генераторов]. Не доверяйте слепо поставщикам программного обеспечения. Проверьте генератор случайных чисел по умолчанию вашего любимого программного обеспечения и будьте готовы заменить его при необходимости. Эта последняя рекомендация звучала снова и снова за последние 40 лет. Возможно, это удивительно, но она остается такой же актуальной сегодня, как и 40 лет назад.

В качестве иллюстрации рассмотрим широко используемый язык программирования Java . До 2020 года Java по-прежнему полагалась на линейный конгруэнтный генератор (LCG) для своего PRNG, [6] [7] , который имеет низкое качество (см. далее ниже). Поддержка Java была улучшена с Java 17 .

Одним из известных ГПСЧ, избежавших серьезных проблем и по-прежнему работавших довольно быстро, является Вихрь Мерсенна (обсуждается ниже), опубликованный в 1998 году. Другие ГПСЧ более высокого качества, как с точки зрения вычислительной, так и статистической производительности, были разработаны до и после этой даты; их можно найти в Списке генераторов псевдослучайных чисел .

Генераторы на основе линейных рекуррент

Во второй половине 20-го века стандартный класс алгоритмов, используемых для PRNG, включал линейные конгруэнтные генераторы . Качество LCG было известно как неадекватное, но лучших методов не было. Пресс и др. (2007) описали результат следующим образом: «Если бы все научные статьи, результаты которых сомнительны из-за [LCG и связанных с ними], исчезли с библиотечных полок, на каждой полке образовался бы зазор размером с ваш кулак». [8]

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

Изобретение в 1997 году вихря Мерсенна [9] в частности позволило избежать многих проблем с более ранними генераторами. У вихря Мерсенна период составляет 2 19 937  − 1 итераций (≈ 4,3 × 106001 ), как доказано, равномерно распределен в (до) 623 измерениях (для 32-битных значений) и на момент своего появления работал быстрее, чем другие статистически обоснованные генераторы.

В 2003 году Джордж Марсалья представил семейство генераторов xorshift , [10] снова основанных на линейной рекуррентности. Такие генераторы чрезвычайно быстры и, в сочетании с нелинейной операцией, проходят сильные статистические тесты. [11] [12] [13]

В 2006 году было разработано семейство генераторов WELL . [14] Генераторы WELL в некотором роде улучшают качество Mersenne Twister, который имеет слишком большое пространство состояний и очень медленное восстановление из пространств состояний с большим количеством нулей.

Криптографические PRNG

PRNG, подходящий для криптографических приложений, называется криптографически безопасным PRNG (CSPRNG). Требование к CSPRNG заключается в том, что противник, не знающий начального числа, имеет лишь незначительное преимущество в различении выходной последовательности генератора от случайной последовательности. Другими словами, в то время как PRNG требуется только для прохождения определенных статистических тестов, CSPRNG должен проходить все статистические тесты, которые ограничены полиномиальным временем от размера начального числа. Хотя доказательство этого свойства выходит за рамки текущего состояния теории вычислительной сложности , убедительные доказательства могут быть предоставлены путем сведения к CSPRNG проблемы , которая считается сложной , такой как факторизация целых чисел . [15] В общем случае могут потребоваться годы проверки, прежде чем алгоритм может быть сертифицирован как CSPRNG.

Некоторые классы CSPRNG включают следующее:

Было показано, что, скорее всего, АНБ внедрило асимметричный бэкдор в сертифицированный NIST генератор псевдослучайных чисел Dual_EC_DRBG . [19]

Большинство алгоритмов PRNG создают последовательности, которые равномерно распределены любым из нескольких тестов. Это открытый вопрос, и один из центральных для теории и практики криптографии , есть ли способ отличить вывод высококачественного PRNG от действительно случайной последовательности. В этой ситуации различающий знает, что использовался либо известный алгоритм PRNG (но не состояние, с которым он был инициализирован), либо использовался действительно случайный алгоритм, и должен различать их. [20] Безопасность большинства криптографических алгоритмов и протоколов, использующих PRNG, основана на предположении, что невозможно отличить использование подходящего PRNG от использования действительно случайной последовательности. Простейшими примерами этой зависимости являются потоковые шифры , которые (чаще всего) работают путем исключающего или -инга открытого текста сообщения с выводом PRNG, создавая шифротекст . Разработка криптографически адекватных PRNG чрезвычайно сложна, поскольку они должны соответствовать дополнительным критериям. Размер периода является важным фактором криптографической пригодности ГПСЧ, но не единственным.

Критерии оценки BSI

Федеральное ведомство по информационной безопасности Германии ( нем . Bundesamt für Sicherheit in der Informationstechnik , BSI) установило четыре критерия качества детерминированных генераторов случайных чисел. [21] Они обобщены здесь:

Для криптографических приложений приемлемы только генераторы, соответствующие стандартам K3 или K4.

Математическое определение

Данный:

Мы называем функцию (где — множество положительных целых чисел) генератором псевдослучайных чисел для заданного принимающего значения тогда и только тогда, когда :

( обозначает количество элементов в конечном множестве .)

Можно показать, что если — генератор псевдослучайных чисел для равномерного распределения на и если — функция распределения некоторого заданного распределения вероятностей , то — генератор псевдослучайных чисел для , где — процентиль , т. е . . Интуитивно, произвольное распределение можно смоделировать из моделирования стандартного равномерного распределения.

Ранние подходы

Один из первых компьютерных ГПСЧ, предложенный Джоном фон Нейманом в 1946 году, известен как метод среднего квадрата . Алгоритм выглядит следующим образом: берем любое число, возводим его в квадрат, удаляем средние цифры полученного числа как «случайное число», затем используем это число в качестве начального числа для следующей итерации. Например, возведение в квадрат числа «1111» дает «1234321», что можно записать как «01234321», причем 8-значное число является квадратом 4-значного числа. Это дает «2343» в качестве «случайного» числа. Повторение этой процедуры дает «4896» в качестве следующего результата и так далее. Фон Нейман использовал 10-значные числа, но процесс был тем же самым.

Проблема метода «среднего квадрата» заключается в том, что все последовательности в конечном итоге повторяются, некоторые очень быстро, например «0000». Фон Нейман знал об этом, но он считал этот подход достаточным для своих целей и беспокоился, что математические «исправления» просто скроют ошибки, а не устранят их.

Фон Нейман счел аппаратные генераторы случайных чисел непригодными, поскольку, если они не записывали сгенерированный вывод, их нельзя было впоследствии проверить на наличие ошибок. Если бы они записывали свой вывод, они бы исчерпали ограниченную доступную тогда память компьютера, а значит, и способность компьютера считывать и записывать числа. Если бы числа записывались на карты, их запись и считывание заняли бы гораздо больше времени. На компьютере ENIAC , который он использовал, метод «среднего квадрата» генерировал числа со скоростью, в сто раз превышающей скорость считывания чисел с перфокарт .

Метод среднего квадрата с тех пор был вытеснен более сложными генераторами.

Недавнее новшество — объединение среднего квадрата с последовательностью Вейля . Этот метод обеспечивает высококачественный вывод в течение длительного периода (см. метод среднего квадрата ).

Неравномерные генераторы

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

Во-первых, нужна кумулятивная функция распределения целевого распределения :

Обратите внимание, что . Используя случайное число c из равномерного распределения в качестве плотности вероятности «пройти мимо», получаем

так что

это число, случайно выбранное из распределения . Это основано на обратном преобразовании выборки .

Например, инверсия кумулятивного гауссовского распределения с идеальным равномерным PRNG с диапазоном (0, 1) в качестве входных данных даст последовательность (только положительных) значений с гауссовым распределением; однако

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

Смотрите также

Ссылки

  1. ^ Баркер, Элейн; Баркер, Уильям; Берр, Уильям; Полк, Уильям; Смид, Майлз (июль 2012 г.). "Рекомендация по управлению ключами" (PDF) . Специальная публикация NIST 800-57 . NIST . doi :10.6028/NIST.SP.800-57p1r3 . Получено 19 августа 2013 г. .
  2. ^ "Генератор псевдослучайных чисел". Khan Academy . Получено 2016-01-11 .
  3. ^ Фон Нейман, Джон (1951). «Различные методы, используемые в связи со случайными цифрами» (PDF) . Серия «Прикладная математика» Национального бюро стандартов . 12 : 36–38.
  4. ^ Пресс и др. (2007), гл.7
  5. ^ L'Ecuyer, Pierre (2010). "Генератор случайных чисел с равномерным распределением". В Lovric, Miodrag (ред.). Международная энциклопедия статистической науки . Springer. стр. 1629. ISBN 978-3-642-04897-5.
  6. ^ Случайный (Java Platform SE 8), Документация Java Platform Standard Edition 8.
  7. ^ Random.java в OpenJDK .
  8. ^ Пресс и др. (2007) §7.1
  9. ^ Мацумото, Макото; Нисимура, Такудзи (1998). «Вихрь Мерсенна: 623-мерно равномерный генератор псевдослучайных чисел» (PDF) . Труды ACM по моделированию и компьютерному моделированию . 8 (1). ACM : 3–30. doi :10.1145/272991.272995. S2CID  3332028.
  10. ^ Марсалья, Джордж (июль 2003 г.). "Xorshift RNGs". Журнал статистического программного обеспечения . 8 (14). doi : 10.18637/jss.v008.i14 . S2CID  250501391.
  11. ^ С.Вигна. «Генератор xorshift*/xorshift+ и перестрелка PRNG».
  12. ^ Винья С. (2016), «Экспериментальное исследование генераторов ксоршифта Марсальи», ACM Transactions on Mathematical Software , 42; doi : 10.1145/2845077.
  13. ^ Винья С. (2017), «Дальнейшие скремблирования генераторов ксоршифта Марсальи», Журнал вычислительной и прикладной математики , 315; doi : 10.1016/j.cam.2016.11.006.
  14. ^ Паннетон, Франсуа; Л'Экуайе, Пьер; Мацумото, Макото (2006). «Улучшенные генераторы длинных периодов на основе линейных рекуррент по модулю 2» (PDF) . ACM Transactions on Mathematical Software . 32 (1): 1–16. doi :10.1145/1132973.1132974. S2CID  7368302.
  15. Song Y. Yan (7 декабря 2007 г.). Криптоаналитические атаки на RSA . Springer, 2007. стр. 73. ISBN 978-0-387-48741-0.
  16. ^ Нильс Фергюсон ; Брюс Шнайер ; Тадаёси Коно (2010). «Криптографическая инженерия: принципы проектирования и практическое применение, глава 9.4: Генератор» (PDF) .
  17. ^ Клаус Поммеренинг (2016). "IV.4 Идеальные генераторы случайных чисел". Криптология . uni-mainz.de . Получено 12.11.2017 .
  18. ^ Пасс, Рафаэль. "Лекция 11: Теорема Голдрайха-Левина" (PDF) . COM S 687 Введение в криптографию . Получено 20 июля 2016 г. .
  19. Мэтью Грин (18 сентября 2013 г.). «Множество недостатков Dual_EC_DRBG».
  20. ^ Кац, Джонатан; Йехуда, Линделл (2014). Введение в современную криптографию . CRC press. стр. 70.
  21. ^ аб Шиндлер, Вернер (2 декабря 1999 г.). «Классы функциональности и методология оценки детерминированных генераторов случайных чисел» (PDF) . Anwendungshinweise und Interpretationen (AIS) . Bundesamt für Sicherheit in der Informationstechnik . стр. 5–11 . Проверено 19 августа 2013 г.
  22. ^ "Требования безопасности для криптографических модулей". FIPS . NIST . 1994-01-11. стр. 4.11.1 Тесты при включении питания. Архивировано из оригинала 27 мая 2013 г. Получено 19 августа 2013 г.

Библиография

Внешние ссылки