Что является генератором случайных чисел

На Хабре и в сети часто начали появляться статьи, посвященные уязвимостям генераторов случайных чисел. Данная тема крайне обширна и является одной из основных в криптографии. Под катом находится...

Что является генератором случайных чисел

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

Введение

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

  • Генераторы сессий (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 и множество других, чтобы определить критостойкость алгоритма.

Что такое ГСЧ – как работает генератор случайных чисел

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

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

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

Истинный ГСЧ против псевдо ГСЧ

Есть два типа генераторов случайных чисел: истинные и псевдо.

  • Алгоритм истинного генератора случайных чисел создаётся с помощью аппаратного устройства, которое использует очень крошечные физические процессы для генерации случайных чисел. Так как алгоритм не написан; следовательно, истинный ГСЧ не может быть взломан для предсказания. Он обычно используется в системах, ориентированных на безопасность, по всему миру и в некоторых формах шифрования.
  • Алгоритм генератора псевдослучайных чисел используется в областях, где нет проблем с безопасностью, а случайность используется, чтобы избежать повторений и сделать что-то более интересное для конечного пользователя. Реализовать технологию дешевле и быстрее, поскольку она не требует оборудования и может быть легко встроена в программный код. Хотя этот процесс не является полностью случайным и определяется на основе алгоритма, он больше подходит для игр и программ.

Какие приложения используют ГСЧ

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

  • Азартные игры: бинго, карточные игры, лотереи и подобные игры.
  • Игры со сбором добычи: все игры, требующие от игроков сбора добычи для использования в игровом процессе, например, PubG, Diablo и Borderlands используют ГСЧ. Возможность получать лучшую добычу каждый раз – вот причина, по которой люди становятся зависимыми от них.
  • Приключенческие игры: такие игры, как Марио и Покемон Го используйте алгоритм генератора случайных чисел, чтобы определить, какие предметы будут добавлены, и каждый раз вы встречайтесь с новым претендентом на покемона.
  • Процедурно-сгенерированные игры: все игры, в которых нет предварительно разработанных карт и уровней, но которые были разработаны в игре с использованием процедурного программирования, таких как Minecraft и Civilization. Это помогает создать всю игру с использованием алгоритма.
  • Соревновательные игры: некоторые соревновательные игры, например, Counter-Strike используйте алгоритм генератора случайных чисел, чтобы регулировать, как пули поражают цели.
Читайте также  Устройство генератора пассат б5

Помимо игровых приложений, есть код случайных чисел в JavaScript, используемый разработчиками и кодировщиками во всём мире для включения генератора случайных чисел в их программы. У Google есть свой очень интересный инструмент, который также основан на теории случайных чисел JavaScript и может генерировать случайные числа. Этот инструмент может пригодиться, когда вы играете в игры с друзьями и семьей. Чтобы посмотреть ГСЧ Google, нажмите здесь.

Манипуляции с ГСЧ

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

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

Например, если игра требует от игрока выбрать определенного персонажа с определенными усилениями, и результатом будет легкая битва с боссом, то этот шаблон будет постоянным, и все, кто выберет одни и те же варианты, будут иметь одинаковые результаты. Но, для обычного игрока это было бы невозможно, и псевдо-ГСЧ всегда казался бы истинным ГСЧ.

Почему геймеры ненавидят ГСЧ

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

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

Кто такой RNGesus?

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

Игроки, которые проигрывают, часто винят в своих поражениях злой ГСЧ, который выгоден их противникам. Там где зло, должен быть Бог – RNGesus.

Среди геймеров во всем мире появился новый термин, RNGesus, который больше соответствует игре слов с «Иисусом». Поскольку Иисус Христос считается нашим спасителем в реальном мире, RNGesus – это вообразимая сущность, созданная для спасения игроков от пагубных последствий ГСЧ. Это нигде не доказывается, но началось как миф, а теперь распространилось по игровому сообществу, как лесной пожар.

Окончательный вердикт по ГСЧ – хорошо или плохо?

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

Алгоритм генератора случайных чисел действительно сохраняет непредсказуемость и интересность каждый раз, когда вы играете на одном уровне. Он стал важной частью многих игр, предлагая разнообразие, например, головоломки, карточные игры, ролевые игры и многие другие. Но, для геймеров, которые верят в навыки как в единственный способ пройти игру, ГСЧ подрывает их потенциал, когда вытаскивает что-то случайное из коробки.

Игры предназначены для развлечения и удовольствия. Если у вас хороший ГСЧ, вы сможете получить лучшие варианты, несмотря на низкие шансы. В случае плохого ГСЧ, вы получите худший результат, даже если вы играли в игру именно так, как должно. Правда в том, что это не то, что можно воспринимать так серьёзно, особенно если оно основано на алгоритме генератора случайных чисел.

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

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

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

Содержание

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

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

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

Генератор псевдослучайных чисел включён в состав многих современных процессоров (напр., семейства x86)

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

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

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

Любой ГПСЧ с ограниченными ресурсами рано или поздно зацикливается — начинает повторять одну и ту же последовательность чисел. Длина циклов ГПСЧ зависит от самого генератора и составляет около 2 n/2 , где n — размер внутреннего состояния в битах, хотя линейные конгруэнтные и LFSR-генераторы обладают максимальными циклами порядка 2 n . Если порождаемая ГПСЧ последовательность сходится к слишком коротким циклам, то такой ГПСЧ становится предсказуемым и непригодным для практических приложений.

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

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

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

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

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

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

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

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

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

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

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

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

Источник энтропии ГПСЧ Достоинства Недостатки
/dev/random в UNIX/Linux Счётчик тактов процессора, однако собирается только во время аппаратных прерываний LFSR, с хешированием выхода через SHA-1 Есть во всех Unix, надёжный источник энтропии Очень долго «нагревается», может надолго «застревать», либо работает как ГПСЧ (/dev/urandom)
Yarrow от Брюса Шнайера [4] Традиционные методы AES-256 и SHA-1 маленького внутреннего состояния Гибкий криптостойкий дизайн Медленный
Microsoft CryptoAPI Текущее время, размер жёсткого диска, размер свободной памяти, номер процесса и NETBIOS-имя компьютера MD5-хеш внутреннего состояния размером в 128 бит Встроен в Windows, не «застревает» Сильно зависит от используемого криптопровайдера (CSP).
Java SecureRandom Взаимодействие между потоками SHA-1-хеш внутреннего состояния (1024 бит) Большое внутреннее состояние Медленный сбор энтропии
Chaos от Ruptor [5] Счётчик тактов процессора, собирается непрерывно Хеширование 4096-битового внутреннего состояния на основе нелинейного варианта Marsaglia-генератора Пока самый быстрый из всех, большое внутреннее состояние, не «застревает» Оригинальная разработка, свойства приведены только по утверждению автора
RRAND от Ruptor [6] Счётчик тактов процессора Зашифровывание внутреннего состояния поточным шифром EnRUPT в authenticated encryption режиме (aeRUPT) Очень быстр, внутреннее состояние произвольного размера по выбору, не «застревает» Оригинальная разработка, свойства приведены только по утверждению автора. Шифр EnRUPT не является криптостойким.

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

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

Читайте также  Хендай солярис замена натяжного ролика ремня генератора

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

В военных целях и в полевых условиях применяются только засекреченные синхронные криптостойкие ГПСЧ (поточные шифры), блочные шифры не используются. Примерами известных криптостойких ГПСЧ являются RC4, ISAAC, SEAL, Snow, совсем медленный теоретический алгоритм Блюма, Блюма и Шуба, а также счётчики с криптографическими хеш-функциями или криптостойкими блочными шифрами вместо функции вывода.

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

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

В данном случае используется способ генерации ключа сессии из мастер-ключа. Счетчик с периодом N используется в качестве входа в шифрующее устройство. Например, в случае использования 56-битного ключа DES может использоваться счетчик с периодом 256. После каждого созданного ключа значение счетчика повышается на 1. Таким образом, псевдослучайная последовательность, полученная по данной схеме, имеет полный период: каждое выходное значение Х0, Х1,…XN-1 основано на разных значениях счетчика, поэтому Х0 ≠ X1 ≠ XN-1. Так как мастер-ключ является секретным, легко показать, что любой секретный ключ не зависит от знания одного или более предыдущих секретных ключей.

ANSI X9.17

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

  1. Вход: генератором управляют два псевдослучайных входа. Один является 64-битным представлением текущих даты и времени, которые меняются каждый раз при создании числа. Другой является 64-битным исходным значением. Оно инициализируется некоторым произвольным значением и изменяется в ходе генерации последовательности псевдослучайных чисел.
  2. Ключи: генератор использует три модуля тройного DES. Все три используют одну и ту же пару 56-битных ключей, которая держится в секрете и применяется только при генерации псевдослучайного числа.
  3. Выход: выход состоит из 64-битного псевдослучайного числа и 64-битного значения, которое будет использоваться в качестве начального значения при создании следующего числа.
  • DTi — значение даты и времени на начало i-ой стадии генерации.
  • Vi — начальное значение для i-ой стадии генерации.
  • Ri — псевдослучайное число, созданное на i-ой стадии генерации.
  • K1, K2 — ключи, используемые на каждой стадии.

Схема включает использование 112-битного ключа и трех EDE-шифрований. На вход даются два псевдослучайных значения: значение даты и времени и начальное значение текущей итерации, на выходе получаются начальное значение для следующей итерации и очередное псевдослучайное значение. Даже если псевдослучайное число Ri будет скомпрометировано, вычислить Vi+1 из Ri не является возможным за разумное время, и, следовательно, следующее псевдослучайное значение Ri+1, так как для получения Vi+1 дополнительно выполняются три операции EDE.

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

Кроме устаревших, хорошо известных LFSR-генераторов, широко применявшихся в качестве аппаратных ГПСЧ в XX веке, к сожалению, очень мало известно о современных аппаратных ГПСЧ (поточных шифрах), так как большинство из них разработано для военных целей и держатся в секрете. Почти все существующие коммерческие аппаратные ГПСЧ запатентованы и также держатся в секрете. Аппаратные ГПСЧ ограничены строгими требованиями к расходуемой памяти (чаще всего использование памяти запрещено), быстродействию (1-2 такта) и площади (несколько сотен FPGA- или ASIC-ячеек). Из-за таких строгих требований к аппаратным ГПСЧ очень трудно создать криптостойкий генератор, поэтому до сих пор все известные аппаратные ГПСЧ были взломаны. Примерами таких генераторов являются Toyocrypt и LILI-128, которые оба являются LFSR-генераторами, и оба были взломаны с помощью алгебраических атак.

Из-за недостатка хороших аппаратных ГПСЧ производители вынуждены применять имеющиеся под рукой гораздо более медленные, но широко известные блочные шифры (DES, AES) и хеш-функции (SHA-1) в поточных режимах.

K. Генератор случайных чисел

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

  1. Использование естественного случайного процесса, такого как многоразовое бросание монеты и интерпретация результата «орел» или «решка», как значения битов 0 или 1 .
  2. Использование детерминированного процесса с информацией обратной связи.

Первый подход назван истинным генератором случайных чисел (TRNG — True Random Number Generator).

Второй назван псевдослучайным генератором числа (PRNG — Pseudorandom Number Generator) . Рисунок K.1 показывает эти два подхода.

K.1. Истинный генератор случайных чисел (TRNG)

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

K.2. Генератор псевдослучайных чисел (PRNG)

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

Конгруэнтные генераторы

Несколько методов используют некоторые конгруэнтные отношения.

Линейный конгруэнтный генератор

В информатике самая общая методика для того, чтобы производить псевдослучайные числа, — линейный конгруэнтный метод, введенный Лехмером (Lehmer). Рисунок K.2 показывает этот метод, который рекурсивно создает последовательность псевдослучайных чисел, используя линейное конгруэнтное уравнение xi+1 = (axi + b) mod n , где x0 называется начальным числом (seed) — это число между 0 и n — 1 .

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

Предположим a = 4 , b = 5 , n = 17 и xi0 = 7 . Последовательность — 16, 1, 9, 7, 16, 1, 9, 7.. ., которая есть явно неудовлетворительная псевдослучайная последовательность; её период — только 4 .

Критерии. Для приемлемого генератора псевдослучайных чисел ( PRNG ) в течение прошлых нескольких десятилетий были разработаны несколько критериев.

  1. Период должен быть равен n (модулю). Это означает, что прежде чем целые числа в последовательности начинают повторяться, должны быть сгенерированы все целые числа между 0 и n — 1 .
  2. Последовательность в каждый период должна быть случайна.
  3. Процесс генерации должен быть удобен для реализации на компьютере. Большинство компьютеров сегодня эффективно, когда применяется арифметика, использующая слова по 32 бита.

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

  1. Оптимальный выбор модуля, n , — это наибольшее простое число, близкое к размеру слова, используемого в компьютере. Рекомендуется использовать тридцать первое простое число Мерсенны как модуль: n = M 31 = 2 31 — 1 .
  2. Чтобы создавать период, равный значению модуля, значение первого коэффициента, a , должно быть первообразным корнем главного модуля. Хотя целое число 7 — первообразный корень M31 , рекомендуют использовать 7 k , где k — целое число, взаимно-простое с ( M31 — 1 ). Некоторые рекомендованные значения для k — это 5 и 13 . Это означает, что ( a = 7 5 ) или ( a = 7 13 ).
  3. Вторая рекомендация: для эффективного использования компьютера значение второго коэффициента b должно быть нулевым.

Линейный конгруэнтный генератор:

xi+1 = axi mod n , где n = 2 31 — 1 и a = 7 5 или a = 7 13

Безопасность. Последовательность, сгенерированная линейным конгруэнтным уравнением, показывает приемлемую случайность (если следовать предыдущим рекомендациям). Последовательность полезна в некоторых приложениях, где требуется только случайность (таких как моделирование); она бесполезна в криптографии, где желательны и случайность, и безопасность. Поскольку число n общедоступно, последовательность может быть атакована Евой с использованием одной из двух стратегий:

  • Если Ева знает значение начального числа ( x 0) и коэффициент a , она может легко восстановить целую последовательность;
  • Если Ева не знает значение x 0 и a , она может перехватить первые два целых числа и использовать следующие два уравнения, чтобы найти x0 и a :
Генератор квадратичных вычетов

Чтобы получить менее предсказуемую псевдослучайную последовательность, был введен генератор квадратичных вычетов (см. «A. ASCII» ), xi+1 = xi 2 mod n , где x0 называют начальным числом, — число между 0 и n -1 .

Генератор Blum Blum Shub

Простой, но эффективный метод создания генератора псевдослучайных чисел назван Blum Blum Shub (BBS) по имени его трех изобретателей.

BBS использует уравнение квадратичного вычета, но это — псевдослучайный генератор бит вместо генератора псевдослучайных чисел ; он генерирует последовательность битов ( 0 или 1 ).

Рисунок K.3 показывает идею этого генератора.

Ниже приведены шаги генерации:

  1. Найдите два больших простых числа p и q в форме 4k + 3 , где k — целое число ( p и q являются конгруэнтными 3 mod 4 ) .
  2. Выберите модуль n = p x q .
  3. Выберите случайное целое число r , которое является взаимно-простым с n .
  4. Вычислите начальное число как x0 = r 2 mod n .
  5. Генерировать последовательность xi+1 = xi 2 mod n.
  6. Взять самый младший бит сгенерированного случайного целого числа ( LSB — Least Significant Bit) как случайный бит.

Безопасность. Может быть доказано, что если p и q известны, i -тый бит в последовательности может быть найден как самый младший бит:

Это означает, что если Ева знает значение p и q , она может найти значение i -того бита, пробуя все возможные значения n (значение n обычно общедоступно). Тем самым сложность у этого генератора — та же самая, как у разложения на множители n. Если n является достаточно большим, последовательность безопасна (непредсказуема). Было доказано, что при очень большом n Ева не может предсказать значение следующего бита в последовательности, даже если она знает значения всех предыдущих битов. Вероятность каждого принятия значений для каждого бита, 0 или 1, — очень близка к 50 процентам.

Генераторы на основе криптографической системы

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

ANSI X9.17 генератор псевдослучайных чисел (PRNG)

ANSI X9.17 определяет криптографически сильный генератор псевдослучайных чисел , использующий тройной 3DES с двумя ключами (шифрация — дешифрация — шифрация), рисунок рис. K.4 иллюстрирует этот проект. Обратите внимание, что первое псевдослучайное число это 64-битовое начальное число, используемое как инициирующий вектор (IV); остальная часть псевдослучайных чисел использует начальное число, показанное как следующие IV. Тот же самый ключ засекречивания на 112 битов ( K1 и K2 в 3DES ) применяется для всех трех 3DES-шифров.

На рис. K.4 конфигурация — режим сцепления блоков шифрованного текста ( CBC ), который мы описали согласно рис. 8.3 в «Безопасность на сетевом уровне: IP SEC» . Режим X9.17 применяет два каскада формирования цепочки блока. Исходный текст для каждого каскада поступает от выхода первого 3DES, который использует дату и время как исходный текст на 64 бита. Зашифрованный текст, созданный вторым 3DES, — случайное число; зашифрованный текст, созданный третьим 3DES, — следующий инициирующий вектор IV для следующего случайного числа.

Строгость X9.17 определяется следующими фактами.

  1. Ключ — 112 (2 56) бит.
  2. Ввод даты и времени на 64 бита обеспечивает хорошую метку времени, предотвращающую атаку воспроизведения.
  3. Система обеспечивает превосходный эффект рассеивания и перемешивания с помощью шести шифрований и трех дешифрований.
Читайте также  Что будет с генератором без аккумулятора

PGP генератор псевдослучайных чисел (PRNG)

PGP (очень хорошая конфиденциальность) берет ту же самую идею, что и X9.17 с несколькими изменениями. Сначала PGP PRNG использует семь каскадов вместо двух. Второе: шифр является или IDEA, или CAST 128 (не рассмотренный в этой книге). Третье: ключ — обычно 128 битов. PGP PRNG создает три случайных числа на 4 бита: первое используется как инициирующий вектор IV секретности (для связи, работающей с PGP, но не для PRNG ), второй и третий конкатенируются, чтобы создать секретный ключ 128 битов (для связи, работающей PGP). Рисунок K.5 показывает эскиз PGP PRNG . Строгость PGP PRNG задана в размере его ключа и в том, что оригинал IV (начальное число) и ключ засекречивания на 128 битов могут быть сгенерированы от 24-байтовой истинно случайной переменной.

masterok

Мастерок.жж.рф

Хочу все знать

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

Вот вам история из 90-х:

Представьте, что сейчас 1995 год и вы собираетесь совершить первую покупку в онлайне. Вы открываете браузер Netscape и прихлёбываете из чашечки кофе, пока главная страница медленно загружается. Ваш путь лежит на Amazon.com — новый онлайн-магазинчик, о которой рассказал вам друг. Когда наступает этап оформить покупку и ввести персональные данные, адрес в браузере меняется с «http» на «https». Это сигнализирует о том, что компьютер установил зашифрованное соединение с сервером Amazon. Теперь можно передавать серверу данные кредитной карты, не опасаясь мошенников, которые хотят перехватить информацию.

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

Проблема в том, что секретные ключи, которые использовал Netscape, были недостаточно случайными. Их длина составляла всего 40 бит, что означает около триллиона возможных комбинаций. Это кажется большим числом, но хакерам удалось взломать эти коды, даже на компьютерах 1990-х годов, примерно за 30 часов. Якобы случайное число, которое Netscape использовал для генерации секретного ключа, базировалось всего на трёх значениях: времени суток, идентификационном номере процесса и идентификационном номере материнского процесса — все они являются предсказуемыми. Из-за этого злоумышленник имел возможность сократить количество вариантов для перебора и найти нужный ключ гораздо раньше, чем предполагали в Netscape.

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

Исследователям удалось изобрести генераторы псевдослучайных чисел, которые признаны криптографически надёжными. Но их нужно запускать с качественного случайного начального значения (random seed), иначе они всегда сгенерируют один и тот же набор чисел. И для этого начального значения вам нужно нечто такое, что действительно невозможно подобрать или предсказать.

И вот группа ученых из МГУ разработала и сконструировала компактный высокоскоростной квантовый генератор истинно случайных чисел.

«Развитие современных квантовых технологий открыло новые перспективы для создания систем защищенной связи. Наиболее яркий пример — квантовая криптография. Для распределения секретных ключей в системах квантовой криптографии требуется большое количество случайных последовательностей 0 и 1. Для этих целей используются квантовые генераторы случайных чисел», — поясняет Сергей Кулик, доктор физико-математических наук, профессор кафедры квантовой электроники физического факультета МГУ.

Учёные МГУ разработали и сконструировали такой генератор, последовательности чисел которых можно считать истинно случайными. Дело в том, что в основе действия новой разработки лежат законы релятивистской, а не классической физики. Исследователям удалось оптимально выбрать и сгруппировать фотоотсчёты для исходной последовательности и добиться скорости генерации случайной последовательности скоростью в 64 Мбит/с, 75 Мбит/с и 100 Мбит/с. Сгенерированные последовательности успешно прошли статистические тесты NIST на случайность.

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

Случайные числа широко используются в различных областях науки и техники, например, при вычислении многомерных интегралов, моделировании различных процессов методом Монте-Карло. Наиболее широкое применение случайные числа находят в криптографии. Случайные последовательности используются для секретных ключей в системах симметричного шифрования, генерации паролей, PIN кодов для различных типов пластиковых карт, кодов аутентификации, вероятностных алгоритмов и систем квантового распределения ключей. Практически для всех упомянутых применений требуются случайные числа, полученные исключительно с физических генераторов.

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

Результаты исследования опубликованы в журнале Laser Physics Letters.

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

Из Википедии — свободной энциклопедии

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

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

Энциклопедичный YouTube

Субтитры

Когда мы наблюдаем за физическим миром, мы находим случайные отклонения везде. Мы можем генерировать настоящие случайные величины, измеряя случайные отклонения, называемые шумом. При измерении этого шума (выборке) можно получать числа. Например, если измерить электрический ток статики от телевизора в течении некоторого времени, то получится идеальная случайная последовательность. Можно визуализировать эту случайную последовательность, изобразив путь, направление которого изменяется в зависимости от каждого числа. Это называется случайным блужданием. Нужно отметить отсутствие шаблона любого масштаба в каждой точке последовательности — следующий шаг всегда непредсказуем. Говорят, что случайные процессы недетерминированные, так как невозможно предсказать их развитие заранее. Машины, с другой стороны, детерминированные. Их операции предсказуемы и повторяемые. В 1946 году Джон фон Нейман был приглашен для проведения вычислений для военных. Особенно активно он участвовал при проектировании водородной бомбы. Используя компьютер ENIAC, он планировал повторяющиеся вычисления приближенных процессов, задействованных при ядерном синтезе. Как бы то ни было, это требовало быстрого доступа к случайно сгенерированным числам, которые возможно воспроизвести при необходимости. Однако, ENIAC имел очень ограниченную внутреннюю память, и хранить длинные случайные последовательности не представлялось возможным. Поэтому Нейман разработал алгоритм для механической симуляции перестановочного аспекта случайности таким образом: Сначала выбирается настоящее случайное число, называемое зерном. Это число можно получить при измерении шумов или взять текущее время в миллисекундах. Далее, выбранное зерно передается на вход для простых вычислений. Зерно умножается само на себя и на выход подаются средние цифры в результирующем числе. Затем, выход итерации передается в качестве зерна на вход для следующей. Этот процесс повторяется так долго, сколько нужно. Этот метод известен как метод серединных квадратов, и это только первый из большого набора генераторов псевдослучайных чисел известных сегодня. Случайность последовательности зависит только от случайности изначального зерна. Одно зерно — одна последовательность. Итак, какая же разница между случайно сгенерированной и псевдослучайно сгенерированной последовательностями? Представим каждую последовательность в виде случайного блуждания. Они выглядят схожим образом до тех пор, пока мы не ускорим представление. Псевдослучайная последовательность в конечном счете повторяется. Это происходит, когда алгоритм доходит до зерна, которое уже было использовано ранее, и круг замыкается. Длина последовательности до повторения называется периодом. Период четко ограничен длиной изначального зерна. Например, для двузначного зерна алгоритм может породить последовательность длиной до 100 элементов, прежде чем вернется к использованному ранее зерну и начнет циклически повторяться. Трехзначное зерно позволяет растянуть период до 1000 чисел до начала повторений. Четырехзначное зерно расширяет последовательность до 10 000 чисел до начала повторений. Однако, если использовать достаточно большое зерно, можно получать последовательности из триллионов и триллионов элементов до начала повторений. Ключевым же отличием является то, что генерируя последовательность псевдослучайно, из нее исключаются очень многие подпоследовательности, которые просто не могут быть включены в нее. Например, если Алиса генерирует настоящую случайную последовательность из 20 элементов, это эквивалентно произвольной выборке из стопки всех возможных последовательностей этой длины. Эта стопка содержит 26 в степени 20 страниц, что является числом астрономического масштаба. Если встать внизу стопки и посветить фонариком вверх, то человек, стоящий на вершине стопки, не увидит этого света примерно 200 миллионов лет. Сравним это с генерацией 20-элементной псевдослучайной последовательности с использованием 4-значного зерна. Это эквивалентно произвольной выборке из 10 000 возможных начальных зерен. То есть можно сгенерировать лишь 10 000 различных последовательностей, что является исчезающе малой частью всех возможных вариантов последовательностей. Меняя случайные смещения на псевдослучайные, мы сужаем пространство ключей до намного меньшего пространства зерен. Для того, чтобы псевдослучайная последовательность была неотличима от случайно сгенерированной последовательности, нужно, чтобы при помощи компьютера было невозможно перебрать все зерна для нахождения совпадения. Это приводит нас к важному отличию в компьютерной науке между тем, что возможно и тем, что возможно в разумные сроки. Мы применяем ту же логику, когда покупаем замок для велосипеда. Мы знаем, что кто угодно может просто перебрать все возможные комбинации, чтобы найти ту, которая подойдет и откроет замок. Но это займет несколько дней. Поэтому мы предполагаем, что на 8 часов он практически защищен. При использовании генераторов псевдослучайных чисел безопасность возрастает с повышением длины зерна. Самый мощный компьютер будет перебирать все возможные зерна на протяжении многих лет, поэтому мы может спокойно предполагать практическую безопасность вместо идеальной безопасности. При увеличении скорости вычислений длина зерна должна пропорционально увеличиваться. Псевдослучайность освобождает Алису и Боба от необходимости обмениваться полной случайной последовательностью смещений заранее. Вместо этого они обмениваются относительно небольшим случайным зерном и растягивают его в одинаковые подобные случайным последовательности, которые требуются. Но что случится, если они никогда не встретятся для обмена этим случайным зерном.

Яков Кузнецов/ автор статьи

Приветствую! Я являюсь руководителем данного проекта и занимаюсь его наполнением. Здесь я стараюсь собирать и публиковать максимально полный и интересный контент на темы связанные ремонтом автомобилей и подбором для них запасных частей. Уверен вы найдете для себя немало полезной информации. С уважением, Яков Кузнецов.

Понравилась статья? Поделиться с друзьями:
NEVINKA-INFO.RU
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: