Меню

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



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

Введение

Генераторы случайных чисел — ключевая часть веб-безопасности. Небольшой список применений:

  • Генераторы сессий (PHPSESSID)
  • Генерация текста для капчи
  • Шифрование
  • Генерация соли для хранения паролей в необратимом виде
  • Генератор паролей
  • Порядок раздачи карт в интернет казино

Как отличить случайную последовательность чисел от неслучайной?

Пусть есть последовательность чисел: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 . Является ли она случайной? Есть строгое определение для случайной величины. Случайная величина — это величина, которая принимает в результате опыта одно из множества значений, причём появление того или иного значения этой величины до её измерения нельзя точно предсказать. Но оно не помогает ответить на наш вопрос, так как нам не хватает информации для ответа. Теперь скажем, что данные числа получились набором одной из верхних строк клавиатуры. «Конечно не случайная» — воскликните Вы и тут же назовете следующие число и будете абсолютно правы. Последовательность будет случайной только если между символами, нету зависимости. Например, если бы данные символы появились в результате вытягивания бочонков в лото, то последовательность была бы случайной.

Чуть более сложный пример или число Пи


Последовательность цифры в числе Пи считается случайной. Пусть генератор основывается на выводе бит представления числа Пи, начиная с какой-то неизвестной точки. Такой генератор, возможно и пройдет «тест на следующий бит», так как ПИ, видимо, является случайной последовательностью. Однако этот подход не является критографически надежным — если криптоаналитик определит, какой бит числа Пи используется в данный момент, он сможет вычислить и все предшествующие и последующие биты.
Данный пример накладывает ещё одно ограничение на генераторы случайных чисел. Криптоаналитик не должен иметь возможности предсказать работу генератора случайных чисел.

Отличие генератора псевдослучайных чисел (ГПСЧ) от генератора случайных чисел (ГСЧ)

Источники энтропии используются для накопления энтропии с последующим получением из неё начального значения (initial value, seed), необходимого генераторам случайных чисел (ГСЧ) для формирования случайных чисел. ГПСЧ использует единственное начальное значение, откуда и следует его псевдослучайность, а ГСЧ всегда формирует случайное число, имея в начале высококачественную случайную величину, предоставленную различными источниками энтропии.
Энтропия – это мера беспорядка. Информационная энтропия — мера неопределённости или непредсказуемости информации.
Можно сказать, что ГСЧ = ГПСЧ + источник энтропии.

Уязвимости ГПСЧ

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

Линейный конгруэнтный ГПСЧ (LCPRNG)

Распространённый метод для генерации псевдослучайных чисел, не обладающий криптографической стойкостью. Линейный конгруэнтный метод заключается в вычислении членов линейной рекуррентной последовательности по модулю некоторого натурального числа m, задаваемой следующей формулой:

где a (multiplier), c (addend), m (mask) — некоторые целочисленные коэффициенты. Получаемая последовательность зависит от выбора стартового числа (seed) X0 и при разных его значениях получаются различные последовательности случайных чисел.

Для выбора коэффициентов имеются свойства позволяющие максимизировать длину периода(максимальная длина равна m), то есть момент, с которого генератор зациклится [1].

Пусть генератор выдал несколько случайных чисел X0, X1, X2, X3. Получается система уравнений

Решив эту систему, можно определить коэффициенты a, c, m. Как утверждает википедия [8], эта система имеет решение, но решить самостоятельно или найти решение не получилось. Буду очень признателен за любую помощь в этом направлении.

Предсказание результатов линейно-конгруэнтного метода

Основным алгоритмом предсказания чисел для линейно-конгруэнтного метода является Plumstead’s — алгоритм, реализацию, которого можно найти здесь [4](есть онлайн запуск) и здесь [5]. Описание алгоритма можно найти в [9].
Простая реализация конгруэнтного метода на Java.

Отправив 20 чисел на сайт [4], можно с большой вероятностью получить следующие. Чем больше чисел, тем больше вероятность.

Взлом встроенного генератора случайных чисел в Java

Многие языки программирования, например C(rand), C++(rand) и Java используют LСPRNG. Рассмотрим, как можно провести взлом на примере java.utils.Random. Зайдя в исходный код (jdk1.7) данного класса можно увидеть используемые константы

Метод java.utils.Randon.nextInt() выглядит следующим образом (здесь bits == 32)

Результатом является nextseed сдвинутый вправо на 48-32=16 бит. Данный метод называется truncated-bits, особенно неприятен при black-box, приходится добавлять ещё один цикл в brute-force. Взлом будет происходить методом грубой силы(brute-force).

Пусть мы знаем два подряд сгенерированных числа x1 и x2. Тогда необходимо перебрать 2^16 = 65536 вариантов oldseed и применять к x1 формулу:

до тех пор, пока она не станет равной x2. Код для brute-force может выглядеть так

