Опубликован: 19.01.2010 | Уровень: специалист | Доступ: платный
Дополнительный материал 11:

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

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

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

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

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

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

увеличить изображение
Рис. K.1. Истинный генератор случайных чисел и псевдослучайный генератор чисел

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

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

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

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

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

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

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

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

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

Рис. K.2. Линейный конгруэнтный генератор псевдослучайных чисел

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

Пример K.1

Предположим 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, рекомендуют использовать 7k, где k - целое число, взаимно-простое с ( M31 - 1 ). Некоторые рекомендованные значения для k - это 5 и 13. Это означает, что ( a = 75 ) или ( a = 713 ).
  3. Вторая рекомендация: для эффективного использования компьютера значение второго коэффициента b должно быть нулевым.

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

xi+1 = axi mod n, где n = 231 - 1 и a = 75 или a = 713

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

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

Чтобы получить менее предсказуемую псевдослучайную последовательность, был введен генератор квадратичных вычетов (см. "A. ASCII" ), xi+1 = xi2 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 = r2 mod n .
  5. Генерировать последовательность xi+1 = xi2 mod n.
  6. Взять самый младший бит сгенерированного случайного целого числа (LSB - Least Significant Bit) как случайный бит.
Blum Blum Shub (BBS) генератор псевдослучайных чисел

увеличить изображение
Рис. K.3. Blum Blum Shub (BBS) генератор псевдослучайных чисел

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

xi = x02^imod[(p-1)(q-1)]

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

Безопасность BBS зависит от трудности разложения на множители n

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

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

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

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

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

увеличить изображение
Рис. K.4. ANSI X9.17 генератор псевдослучайных чисел

На рис. 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-байтовой истинно случайной переменной.

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

увеличить изображение
Рис. K.5. PGP-генератор псевдослучайных чисел
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Константин Леденев
Константин Леденев
Россия
Олег Равков
Олег Равков
Россия