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

редактировать

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

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

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

Содержание

  • 1 Возможные проблемы с детерминированными генераторами
  • 2 Генераторы, основанные на линейных повторениях
  • 3 Криптографически безопасные генераторы псевдослучайных чисел
  • 4 Критерии оценки BSI
  • 5 Математическое определение
  • 6 Ранние подходы
  • 7 Неоднородные генераторы
  • 8 См. Также
  • 9 Ссылки
  • 10 Библиография
  • 11 Внешние ссылки

Возможные проблемы с детерминированными генераторами

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

  • более короткие, чем ожидалось, периоды для некоторых начальных состояний (такие начальные состояния можно назвать «слабыми» в этом контексте);
  • Отсутствие однородности распределения для большого количества сгенерированных чисел;
  • Корреляция последовательных значений;
  • Плохое размерное распределение выходной последовательности;
  • Расстояния между местами, где встречаются определенные значения, распределены иначе, чем в распределении случайной последовательности.

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

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

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

В качестве иллюстрации рассмотрим широко используемый язык программирования Java. По состоянию на 2017 год Java по-прежнему полагается на линейный конгруэнтный генератор (LCG) для ГПСЧ низкого качества - см. Ниже.

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

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

Во второй половине 20-го века стандартный класс алгоритмов, используемых для ГПСЧ, включал линейный конгруэнтные генераторы. Было известно, что качество LCG неудовлетворительное, но более эффективных методов не было. Press et al. (2007) так описали результат: «Если все научные статьи, результаты которых вызывают сомнения из-за [LCG и связанных с ними], исчезнут с полок библиотеки, то на каждой полке останется пробел размером с ваш кулак».

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

Изобретение в 1997 году Mersenne Twister, в частности, позволило избежать многих проблем с более ранними генераторами. Mersenne Twister имеет период 2-1 итераций (≈4,3 × 10), доказано, что он равнораспределен в (до) 623 измерениях (для 32-битных значений), и на момент его внедрение происходило быстрее, чем другие статистически обоснованные генераторы.

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

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

Криптографически безопасные генераторы псевдослучайных чисел

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

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

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

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

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

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

  • K1 - Должна быть высокая вероятность того, что сгенерированные последовательности случайных чисел будут отличаться друг от друга.
  • K2 - Последовательность чисел неотличима от "действительно случайных" чисел согласно указанные статистические тесты. Тесты включают в себя тест (равное количество единиц и нулей в последовательности), тест в покер (специальный экземпляр теста хи-квадрат ), тест запусков (подсчитывает частоту запусков различной длины), тест longruns (проверяет, существует ли какая-либо серия длиной 34 или больше в 20 000 битах последовательности) - как из BSI, так и NIST, так и тест автокорреляции. По сути, эти требования являются проверкой того, насколько хороша битовая последовательность: одинаково часто встречаются нули и единицы; после последовательности из n нулей (или единиц) следующий бит равен единице (или нулю) с вероятностью половинной; и любая выбранная подпоследовательность не содержит информации о следующем элементе (ах) в последовательности.
  • K3 - Для злоумышленника должно быть невозможно (для всех практических целей) вычислить или иным образом предположить, исходя из любой данной подпоследовательности, любые предыдущие или будущие значения в последовательности, ни какое-либо внутреннее состояние генератора.
  • K4 - Для всех практических целей злоумышленнику должно быть невозможно вычислить или угадать внутреннее состояние генератор, любые предыдущие числа в последовательности или любые предыдущие состояния внутреннего генератора.

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

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