Вывод данной программы будет примерно таким:

Несложно понять, что мы нашли не самый первый seed, а seed, используемый при генерации второго числа. Для нахождения первоначального seed необходимо провести несколько операций, которые Java использовала для преобразования seed, в обратном порядке.

И теперь в исходном коде заменим
crackingSeed.set(seed);
на
crackingSeed.set(getPreviousSeed(seed));

И всё, мы успешно взломали ГПСЧ в Java.

Взлом ГПСЧ Mersenne twister в PHP

Рассмотрим ещё один не криптостойкий алгоритм генерации псевдослучайных чисел Mersenne Twister. Основные преимущества алгоритма — это скорость генерации и огромный период 2^19937 − 1, На этот раз будем анализировать реализацию алгоритма mt_srand() и mt_rand() в исходном коде php версии 5.4.6.

Можно заметить, что php_mt_reload вызывается при инициализации и после вызова php_mt_rand 624 раза. Начнем взлом с конца, обратим трансформации в конце функции php_mt_rand(). Рассмотрим (s1 ^ (s1 >> 18)). В бинарном представление операция выглядит так:

10110111010111100111111001110010 s1
00000000000000000010110111010111100111111001110010 s1 >> 18
10110111010111100101001110100101 s1 ^ (s1 >> 18)
Видно, что первые 18 бит (выделены жирным) остались без изменений.
Напишем две функции для инвертирования битового сдвига и xor

Тогда код для инвертирования последних строк функции php_mt_rand() будет выглядеть так

Если у нас есть 624 последовательных числа сгенерированных Mersenne Twister, то применив этот алгоритм для этих последовательных чисел, мы получим полное состояние Mersenne Twister, и сможем легко определить каждое последующее значение, запустив php_mt_reload для известного набора значений.

Область для взлома

Если вы думаете, что уже нечего ломать, то Вы глубоко заблуждаетесь. Одним из интересных направлений является генератор случайных чисел Adobe Flash(Action Script 3.0). Его особенностью является закрытость исходного кода и отсутствие задания seed’а. Основной интерес к нему, это использование во многих онлайн-казино и онлайн-покере.
Есть много последовательностей чисел, начиная от курса доллара и заканчивая количеством времени проведенным в пробке каждый день. И найти закономерность в таких данных очень не простая задача.

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

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

Треугольное распределение

Приведем пример генерации случайной величины с треугольным распределением [7] на языке C99.

В данном случае мы берем случайную величину rand() и задаем ей распределение, исходя из функции треугольного распределения. Для параметров a = -40, b = 100, c = 50 график 10000000 измерений будет выглядеть так

Экспоненциальное распределение

Пусть требуется получить датчик экспоненциально распределенных случайных величин. В этом случае F(x) = 1 – exp(-lambda * x). Тогда из решения уравнения y = 1 – exp(-lambda * x) получаем x = -log(1-y)/lambda.
Можно заметить, что выражение под знаком логарифма в последней формуле имеет равномерное распределение на отрезке [0,1), что позволяет получать другую, но так же распределённую последовательность по формуле: x = -log(y)/lambda, где y есть случайная величина(rand()).

Тесты ГПСЧ

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

Одним из известных тестов является тест на следующий бит — тест, служащий для проверки генераторов псевдослучайных чисел на криптостойкость. Тест гласит, что не должно существовать полиномиального алгоритма, который, зная первые k битов случайной последовательности, сможет предсказать k+1 бит с вероятностью большей ½.

В теории криптографии отдельной проблемой является определение того, насколько последовательность чисел или бит, сгенерированных генератором, является случайной. Как правило, для этой цели используются различные статистические тесты, такие как DIEHARD или NIST. Эндрю Яо в 1982 году доказал, что генератор, прошедший «тест на следующий бит», пройдет и любые другие статистические тесты на случайность, выполнимые за полиномиальное время.
В интернете [10] можно пройти тесты DIEHARD и множество других, чтобы определить критостойкость алгоритма.

Читайте также:  По горам две хмурых тучи метафоры эпитеты олицетворения сравнения

Источник

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

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

Нетрудно представить себе счетчик, который подсчитывает количество v флуктуаций напряжения шумящего прибора, превышающих заданный уровень за фиксированное время (рис. 2). Еще проще устроить счетчик, который выдавал бы число v (mod 2), т. е. 0 при четном v и 1 при нечетном v. Если вероятности появления 0 и 1 в таком процессе равны между собой, то можно считать, что устройство вырабатывает случайную последовательность двоичных цифр.

Если вероятность появления нуля отлична от половины , то можно ввести какую-нибудь схему стабилизации вероятности. Например, можно группировать цифры парами и выдавать 0 при получении пары 01 и 1 — при получении пары 10, а пары 00 и 11 просто опускать. Так как то в результате получим последовательность нулей и единиц с равными вероятностями.

Обычно датчики случайных чисел содержат генераторов описанного типа, работающих независимо, так что датчиком выдается приближенное случайное число записанное в форме -разрядной двоичной дроби. Для случайных чисел отведена специальная ячейка в накопителе, и скорость генерирования их столь велика, что на каждом такте работы ЭВМ в этой ячейке получается новое случайное число.

Применение датчиков случайных чисел свободно от тех недостатков, которые препятствуют широкому применению таблиц: не требуется места во внутреннем накопителе и запас чисел практически неограничен. Тем не менее подавляющее большинство задач, решенных методом Монте-Карло, сосчитано без применения датчиков. Ибо датчики имеют свои, новые недостатки. Во-первых, числа, выработанные датчиком, нельзя воспроизвести. Это затрудняет контроль расчетов и делает невозможным счет на таких ЭВМ, на которых двойной пересчет является правилом. Во-вторых, приходится содержать и эксплуатировать дополнительное устройство, которое требует ухода и регулярной проверки «качества» вырабатываемых чисел с помощью специальных тестов.

Основные области применения датчиков — системы автоматического регулирования и аналоговые вычислительные машины, а не методы Монте-Карло.

Источник

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

Генератор псевдослучайных чисел (ГПСЧ, англ. pseudorandom number generator , PRNG ) — алгоритм, порождающий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению (обычно равномерному).

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

Содержание

Источники случайных чисел

Источники настоящих случайных чисел найти крайне трудно. Физические шумы [1] , такие, как детекторы событий ионизирующей радиации, дробовой шум в резисторе или космическое излучение [2] , могут быть такими источниками. Однако применяются такие устройства в приложениях сетевой безопасности редко. Сложности также вызывают грубые атаки на подобные устройства.

У физических источников случайных чисел существует ряд недостатков:

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

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

Качественные требования, предъявляемые к ГПСЧ

  • Достаточно длинный период, гарантирующий отсутствие зацикливания последовательности в пределах решаемой задачи. Длина периода должна быть математически доказана;
  • Эффективность — быстрота работы алгоритма и малые затраты памяти;
  • Воспроизводимость — возможность заново воспроизвести ранее сгенерированную последовательность чисел любое количество раз;
  • Портируемость — одинаковое функционирование на различном оборудовании и операционных системах;
  • Быстрота получения X n + i <\displaystyle X_>элемента последовательности чисел, при задании X n <\displaystyle X_>элемента, для i <\displaystyle i>любой величины; это позволяет разделять последовательность на несколько потоков (последовательностей чисел). [3]

Ранние подходы к формированию ПСЧ

Джон фон Нейман считал неприемлемым использование физических генераторов случайных чисел в вычислительной технике, так как при возникновении необходимости проверки вычислений повтор предыдущих действий требовал бы воспроизведение случайного числа, в то время как генерация нового случайного числа недопустима. Предварительная запись и хранение сгенерированных случайных чисел предполагало бы возможность их считывания. Механизм считывания данных являлся одним из самых слабых звеньев вычислительных машин 1940-х годов. Джон фон Нейман привёл следующий метод «середины квадрата» (англ. middle-square method ) [4] получения десятизначных псевдослучайных чисел:

Десятизначное число возводится в квадрат, затем из середины квадрата числа берётся десятизначное число, которое снова возводится в квадрат, и так далее.

Например, для 4-значных чисел, начиная с 1234, получем 1234 2 = 1522756 <\displaystyle 1234^<2>=1522756> , где берём средние 4 цифры 01 5227 ¯ 56 <\displaystyle 01<\overline <5227>>56> (дописав ноль в начале, если это необходимо). Затем возводим полученное число в квадрат 5227 2 = 27 3215 ¯ 29 <\displaystyle 5227^<2>=27<\overline <3215>>29> , и так далее. Недостатком данного метода является ограниченность множества ПСЧ из-за того, что последовательность зацикливается — 5000 2 = 25 0000 ¯ 00 , 0 2 = 0 , … <\displaystyle 5000^<2>=25<\overline <0000>>00,0^<2>=0,\dots > .

В 1951 году Д. Г. Лемер предложил линейный конгруэнтный метод, [5] суть которого заключается в задании последовательности целых чисел рекурсивной формулой X n + 1 = ( a X n + c ) mod m , <\displaystyle X_=(aX_+c)

m,> где a , m , c <\displaystyle a,\ m,\ c> — целые и удовлетворяют следующим условиям: 0 m , 0 a m , 0 c m , X 0 m <\displaystyle 0 . Недостатком данного метода является зависимость 0>»> X n , n > 0 <\displaystyle X_,\ n>0> 0>»/> от X 0 <\displaystyle X_<0>> , так как X n = ( a n X 0 + c ( a n − 1 ) ( a − 1 ) ) mod m <\displaystyle X_=\left(a^X_<0>+<\frac -1)><(a-1)>>\right)

m> , а также то, что ПСЧ зацикливается.

Детерминированные ГПСЧ

Алгоритм

Большинство детерминированных ГПСЧ соответствуют структуре, предложенной П. Лекуером [1] в 1994 году: ( S , μ , f , U , g ) <\displaystyle (<\mathcal >,\mu ,f,<\mathcal >,g)> , где S <\displaystyle <\mathcal >> — это конечный набор состояний, μ <\displaystyle \mu > — вероятностное распределение в пространстве состояний S <\displaystyle <\mathcal >> , используемое для выбора начального состояния s 0 <\displaystyle <\mathcal >>> (англ. seed), f : S → S <\displaystyle f:<\mathcal >\rightarrow <\mathcal >> — функция перехода, U <\displaystyle <\mathcal >> — пространство выходных значений, g : S → U <\displaystyle g:<\mathcal >\rightarrow <\mathcal >> . Обычно U = ( 0 , 1 ) <\displaystyle <\mathcal >=(0,1)> , а состояние генератора задается рекуррентной формулой s i = f ( s i − 1 ) <\displaystyle s_=f\ (s_)> для i ≥ 1 <\displaystyle i\geq 1> . Выходное значение генератора u i = g ( s i ) ∈ U <\displaystyle u_=g\ (s_)\in <\mathcal >> ; u 0 , u 1 , u 2 . . . <\displaystyle u_<0>,\ u_<1>,\ u_<2>\ . > — последовательность псевдослучайных чисел. Так как U <\displaystyle <\mathcal >> конечно, то должны существовать некоторые конечные l ≥ 0 <\displaystyle l\geq 0> и 0>»> j > 0 <\displaystyle j>0> 0>»/> такие, что s l + j = s l <\displaystyle s_=s_> . Значит, для всех i ≥ l <\displaystyle i\geq l> будут выполняться условия s i + j = s i <\displaystyle s_=s_> и u i + j = u i <\displaystyle u_=u_> , потому что функции f <\displaystyle f> и g <\displaystyle g> детерминированные. Таким образом, получается, что последовательность периодическая. Периодом ГПСЧ называется минимальное положительное j <\displaystyle j> . [3]

Из современных ГПСЧ широкое распространение также получил «вихрь Мерсенна», предложенный в 1997 году Мацумото и Нисимурой. Его достоинствами являются колоссальный период (2 19937 −1), равномерное распределение в 623 измерениях (линейный конгруэнтный метод даёт более или менее равномерное распределение максимум в 5 измерениях), быстрая генерация случайных чисел (в 2-3 раза быстрее, чем стандартные ГПСЧ, использующие линейный конгруэнтный метод). Однако существуют алгоритмы, распознающие последовательность, порождаемую вихрем Мерсенна, как неслучайную.

Генератор псевдослучайных чисел включён в состав многих современных процессоров, например, RdRand входит в набор инструкций IA-32. [6]

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

Одноразовый блокнот

Альтернативным решением является создание набора из большого количества случайных чисел и опубликование его в некотором словаре, называемом «одноразовым блокнотом». Тем не менее, и такие наборы обеспечивают очень ограниченный источник чисел по сравнению с тем количеством, которое требуется приложениям сетевой безопасности. Хотя данные наборы действительно обеспечивают статистическую случайность, они недостаточно безопасны, так как злоумышленник может получить копию словаря.

Недостатки ГПСЧ

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

Любой ГПСЧ с ограниченными ресурсами рано или поздно зацикливается — начинает повторять одну и ту же последовательность чисел. Длина циклов ГПСЧ зависит от самого генератора и составляет около 2 n 2 <\displaystyle 2^<\frac <2>>> , где n <\displaystyle n> — размер внутреннего состояния в битах, хотя линейные конгруэнтные и РСЛОС-генераторы обладают максимальными циклами порядка 2 n <\displaystyle 2^> [7] . Если порождаемая последовательность ГПСЧ сходится к слишком коротким циклам, то такой ГПСЧ становится предсказуемым и непригодным для практических приложений.

Большинство простых арифметических генераторов хотя и обладают большой скоростью, но страдают от многих серьёзных недостатков:

  • Слишком короткий период/периоды.
  • Последовательные значения не являются независимыми.
  • Некоторые биты «менее случайны», чем другие.
  • Неравномерное одномерное распределение.
  • Обратимость.

В частности, алгоритм RANDU, десятилетиями использовавшийся на мейнфреймах, оказался очень плохим [8] [9] , что вызвало сомнения в достоверности результатов многих исследований, использовавших этот алгоритм.

ГПСЧ с источником энтропии или ГСЧ

Наравне с существующей необходимостью генерировать легко воспроизводимые последовательности случайных чисел, также существует необходимость генерировать совершенно непредсказуемые или попросту абсолютно случайные числа. Такие генераторы называются генераторами случайных чисел (ГСЧ — англ. random number generator, RNG ). Так как такие генераторы чаще всего применяются для генерации уникальных симметричных и асимметричных ключей для шифрования, они чаще всего строятся из комбинации криптостойкого ГПСЧ и внешнего источника энтропии (и именно такую комбинацию теперь и принято понимать под ГСЧ).

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

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

В персональных компьютерах авторы программных ГСЧ используют гораздо более быстрые источники энтропии, такие, как шум звуковой карты или счётчик тактов процессора. Сбор энтропии являлся наиболее уязвимым местом ГСЧ. Эта проблема до сих пор полностью не разрешена во многих устройствах (например, смарт-картах), которые таким образом остаются уязвимыми. [11] Многие ГСЧ используют традиционные испытанные, хотя и медленные, методы сбора энтропии вроде измерения реакции пользователя (движение мыши и т. п.), как, например, в PGP и Yarrow [12] , или взаимодействия между потоками, как, например, в Java SecureRandom.

Пример простейшего ГСЧ с источником энтропии

Если в качестве источника энтропии использовать текущее время, то для получения целого числа от 0 до N достаточно вычислить остаток от деления текущего времени в миллисекундах на число N+1. Недостатком этого ГСЧ является то, что в течение одной миллисекунды он выдает одно и то же число.

Примеры ГСЧ и источников энтропии

Источник энтропии ГПСЧ Достоинства Недостатки
/dev/random в UNIX/Linux Счётчик тактов процессора, однако собирается только во время аппаратных прерываний РСЛОС, с хешированием выхода через SHA-1 Есть во всех Unix, надёжный источник энтропии Очень долго «нагревается», может надолго «застревать», либо работает как ГПСЧ (/dev/urandom)
Yarrow от Брюса Шнайера [12] Традиционные методы AES-256 и SHA-1 маленького внутреннего состояния Гибкий криптостойкий дизайн Медленный
Microsoft CryptoAPI Текущее время, размер жёсткого диска, размер свободной памяти, номер процесса и NETBIOS-имя компьютера MD5-хеш внутреннего состояния размером в 128 бит Встроен в Windows, не «застревает» Сильно зависит от используемого криптопровайдера (CSP).
Java SecureRandom Взаимодействие между потоками SHA-1-хеш внутреннего состояния (1024 бит) Большое внутреннее состояние Медленный сбор энтропии
RdRand от intel [13] Шумы токов Построение ПСЧ на основе «случайного» битового считывания значений от токов [13] Очень быстр, не «застревает» Оригинальная разработка, свойства приведены только по утверждению разработчиков.

ГПСЧ в криптографии

Одним из критериев того, что ГПСЧ криптографически стойкий, является невозможность отличить выходные значения ГПСЧ от независимой равномерно распределенной на промежутке U = ( 0 , 1 ) <\displaystyle <\mathcal >=(0,1)> случайной последовательности. Пусть существует семейство ГПСЧ ξ k = ( S k , μ k , f k , U k , g k ) , k = 1 , 2 , . . . <\displaystyle <\xi _=(<\mathcal >>,\mu _,f_,<\mathcal >>,g_),k=1,2. >> , где мощность множества S k <\displaystyle <\mathcal >>> равно 2 k <\displaystyle 2^> . Как было указано выше, S <\displaystyle <\mathcal >> — это конечный набор состояний, μ <\displaystyle \mu > — вероятностное распределение в пространстве состояний S <\displaystyle <\mathcal >> , используемое для выбора начального состояния s 0 <\displaystyle <\mathcal >>> (англ. seed), f : S → S <\displaystyle f:<\mathcal >\rightarrow <\mathcal >> — функция перехода, U <\displaystyle <\mathcal >> — пространство выходных значений, g : S → U <\displaystyle g:<\mathcal >\rightarrow <\mathcal >> . Обычно U = ( 0 , 1 ) <\displaystyle <\mathcal >=(0,1)> , а состояние генератора задается рекуррентной формулой s i = f ( s i − 1 ) <\displaystyle s_=f\ (s_)> для i ≥ 1 <\displaystyle i\geq 1> . Выходное значение генератора u i = g ( s i ) ∈ U <\displaystyle u_=g\ (s_)\in <\mathcal >> ; u 0 , u 1 , u 2 . . . <\displaystyle u_<0>,\ u_<1>,\ u_<2>\ . > — последовательность псевдослучайных чисел. Предположим, что функции перехода f <\displaystyle f> и выхода g <\displaystyle g> могут быть вычислены за полиномиальное, степени k <\displaystyle k> , время. Пусть T <\displaystyle <\mathcal >> — класс статистических тестов, которые пытаются за полиномиальное, степени k <\displaystyle k> , время отличить выходные значения ГПСЧ от независимой равномерно распределенной на промежутке U = ( 0 , 1 ) <\displaystyle <\mathcal >=(0,1)> случайной последовательности. Семейство ГПСЧ ξ k <\displaystyle \xi _> называется хорошим с точки зрения полиномиального времени, если найдется 0>»> ϵ > 0 <\displaystyle \epsilon >0> 0″/> такая, что для всех k <\displaystyle k> никакой из тестов T <\displaystyle <\mathcal >> не может отличить выходные значения ГПСЧ от независимой равномерно распределенной на промежутке U = ( 0 , 1 ) <\displaystyle <\mathcal >=(0,1)> случайной последовательности с вероятностью 1 / 2 + e − k ϵ <\displaystyle 1/2+e^<-k\epsilon >> . [3]

Криптографические приложения используют для генерации случайных чисел детерминированные алгоритмы, следовательно, генерируют последовательность чисел, которая теоретически не может быть статистически случайной. В то же время, если выбрать хороший алгоритм, полученная численная последовательность — псевдослучайных чисел — будет проходить большинство тестов на случайность. Одной из характеристик такой последовательности является большой период повторения. [3]

Примерами известных криптостойких ГПСЧ являются RC4 [7] , ISAAC [14] , SEAL [15] , SNOW [16] , совсем медленный теоретический алгоритм Блюм — Блюма — Шуба [7] , а также счётчики с криптографическими хеш-функциями или криптостойкими блочными шифрами вместо функции вывода [7] .

Примеры криптостойких ГПСЧ

Циклическое шифрование

Происходит шифрование случайных чисел генератора с помощью различных секретных ключей X i <\displaystyle X_> , полученных на каждой стадии. Счетчик с большим периодом N <\displaystyle N> используется в качестве входа в шифрующее устройство. При использовании 56-битного ключа DES может использоваться счетчик с периодом 2 56 <\displaystyle 2^<56>> .

  1. В момент инициализации генерируется секретный ключ K <\displaystyle K>и константа C <\displaystyle C>. K <\displaystyle K>должен быть случайным и используется только для данного генератора.
  2. На каждой стадии происходит следующее:

X i = E K ( C ) <\displaystyle X_=E_(C)>C = C + 1 <\displaystyle C=C+1>

Псевдослучайная последовательность, полученная по данной схеме, имеет полный период: каждое выходное значение X 0 <\displaystyle X_<0>> , X 1 <\displaystyle X_<1>> , . X N − 1 <\displaystyle X_> основано на разных значениях счетчика, поэтому X 0 ≠ X 1 ≠ . . . ≠ X N − 1 <\displaystyle X_<0>\neq X_<1>\neq . \neq X_> . Так как ключ K <\displaystyle K> является секретным, то любой секретный ключ X i <\displaystyle X_> не зависит от знания одного или более предыдущих секретных ключей. Для увеличения криптостойкости алгоритма необходимо на каждом шаге шифровать случайное число R i <\displaystyle R_> с ГСЧ — X i = E K ( R i ) <\displaystyle X_=E_(R_)> . [17]

ANSI X9.17

ГПСЧ из стандарта ANSI X9.17 используется во многих приложениях финансовой безопасности и PGP. В основе этого ГПСЧ лежит тройной DES. Генератор ANSI X9.17 состоит из следующих частей:

  1. В момент инициализации генерируется секретный ключ K <\displaystyle K>. Он должен быть случайным и используется только для данного генератора.
  2. На каждой стадии происходит следующее:

T i = E K ( D i ) <\displaystyle T_=E_(D_)>R i = E K ( T i ⊕ V i ) <\displaystyle R_=E_(T_\oplus V_)>V i + 1 = E K ( T i ⊕ R i ) <\displaystyle V_=E_(T_\oplus R_)>

  • D i <\displaystyle D_>— значение даты и времени на начало i <\displaystyle i>-ой стадии генерации.
  • V i <\displaystyle V_>— начальное значение для i <\displaystyle i>-ой стадии генерации.
  • R i <\displaystyle R_>— псевдослучайное число, созданное на i <\displaystyle i>-ой стадии генерации.
  • K <\displaystyle K>— ключ, используемый на каждой стадии.
  • E K <\displaystyle E_>— функция шифрования ключом K <\displaystyle K>.

Входными случайными значениями являются D i <\displaystyle D_> и V i <\displaystyle V_> . R i <\displaystyle R_> — выходное значение. Вычисление V i + 1 <\displaystyle V_> из R i <\displaystyle R_> без знания K <\displaystyle K> не является возможным за разумное время, и, следовательно, следующее псевдослучайное значение R i + 1 <\displaystyle R_> , так как для получения V i + 1 <\displaystyle V_> дополнительно выполняются три операции шифрования. [18]

