Меню

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

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

Рубрика: Технические науки

Дата публикации: 19.12.2015 2015-12-19

Статья просмотрена: 4123 раза

Библиографическое описание:

Подорожный, И. В. Обзор аппаратных генераторов случайных чисел / И. В. Подорожный. — Текст : непосредственный // Молодой ученый. — 2016. — № 1 (105). — С. 190-194. — URL: https://moluch.ru/archive/105/24688/ (дата обращения: 10.09.2021).

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

Ключевые слова: генератор случайных чисел, квантовый генератор, тепловой шум.

Генераторы, использующие физические квантовые случайные процессы

Фазовый квантовый шум в лазерном луче

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

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

Рис. 1. Схема ГСЧ, построенного на базе фазового квантового шума в лазерном луче

Подобные квантовые генераторы имеют высокую скорость выходного потока — до 10–16 Мбит/с, — при которой не наблюдается никаких корреляций и выполняются все статистические тесты. [2]

Матрица фотокамеры

Большинство источников света выпускают фотоны в совершенно случайные моменты времени и количество фотонов, выпущенных за единицу времени будет различаться на величину, которая является полностью случайной. Этот факт лег в основу ГСЧ, построенного на базе светочувствительной КМОП-матрицы обычной фотокамеры группой ученых из Женевского университета во главе с Бруно Сангинетти.

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

Рис. 2. Схема ГСЧ, построенного на базе фотоматрицы

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

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

Генераторы, использующие другие физические случайные процессы

Тепловой шум

Тепловой шум, также называемый шумом Джонсона, генерируется всеми пассивными резистивными элементами электрических цепей. Причина его появления — случайное броуновское движение электронов в резистивной среде. Тепловой шум увеличивается с ростом температуры и сопротивления и часто оказывается самой существенной составляющей шума в прецизионных полупроводниковых преобразователях данных. [4]

Одним из успешных примеров построения ГСЧ на базе теплового шума является генератор, разработанный компанией Intel в 1999 году и используемый в чипсетах Intel 800 серии.

ГСЧ Intel использует последовательности случайных чисел, получаемые с двух тактовых генераторов, частота работы одного из которых превышает частоту другого в 100 раз. Тепловой шум с источника (полупроводникового резистора) усиливается и используется для управления частотой колебаний медленного генератора.

Рис. 3. Временная диаграмма ГСЧ Intel

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

Среди недостатков данного генератора случайных чисел можно выделить большое энергопотребление (из-за кольцевого генератора, используемого для усиления теплового шума) и относительно небольшую для современных потребностей скорость генерации (порядка 75 Кбит/с после пост-обработки). [5]

Цифровая схема с неопределенным состоянием

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

Читайте также:  Бензиновый генератор fubag bs 3500 duplex

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

Рис. 4. Современный генератор Intel

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

Данная разработка позволила избавиться от неудобств аналоговых компонентов предыдущего варианта ГСЧ, значительно уменьшить энергопотребление и увеличить скорость генерации более чем в 30 тысяч раз. [6]

Лавинный шум (шум лавинного умножения)

Источниками лавинного шума являются PN-переходы, работающие в режиме обратного пробоя, как это происходит в стабилитронах (зенеровских диодах). Ток, генерируемый во время лавинного пробоя, состоит из случайно распределённых шумовых выбросов, проходящих через обратно смещённый переход. Подобно дробовому шуму, для генерации лавинного шума требуется наличие тока, но обычно он гораздо интенсивнее. [4]

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

Случайные числа с подобных ГСЧ проходят все статистические тесты, однако скорость их генерации крайне мала — менее 10 Кбит/с. [7]

Фазовое дрожание в кольцевых генераторах

Фазовое дрожание цифрового сигнала данных (джиттер от англ. jitter) — нежелательные фазовые и/или частотные случайные отклонения передаваемого сигнала. Возникают вследствие нестабильности задающего генератора, изменений параметров линии передачи во времени и различной скорости распространения частотных составляющих одного и того же сигнала. Поскольку фазовое дрожание зависит от различных факторов, некоторые из которых полностью случайны, оно может быть использовано как источник случайных чисел. [8]

Рис. 5. ГСЧ, построенный на кольцевых генераторах

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

Среди минусов такого ГСЧ можно выделить относительно небольшую скорость генерации и большое энергопотребление.

В статье были рассмотрены основные способы построения аппаратных генераторов случайных чисел. Среди них можно выделить один из самых современных и прогрессивных способов — генератор случайных чисел на базе неопределенных состояний, разработанный инженерами компании Intel и обладающий одной из самых высоких скоростей выходного потока (до 3 Гбит/с) и низким энергопотреблением.

Источник

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

Введение

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

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

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

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

Читайте также:  Регулятор для генератора jhaem

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


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

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

Источники энтропии используются для накопления энтропии с последующим получением из неё начального значения (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 и множество других, чтобы определить критостойкость алгоритма.

Источник

Adblock
detector