Дано

  • P {\ displaystyle P}P - распределение вероятностей на (R, B) {\ displaystyle \ left (\ mathbb {R}, {\ mathfrak {B}} \ right)}\ left (\ mathbb {R}, {\ mathfrak {B}} \ right) (где B {\ displaystyle {\ mathfrak {B}}}{\ mathfrak { B}} стандартное Множество Бореля на действительной прямой)
  • F {\ displaystyle {\ mathfrak {F}}}{\ mathfrak {F}} - непустая коллекция наборов Бореля F ⊆ B {\ displaystyle {\ mathfrak {F}} \ substeq {\ mathfrak {B}}}{\ mathfrak {F}} \ substeq {\ mathfrak {B}} , например F = {(- ∞, t]: t ∈ R} {\ displaystyle {\ mathfrak {F}} = \ left \ {\ left (- \ infty, t \ right]: t \ in \ mathbb { R} \ right \}}{\ mathfrak {F}} = \ le ft \ {\ left (- \ infty, t \ right]: t \ in \ mathbb {R} \ right \} . Если F {\ displaystyle {\ mathfrak {F}}}{\ mathfrak {F}} не указан, это может быть либо B {\ displaystyle {\ mathfrak {B}}}{\ mathfrak { B}} или {(- ∞, t]: t ∈ R} {\ displaystyle \ left \ {\ left (- \ infty, t \ right]: t \ in \ mathbb {R} \ right \}}\ left \ {\ left (- \ infty, t \ right]: t \ in \ mathbb {R} \ right \} , в зависимости от контекста.
  • A ⊆ R {\ displaystyle A \ substeq \ mathbb {R}}A \ substeq \ mathbb {R} - a непустой набор (не обязательно набор Бореля). Часто A {\ displaystyle A}Aпредставляет собой набор между P {\ displaystyle P}P 's поддержка и его внутренняя часть ; например, если P {\ displaystyle P}P является равномерным распределением на интервале (0, 1] {\ displaystyle \ left (0,1 \ right]}\ left (0,1 \ right] , A {\ displaystyle A}Aможет быть (0, 1] {\ displaystyle \ left (0,1 \ right] }\ left (0,1 \ right] . Если A {\ displaystyle A}Aне указан, предполагается, что это некоторый набор, содержащийся в поддержка P {\ displaystyle P}P и содержащая его внутреннюю часть, в зависимости от контекста.

Мы вызываем функцию f: N 1 → R {\ displaystyle f: \ mathbb {N} _ {1} \ rightarrow \ mathbb {R}}f: \ mathbb {N} _ {1} \ rightarrow \ mathbb {R} (где N 1 = {1, 2, 3,…} {\ displaystyle \ mathbb {N} _ {1} = \ left \ {1,2,3, \ dots \ right \}}\ mathbb {N} _ {1} = \ left \ {1,2,3, \ dots \ right \} - набор положительных целых чисел) генератор псевдослучайных чисел для P {\ displaystyle P}P задано F {\ displaystyle {\ mathfrak {F}}}{\ mathfrak {F}} , принимая значения из A {\ displaystyle A}Aтогда и только тогда, когда

  • е (N 1) ⊆ A {\ displaystyle f \ left (\ mathbb {N} _ {1} \ right) \ substeq A}f \ left (\ mathbb {N} _ {1} \ right) \ substeq A
  • ∀ E ∈ F ∀ 0 < ε ∈ R ∃ N ∈ N 1 ∀ N ≤ n ∈ N 1, | # { i ∈ { 1, 2, …, n } : f ( i) ∈ E } n − P ( E) | < ε {\displaystyle \forall E\in {\mathfrak {F}}\quad \forall 0<\varepsilon \in \mathbb {R} \quad \exists N\in \mathbb {N} _{1}\quad \forall N\leq n\in \mathbb {N} _{1},\quad \left|{\frac {\#\left\{i\in \left\{1,2,\dots,n\right\}:f(i)\in E\right\}}{n}}-P(E)\right|<\varepsilon }\ forall E \ in {\ mathfrak {F}} \ quad \ forall 0 <\ varepsilon \ in \ mathbb {R} \ quad \ exists N \ in \ mathbb {N} _ {1} \ quad \ forall N \ leq n \ in \ mathbb {N} _ {1}, \ quad \ left | {\ frac {\ # \ left \ {i \ in \ left \ {1,2, \ dots, n \ right \}: f (i) \ in E \ right \}} {n}} - P (E) \ right | <\ varepsilon

(# S {\ displaystyle \ #S }\ #S обозначает количество элементов в конечном наборе S {\ displaystyle S}S .)

Можно показать, что если f { \ displaystyle f}f - генератор псевдослучайных чисел для равномерного распределения на (0, 1) {\ displaystyle \ left (0,1 \ right)}\ left (0,1 \ right) и если F {\ displaystyle F}F равно CDF некоторого заданного распределения вероятностей P {\ displaystyle P}P , затем F ∗ ∘ f {\ displaystyle F ^ {*} \ circ f}F ^ {*} \ circ f - генератор псевдослучайных чисел для P {\ displaystyle P}P , где F ∗: (0, 1) → R {\ displaystyle F ^ {* }: \ left (0,1 \ right) \ rightarrow \ mathbb {R}}F ^ {*}: \ left (0, 1 \ right) \ rightarrow \ mathbb {R} - это процентиль P {\ displaystyle P}P , т.е. F * (Х): знак равно inf {t ∈ R: x ≤ F (t)} {\ displaystyle F ^ {*} (x): = \ inf \ left \ {t \ in \ mathbb {R}: x \ leq F (t) \ right \}}F ^ {*} (x) : = \ inf \ left \ {t \ in \ mathbb {R}: x \ leq F (t) \ right \} . Интуитивно можно смоделировать произвольное распределение на основе моделирования стандартного равномерного распределения.

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

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

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

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

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

Недавнее нововведение - объединить средний квадрат с последовательностью Вейля. Этот метод обеспечивает высококачественный результат в течение длительного периода (см. Последовательность Вейля в среднем квадрате ГПСЧ ).

Неоднородные генераторы

Числа, выбранные из неравномерного распределения вероятностей, могут быть сгенерированы с использованием равномерного распределения ГПСЧ и функции, которая связывает два распределения.

Во-первых, нужна кумулятивная функция распределения F (b) {\ displaystyle F (b)}F (b) целевого распределения f ( б) {\ displaystyle f (b)}f (b) :

F (b) = ∫ - ∞ bf (b ′) db ′ {\ displaystyle F (b) = \ int _ {- \ infty} ^ {b} f ( b ') db'}F(b)=\int _{-\infty }^{b}f(b')db'

Обратите внимание, что 0 = F (- ∞) ≤ F (b) ≤ F (∞) = 1 {\ displaystyle 0 = F (- \ infty) \ leq F (b) \ leq F (\ infty) = 1}0 = F (- \ infty) \ leq F (b) \ leq F (\ infty) = 1 . Используя случайное число c из равномерного распределения в качестве плотности вероятности «пройти мимо», мы получаем

F (b) = c {\ displaystyle F (b) = c}F (b) = c

, так что

b = F - 1 (c) {\ displaystyle b = F ^ {- 1} (c)}b = F ^ {- 1} (c)

- число, случайно выбранное из распределения f (b) {\ displaystyle f (b)}f (b) .

Для Например, обратное кумулятивному распределению Гаусса erf - 1 ⁡ (x) {\ displaystyle \ operatorname {erf} ^ {- 1} (x)}\ operatorname {erf} ^ {- 1} (x) с идеальным унифицированный ГПСЧ с диапазоном (0, 1) в качестве входных данных x {\ displaystyle x}x произведет последовательность (только положительных) значений с распределением Гаусса; однако

  • при использовании практических представлений чисел бесконечные "хвосты" распределения должны быть усечены до конечных значений.
  • Повторный пересчет erf - 1 ⁡ (x) {\ displaystyle \ operatorname {erf} ^ {- 1} (x)}\ operatorname {erf} ^ {- 1} (x) следует уменьшить с помощью таких средств, как алгоритм зиккурата для более быстрой генерации.

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

См. также

  • icon Математический портал

Ссылки

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

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

Последняя правка сделана 2021-06-02 09:33:33
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте