Генераторы случайных чисел
Содержание
1.Введение
2. Источники случайных чисел
3. Детерминированные ГПСЧ
3.1. Регистр сдвига с обобщённой обратной связью
3.2. RANDU
3.3. Линейный конгруэнтный метод
3.4. Метод Фибоначчи с запаздываниями
4. ГПСЧ с источником энтропии или ГСЧ
4.1. Пример простейшего ГСЧ с источником энтропии
4.2. Примеры ГСЧ и источников энтропии
5. ГПСЧ в криптографии
5.1. Примеры крипто стойких ГПСЧ
5.1.1. Циклическое шифрование
5.1.2. ANSI X9.17
6. Аппаратные ГПСЧ
7. Литература
Введение
Все процессы в мире происходят
либо по воле случая, либо же по заранее
предусмотренному плану или закономерности.
Фактически в любой сфере нашей жизни
мы используем случайные числа. Подкидывая
монетку, играя в покер или лотерею, придумывая
числовой пароль, или же создавая игру,
вы используете случайные числа или специально
придуманный генератор случайных чисел.
Генератор случайных чисел (ГСЧ) – это
алгоритм, который генерирует практически
независимые друг от друга числа в последовательность.
Объединяет их разве что заданное распределение.
Работа ГСЧ зависит от заранее написанного
алгоритма. Исходя из этого, можно говорить
о псевдо случайности этих чисел. Поэтому
бытует выражение, что в нашем мире ничто
не случайно, каким бы случайным оно не
казалось.
Согласно всем научным статьям, генератор
случайных чисел имеет более правильное
название – генератор псевдослучайных
чисел. Просто для удобства использование
слова "псевдо" опускается.
Фактически все алгоритмы ГСЧ сильно зависят
от языка программирования и вычислительной
платформы.
Принцип работы всех видов генераторов
достаточно простой – применяется внутренняя
функция, которая выбирает случайные значения
в пределах установленного диапазона.
Но есть ещё одна сфера деятельности, где
используются такие алгоритмы – криптография.
Для создания абсолютно новых и недоступных
паролей и ещё целого множества функций
генераторы случайных чисел предназначены
как нельзя кстати.
Генератор псевдослучайных
чисел (ГПСЧ, англ. Pseudorando
Современная информатика широко использует псевдослучайные числа в самых разных приложениях — от метода Монте-Карло и имитационного моделирования до криптографии. При этом от качества используемых ГПСЧ напрямую зависит качество получаемых результатов. Это обстоятельство подчёркивает известный афоризм Роберта Р. Кавью из ORNL: «генерация случайных чисел слишком важна, чтобы оставлять её на волю случая».
Источники случайных чисел
Источники настоящих случайных
чисел найти трудно. Физические шумы, такие как детекторы событий
ионизирующей радиации, дробово
Криптографические приложения используют для генерации случайных чисел особенные алгоритмы. Эти алгоритмы заранее определены и, следовательно, генерируют последовательность чисел, которая теоретически не может быть статистически случайной. В то же время, если выбрать хороший алгоритм, полученная численная последовательность будет проходить большинство тестов на случайность. Такие числа называют псевдослучайными числами.
Альтернативным решением
является создание набора из большого
количества случайных чисел и
опубликование его в некотором
Генератор псевдослучайных
чисел включён в состав многих
современных процессоров (напр.
Детерминированные ГПСЧ
Никакой детерминированный алгоритм не может генерировать полностью
случайные числа, он может только аппроксимировать некото
Любой ГПСЧ с ограниченными ресурсами рано или поздно зацикливается — начинает повторять одну и ту же последовательность чисел. Длина циклов ГПСЧ зависит от самого генератора и составляет около 2n/2, где n — размер внутреннего состояния в битах, хотя линейные конгруэнтные и LFSR-генераторы обладают максимальными циклами порядка 2n. Если порождаемая последовательность ГПСЧ сходится к слишком коротким циклам, то такой ГПСЧ становится предсказуемым и непригодным для практических приложений.
Большинство простых арифметических генераторов хотя и обладают большой скоростью, но страдают от многих серьёзных недостатков:
- Слишком короткий период/периоды.
- Последовательные значения не являются независимыми.
- Некоторые биты «менее случайны», чем другие.
- Неравномерное одномерное распределение.
- Обратимость.
В частности, алгоритм RANDU, десятилетиями использовавшийся на мейнфреймах, оказался очень плохим, что вызвало сомнения в достоверности результатов многих исследований, использовавших этот алгоритм.
Наиболее распространены линейн
Из современных ГПСЧ широкое распространение также получил «вихрь Мерсенна», предложенный в 1997 году Мацумото и Нисимурой. Его достоинствами являются колоссальный период (219937−1), равномерное распределение в 623 измерениях (линейный конгруэнтный метод даёт более или менее равномерное распределение максимум в 5 измерениях), быстрая генерация случайных чисел (в 2-3 раза быстрее, чем стандартные ГПСЧ, использующие линейный конгруэнтный метод). Однако, существуют алгоритмы, распознающие последовательность, порождаемую вихрем Мерсенна, как неслучайную.
Регистр сдвига с обобщённой обратной связью
Регистр сдвига с обобщённой обратной связью (англ. Generalized feedback shift register (GFSR)) - вариант генератора псевдослучайных чисел (ГПСЧ) Таусворта, предложенный Льюисом и Пейном в 1973 году.
Идея алгоритма GFSR состоит в том, что основная последовательность ре
Каждый столбец
,
где - XOR, или аналог сложения по модулю 2, а , каждое слово также должно подчиняться рекурсии
.
Содержание
|
Алгоритм GFSR
- Если , переходите к пункту 2 ( изначально ноль).
- Изначально используют задержанную базовую последовательность , для получения каждого столбца .
- .
- Если , установить .
- .
- Если , установить .
- EXCLUSIVE-OR, ,
- Запомнить, .
Пример
Выберем примитивный трехчлен . Базовая последовательность . Для этого конкретного многочлена второй столбец формируется путем задержки первого столбца на 25 ( , в зависимости от ориентации "круга" бит) битовых позиций, третий столбец получается путем задержки второго столбца на другие - 6 битовых позиций, и так далее, пока все пять столбцов не будут заполнены.
Каждое , появляется только один раз в течение всего периода из числа.
Сопровождающая матрица для пол
Составим матрицу, столбцами которой являются слова , обозначим её и перемножим на матрицу :
Мы получили матрицу, столбцами которой являются слова . В матричном виде . После применения этой матрицы .
Среднее значение, дисперсия и корреляция
Теоретическое среднее значение и дисперсия алгоритма гарантируются его периодичностью.
В общем случае:
, где
Для L-битной машины:
.
На нормализованном (0, 1) интервале: .
Дисперсия:
,
и на нормализованном интервале (0, 1): .
Корреляция получается усреднением по всему периоду:
.
Плюсы и минусы
Так как многие программные среды содержат битовые операции, такие как XOR по умолчанию, то алгоритм РСсООС является достаточно быстрым. Также он прост в реализации, этот алгоритм можно реализовать при помощи только лишь стандартных функций Excel. Также по сравнению с линейным конгруэнтным методом, РСсООС генерирует последовательности псевдослучайных чисел с большим периодом.
Минусом алгоритма является то, что во многих областях требуется значительно больший период генерируемой последовательности, чем может дать алгоритм РСсООС.
Вихрь Мерсенна (англ. Mersenne twister, MT) — генератор псевдослучайных чисел (ГПСЧ), разработанный в 1997 году японскими учёными Макото Мацумото (яп. 松本 眞) и Такудзи Нисимура (яп. 西村 拓士). Вихрь Мерсенна основывается на свойствах простых чисел Мерсенна (отсюда название) и обеспечивает быструю генерацию высококачественных псевдослучайных чисел. Вихрь Мерсенна лишен многих недостатков, присущих другим ГПСЧ, таких как малый период, предсказуемость, легко выявляемая статистическая зависимость. Тем не менее этот генератор не является крипто стойким, что ограничивает его использование в криптографии.
RANDU
Распределение в трёхмерном пространстве 100 000 точек, полученных алгоритмом RANDU. Можно видеть, что точки расположены на 15 плоскостях.
RANDU — печально известный линейный конгруэнтный генератор псевдослучайных чисел, вошедший в употребление в 1960-х. Он определяется рекуррентным соотношением:
где нечётное.
Псевдослучайные числа вычисляются следующим образом:
Популярно мнение, что данный алгоритм — один из наименее продуманных генераторов псевдослучайных чисел среди когда-либо предложенных. Так, он не проходит спектральный тест при количестве измерений, превышающем 2.
Основанием для выбора параметров генератора послужило то, что в рамках целочисленной 32-битной машинной арифметики операции по модулю , в частности, умножение произвольного числа на , выполняются эффективно. В то же время, такой выбор обладает и принципиальным недостатком. Рассмотрим следующее выражение (будем полагать, что все операции выполняются по модулю ):
откуда, раскрыв квадратичный сомножитель, получаем:
что, в свою очередь, показывает наличие линейной зависимости (а следовательно, и полной корреляции) между тремя соседними элементами последовательности:
Как следствие корреляции, точки в трёхмерном пространстве, координаты которых получены по данному алгоритму, располагаются на сравнительно небольшом количестве плоскостей (в приведённом примере — на 15 плоскостях).
Пример
Пример псевдослучайной
1
65539
393225
1769499
7077969
26542323
95552217
334432395
1146624417
1722371299
14608041
...
134633675
1893599841
1559961379
907304297
2141591611
388843697
238606867
79531577
477211307
1
Линейный конгруэнтный метод
Линейный конгруэнтный метод — один из алгоритмов генерации псевдослучайных чисел. Применяется в простых случаях и не обладает криптографической стойкостью. Входит в стандартные библиотеки различных компиляторов.
Содержание
|
Описание
Линейный конгруэнтный метод заключается в вычислении членов линейной рекуррентной последовательности по модулю некоторого натурального числа m, задаваемой следующей формулой:
где a и c — некоторые целочисленные коэффициенты. Получаемая последовательность зависит от выбора стартового числа и при разных его значениях получаются различные последовательности случайных чисел. В то же время, многие свойства этой последовательности определяются выбором коэффициентов в формуле и не зависят от выбора стартового числа.
Свойства
Последовательность чисел, порождаемая линейным конгруэнтным методом, периодична с периодом, не превышающим m. При этом длина периода в точности равна m тогда и только тогда, когда:
- НОД(c,m) = 1 (то есть, c и m взаимно просты);
- a-1 кратно p для всех простых делителей p числа
m; - a-1 кратно 4, если m кратно 4.
Статистические свойства получаемой последовательности случайных чисел полностью определяются выбором коэффициентов a и c. Для этих констант выписаны[кем?] условия, гарантирующие удовлетворительное качество получаемых случайных чисел.
Часто используемые параметры
При реализации выгодно выбирать , где e — число битов в машинном слове, поскольку это позволяет избавиться от относительно медленной операции приведения по модулю.
Младшие двоичные разряды сгенерированных таким образом случайных чисел демонстрируют поведение, далёкое от случайного, поэтому рекомендуется использовать только старшие разряды. Кроме того, при использовании этого генератора для выбора точек в d-мерном пространстве, точки ложатся не более, чем на гиперплоскостей, что ограничивает применение генератора в методе Монте-Карло.
В таблице ниже приведены
наиболее часто используемые параметры
линейных конгруэнтных генераторов, в
частности, в стандартных библиотеках
различных компиляторов (
Source |
m |
a |
c |
выдаваемые биты результата в rand() / Random(L) |
Numerical Recipes (англ.) |
232 |
1664525 |
1013904223 |
|
MMIX Д. Кнута |
264 |
6364136223846793005 |
1442695040888963407 |
|
Borland C/C++ |
232 |
22695477 |
1 |
биты 30..16 в rand(), 30..0 в lrand() |
GNU Compiler Collection |
232 |
69069 |
5 |
биты 30..16 |
ANSI C: Open Watcom, Digital Mars, Metrowerks, IBM VisualAge C/C++ |
232 |
1103515245 |
12345 |
биты 30..16 |
Borland Delphi, Virtual Pascal |
232 |
134775813 |
1 |
биты 63..32 числа (seed * L) |
Microsoft Visual/Quick C/C++ |
232 |
214013 |
2531011 |
биты 30..16 |
Apple CarbonLib |
231 - 1 |
16807 |
0 |
см. Метод Лемера (англ.) |
Крипто анализ
Особенностью линейного
конгруэнтного метода является то,
что если сомножитель и модуль
соответствующим образом
Если крипто аналитик знает об использовании линейного конгруэнтного метода с известными параметрами, то известной становится вся последовательность чисел. В то же время, даже если крипто аналитик знает только лишь об использовании линейного конгруэнтного метода, то информация о небольшой части последовательности достаточна для выявления параметров метода и всех последующих элементов последовательности. В частности, если крипто аналитику известны значения , то они удовлетворяют системе уравнений:
из которой можно получить значения параметров а, с и m.
Поэтому, хотя линейный конгруэнтный
метод порождает статистически
хорошую псевдослучайную
Метод Фибоначчи с запаздываниями
Метод Фибоначчи с запаздываниями (
Особенности распределения случайных чисел, генерируемых линейным конгруэнтным алгоритмом, делают невозможным их использование в статистических алгоритмах, требующих высокого разрешения.
В связи с этим линейный конгруэнтный
алгоритм постепенно потерял свою популярность
и его место заняло семейство фибоначчиевых алгори
Наибольшую популярность фибоначчиевы датчики получили в связи с тем, что скорость выполнения арифметических операций с вещественными числами сравнялась со скоростью целочисленной арифметики, а фибоначчиевы датчики естественно реализуются в вещественной арифметике. Впрочем, ничего не мешает вместо вещественных чисел из диапазона брать 32-битное целое число.
Формулы
Один из широко распространённых фибоначчиевых датчиков основан на следующей итеративной формуле:
где — вещественные числа из диапазона , — целые положительные числа, называемые лагами. При реализации через целые числа достаточно формулы (при этом будут происходить арифметические переполнения). Для работы фибоначчиеву датчику требуется знать предыдущих сгенерированных случайных чисел. При программной реализации для хранения сгенерированных случайных чисел используется конечная циклическая очередь на базе массива. Для старта фибоначчиевому датчику требуется случайных чисел, которые могут быть сгенерированы простым конгруэнтным датчиком.
Получаемые случайные числа обладают хорошими статистическими свойствами, причём все биты случайного числа равнозначны по статистическим свойствам. Период фибоначчиева датчика может быть оценен по следующей формуле:
,
где — число битов в мантиссе вещественного числа.
Выбор параметров
Лаги a и b — «магические» и их не следует выбирать произвольно. Рекомендуются следующие значения лагов: , или . Качество получаемых случайных чисел зависит от значения константы, a чем оно больше, тем выше размерность пространства, в котором сохраняется равномерность случайных векторов, образованных из полученных случайных чисел. В то же время, с увеличением величины константы a увеличивается объём используемой алгоритмом памяти.
Значения можно рекомендовать для простых приложений, не использующих векторы высокой размерности со случайными компонентами. Значения позволяют получать числа, удовлетворительные для большинства алгоритмов, требовательных к качеству случайных чисел. Значения позволяют получать очень качественные случайные числа и используются в алгоритмах, работающих со случайными векторами высокой размерности. Описанный фибоначчиев датчик случайных чисел (с лагами 20 и 5) используется в широко известной системе Matlab (автором первой версии этой системы был Д. Каханер).
ГПСЧ с источником энтропии или ГСЧ
Наравне с существующей необходимостью генерировать легко воспроизводимые последовательности случайных чисел, также существует необходимость генерировать совершенно непредсказуемые или попросту абсолютно случайные числа. Такие генераторы называются генераторами случайных чисел (ГСЧ — англ. random number generator, RNG). Так как такие генераторы чаще всего применяются для генерации уникальных симметричных и асимметричных ключей для шифрования, они чаще всего строятся из комбинации крипто стойкого ГПСЧ и внешнего источника энтропии (и именно такую комбинацию теперь и принято понимать под ГСЧ).
Почти все крупные производители
микрочипов поставляют аппаратные ГСЧ
с различными источниками энтропии,
используя различные методы для
их очистки от неизбежной предсказуемости.
Однако на данный момент скорость сбора
случайных чисел всеми
В современных исследованиях
осуществляются попытки использования
измерения физических свойств объектов
(например, температуры) или даже квантовых флуктуаций ваку
В персональных компьютерах
авторы программных ГСЧ используют
гораздо более быстрые
Пример простейшего ГСЧ с источником энтропии
Если в качестве источника энтропии использовать текущее время, то для получения натурального числа от 0 до N достаточно вычислить остаток от деления текущего времени в миллисекундах на число N+1. Недостатком этого ГСЧ является то, что в течение одной миллисекунды он выдает одно и то же число.
Примеры ГСЧ и источников энтропии
Источник энтропии |
ГПСЧ |
Достоинства |
Недостатки | |
/dev/random вUNIX/ Linux |
Счётчик тактов процессора, однако собирается только во время аппаратных прерываний |
LFSR, с хешированием выхода через SHA-1 |
Есть во всех Unix, надёжный источник энтропии |
Очень долго «нагревается», может надолго «застревать», либо работает как ГПСЧ (/dev/urandom) |
Yarrow отБрюса Шнайера[4] |
Традиционные методы |
AES-256 и SHA-1 маленького внутреннего состояния |
Гибкий крипто стойкий дизайн |
Медленный |
MicrosoftCryptoAPI |
Текущее время, размер жёсткого диска, размер свободной памяти, номер процесса и NETBIOS-имя компьютера |
MD5-хеш внутреннего состояния размером в 128 бит |
Встроен в Windows, не «застревает» |
Сильно зависит от используемого криптопровайдера (CSP). |
JavaSecureRandom |
Взаимодействие между потоками |
SHA-1-хеш внутреннего состояния (1024 бит) |
Большое внутреннее состояние |
Медленный сбор энтропии |
Chaos от Ruptor |
Счётчик тактов процессора, собирается непрерывно |
Хеширование 4096-битового внутреннего состояния на основе нелинейного варианта Marsaglia-генератора |
Пока самый быстрый из всех, большое внутреннее состояние, не «застревает» |
Оригинальная разработка, свойства приведены только по утверждению автора |
RRAND от Ruptor[6] |
Счётчик тактов процессора |
Зашифровывание внутреннего состояния поточным шифром EnRUPT в authenticated encryption режиме (aeRUPT) |
Очень быстр, внутреннее состояние произвольного размера по выбору, не «застревает» |
Оригинальная разработка, свойства приведены только по утверждению автора. Шифр EnRUPT не является криптостойким. |
ГПСЧ в криптографии
Основная статья: Криптографиче
Разновидностью ГПСЧ являются
ГПСБ (PRBG) — генераторы псевдо-случайных
бит, а также различных поточных шифров. ГПСЧ, как и поточные шифры,
состоят из внутреннего состояния (обычно
размером от 16 бит до нескольких мегабайт),
функции инициализации внутреннего состояния ключом или зерном (а
Хотя многие крипто стойкие ГПСЧ или поточные шифры предлагают гораздо более «случайные» числа, такие генераторы гораздо медленнее обычных арифметических и могут быть непригодны во всякого рода исследованиях, требующих, чтобы процессор был свободен для более полезных вычислений.
В военных целях и в
полевых условиях применяются только
засекреченные синхронные крипто стойкие
ГПСЧ (поточные шифры), блочные шифры не используются. Примерами
известных крипто стойких ГПСЧ являются RC4, ISAAC, SEAL, Sno
Примеры крипто стойких ГПСЧ
Циклическое шифрование
В данном случае используется способ генерации ключа сессии из мастер-ключа. Счетчик с периодом N используется в качестве входа в шифрующее устройство. Например, в случае использования 56-битного ключа DES может использоваться счетчик с периодом 256. После каждого созданного ключа значение счетчика повышается на 1. Таким образом, псевдослучайная последовательность, полученная по данной схеме, имеет полный период: каждое выходное значение Х0, Х1,…XN-1 основано на разных значениях счетчика, поэтому Х0 ≠ X1 ≠ XN-1. Так как мастер-ключ является секретным, легко показать, что любой секретный ключ не зависит от знания одного или более предыдущих секретных ключей.
ANSI X9.17
ГПСЧ из стандарта ANSI X9.17 используется во многих приложениях финансовой безопасности и PGP. В основе этого ГПСЧ лежит тройной DES. Генератор ANSI X9.17 состоит из следующих частей:
- Вход: генератором управляют два псевдослучайных входа. Один является 64-битным представлением текущих даты и времени, которые меняются каждый раз при создании числа. Другой является 64-битным исходным значением. Оно инициализируется некоторым произвольным значением и изменяется в ходе генерации последовательности псевдослучайных чисел.
- Ключи: генератор использует три модуля тройного DES. Все три используют одну и ту же пару 56-битных ключей, которая держится в секрете и применяется только при генерации псевдослучайного числа.
- Выход: выход состоит из 64-битного псевдослучайного числа и 64-битного значения, которое будет использоваться в качестве начального значения при создании следующего числа.
- DTi — значение даты и времени на начало i-ой стадии генерации.
- Vi — начальное значение для i-ой стадии генерации.
- Ri — псевдослучайное число, созданное на i-ой стадии генерации.
- K1, K2 — ключи, используемые на каждой стадии.

- Генераторы электрических сигналов
- Генерация и оценка идей в отрасли
- Генерация и построение изображений ландшафта в реальном времени
- Генетика и наследственные заболевания пушных зверей
- Генетика и селекция
- Генетика и селекция рыб
- Генетика и современная эволюционная теория
- Генератор синусоидальных колебаний
- Генератор тактовых импульсов
- Генератор телевизионных сигналов на базе МПС
- Генератор формування електричних сигналів
- Генератор шума как средство защиты от несанкционированного съема информации («прослушки»)
- Генераторы импульсных сигналов
- Генераторы сигналов