Аппаратные ГПСЧ

Кроме устаревших, хорошо известных РСЛОС-генераторов, широко применявшихся в качестве аппаратных ГПСЧ в XX веке, очень мало известно о современных аппаратных ГПСЧ, так как большинство из них разработано для военных целей или запатентованы и держатся в секрете. Аппаратно реализуемые РСЛОС-генераторы Toyocrypt и LILI-128, были взломаны с помощью алгебраических атак [19] [20] .

В настоящее время известно о применении аппаратных ГПСЧ, реализуемых на основе маломощных шумов в электросхемах. [21]

Применение ГСЧ в лотереях

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

Попытки создать генератор случайных чисел относятся к 3500 году до н. э. и связаны с древнеегипетской настольной игрой Сенет. В Сенете два игрока играют за две стороны. Ходы определяются с помощью 4 плоских палочек, что и может считаться генератором случайных чисел того времени. Бросают все четыре палочки сразу. Подсчет очков происходит следующим образом: 1 палочка упала белой стороной вверх — 1 очко и дополнительный бросок; 2 — 2 очка; 3 — 3 очка, 4 — 4 и дополнительный бросок. Одна из сторон палочки черная и если все четыре палочки падали черной стороной вверх — это максимальный результат — 5 очков и дополнительный бросок.

Известный генератор случайных чисел ERNIE применялся на протяжении многих лет для определения выигрышных номеров британской лотереи.

Основные требования к программному обеспечению и оборудованию, используемому для проведения розыгрышей в Российской Федерации, устанавливаются Федеральным законом от 11.11.2003 № 138-ФЗ «О лотереях»:

  • Технические характеристики лотерейного оборудования должны обеспечивать случайность распределения выигрышей при розыгрыше призового фонда тиражных лотерей.
  • Не должны использоваться процедуры, реализующие алгоритмы, которые позволяли бы предопределять результат розыгрыша призового фонда до начала такого розыгрыша.
  • Лотерейное оборудование, используемое при проведении тиражной лотереи, должно обеспечивать защиту информации от утраты, хищения, искажения, несанкционированных действий по ее уничтожению, модификации, копированию и иных подобных действий и несанкционированного доступа по сети передачи данных. [22]

В российских государственных лотереях («Гослото «5 из 36», «Гослото «6 из 36», «Гослото «6 из 45», «Гослото «7 из 49», «Гослото «4 из 20», «Спортлото 6 из 49») [23] для определения победителей используются самозаряжающиеся лототроны. Трансляция розыгрышей ведется в прямом эфире. [24]

В российских государственных лотереях («Рапидо», «Кено-Спортлото», «Топ-3», «12/24», «Всё по сто») для определения победителей используется генератор случайных чисел — аппаратно-программный комплекс, сертифицированный АНО «МИЦ» и отвечающий рекомендациям ФГУП ВНИИМС. Аппарат формирует непрерывный поток случайных шумов, которые преобразуются в числа. В заданный момент времени из потока выхватываются текущие значения, которые и являются выигрышной лотерейной комбинацией. [25]

В 2015 году бывшему директору по безопасности US Multi-State Lottery Association после выигрыша в 16.5 млн. долларов, имевшему доступ к программному обеспечению, используемому при розыгрышах лотерей, было предъявлено обвинение в использовании специальных алгоритмов, позволяющих определять выигрышную комбинацию лотереи в течение нескольких дней в году. [26]

См. также

Примечания

  1. N.G. Bardis, A.P. Markovskyi, N. Doukas, N. V. Karadimas.True Random Number Generation Based on Environmental Noise Measurements for Military Applications // Proceedings of the 8th WSEAS International Conference on SIGNAL PROCESSING, ROBOTICS and AUTOMATION. — 2009. — С. 68-73 . — ISBN 978-960-474-054-3. — ISSN1790-5117.
  2. ↑Random.org.
  3. 123456L’Ecuyer, Pierre.Random Number Generation // Springer Handbooks of Computational Statistics : Глава. — 2007. — С. 93 — 137 . — DOI:10.1002/9780470172445.ch4.
  4. Von Neumann, John.Various techniques used in connection with random digits // National Bureau of Standards Applied Mathematics Series. — 1951. — № 12 . — С. 36-38 .
  5. Lehmer, D.H.Mathematical Methods in Large-Scale Computing Units // Ann, Comput Lab. Harvard Univ.. — 1951. — Vol. 26. — С. 141-146 . (недоступная ссылка)
  6. ↑Intel Digital Random Number Generator (DRNG): Software Implementation Guide, Revision 1.1 (PDF). Intel Corporation (7 августа 2012). Проверено 25 ноября 2012.Архивировано 18 мая 2013 года.
  7. 12345Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И., Владимиров С. М.Защита информации. Учебное пособие. — С. 100-113.
  8. Дональд Кнут. Глава 3.3. Спектральный критерий // Искусство программирования. Указ. соч. — С. 129—130.
  9. William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery. Numerical Recipes in C: The Art of Scientific Computing. — 2nd ed. — Cambridge University Press, 1992. — P. 277. — ISBN 0-521-43108-5.
  10. ↑Из квантового вакуума получили случайные числа
  11. Jovan Dj. Goli ́c.Cryptanalytic Attacks on MIFARE Classic Protocol // Topics in Cryptology – CT-RSA 2013. — Springer, Berlin, Heidelberg, 2013. — № 7779 . — С. 239-259 . — DOI:10.1007/978-3-642-36095-4_16.
  12. 12Yarrow
  13. 12Intel DRNG Software Implementation Guide. Intel.
  14. J.-P. Aumasson.On the pseudo-random generator ISAAC // Cryptology ePrint Archive. — 2006.
  15. H. Chen, K. Laine, R. Player. [https://eprint.iacr.org/2017/224.pdf Simple Encrypted Arithmetic Library — SEAL v2.1] // Cryptology ePrint Archive. — 2017.
  16. A. Kircanski and A. M. Youssef. [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.301.2615&rep=rep1&type=pdf On the Sliding Property of SNOW 3G and SNOW 2.0] // Information Security, IET. — 2010. — № 5(4) . — С. 199-206 .
  17. Лапонина О. Р.Алгоритмы симметричного шифрования. НОУ ИНТУИТ.
  18. Kelsey J., Schneier B., Wagner D., Hall C.Cryptanalytic Attacks on Pseudorandom Number Generators // Fast Software Encryption. FSE 1998. Lecture Notes in Computer Science. — Springer, Berlin, Heidelberg, 1998. — Vol. 1372. — DOI:10.1007/3-540-69710-1_12.
  19. N. T. Courtois.Higher Order Correlation Attacks, XL Algorithm and Cryptanalysis of Toyocrypt // Cryptology ePrint Archive. — 2002.
  20. Ed Dawson, Andrew Clark, J Golic, W Millan, L Penna.The LILI-128 Keystream Generator. — 2000-12-13.
  21. C. S. Petrie, J. A. Connelly.A noise-based IC random number generator for applications in cryptography // IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications. — May 2000. — Vol. 47, № 5 . — С. 615–621 . — ISSN1057-7122. — DOI:10.1109/81.847868.
  22. ↑Статья 12.1. Требования к лотерейному оборудованию и лотерейным терминалам.
  23. ↑Ответы на вопросы о «Столото». Сто Лото.
  24. ↑Трансляции розыгрышей государственных лотерей. Сто Лото.
  25. ↑Генератор случайных чисел. Сто Лото.
  26. ↑Man hacked random-number generator to rig lotteries, investigators say, The Guardian.

Литература

  • Дональд Э. Кнут. Глава 3. Случайные числа // Искусство программирования = The Art of Computer Programming. — 3-е изд. — М. : Вильямс, 2000. — Т. 2. Получисленные алгоритмы. — 832 с. — 7000 экз. — ISBN 5-8459-0081-6 (рус.) ISBN 0-201-89684-2 (англ.).
  • Кельтон В., Лоу А. Имитационное моделирование. Классика CS. — 3-е изд.. — СПб. : Питер, 2004. — С. 465, 466. — 487 с. — ISBN 0070592926. — ISBN 5-94723-981-7.
  • L’Ecuyer, Pierre.Random Number Generation // Springer Handbooks of Computational Statistics : Глава. — 2007. — С. 93 — 137 . — DOI:10.1002/9780470172445.ch4.

Ссылки

  • В. А. Успенский.Четыре алгоритмических лица случайности. — МЦНМО, 2006. — 48 с. — ISBN 978-5-94057-485-9.
  • Юрий Лифшиц. Лекция 9: Псевдослучайные генераторы // Современные задачи криптографии. — Курс лекций.
  • Л. Бараш.Алгоритм AKS проверки чисел на простоту и поиск констант генераторов псевдослучайных чисел // Безопасность информационных технологий. — 2005. — № 2 . — С. 27-38 . Архивировано 18 октября 2014 года.
  • Жельников В. Псевдослучайные последовательности чисел // Кpиптография от папируса до компьютера. — М. : ABF, 1996. — 335 с. — ISBN 5-87484-054-0.
  • Cryptographic Random Numbers (англ.)
  • Theory and Practice of Random Number Generation (англ.)
  • Zvi Gutterman, Benny Pinkas, Tzachy Reinman. Analysis of the Linux Random Number Generator (англ.)
  • A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications (англ.) NIST SP 800-22

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

Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License.

Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. wiki2.info является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).

Источник