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

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

Последовательность случайных чисел {X n } получается с помощью следующего итерационного равенства:

X n +1 = (a X n + c) mod m

Если m, а и с являются целыми, то создается последовательность целых чисел в диапазоне 0 X n < m.

Выбор значений для а, с и m является критичным для разработки хорошего генератора случайных чисел.

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

Существует три критерия, используемые при выборе генератора случайных чисел:

1. Функция должна создавать полный период, т.е. все числа между 0 и m до того, как создаваемые числа начнут повторяться.

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

3. Функция должна эффективно реализовываться на 32-битных процессорах.

Значения а, с и m должны быть выбраны таким образом, чтобы эти три критерия выполнялись. В соответствии с первым критерием можно показать, что если m является простым и с = 0, то при определенном значении а период, создаваемый функцией, будет равен m-1. Для 32-битной арифметики соответствующее простое значение m = 2 31 - 1. Таким образом, функция создания псевдослучайных чисел имеет вид:

X n +1 = (a X n) mod (2 31 - 1)

Только небольшое число значений а удовлетворяет всем трем критериям. Одно из таких значений есть а = 7 5 = 16807, которое использовалось в семействе компьютеров IBM 360. Этот генератор широко применяется и прошел более тысячи тестов, больше, чем все другие генераторы псевдослучайных чисел.

Сила алгоритма линейного конгруента в том, что если сомножитель и модуль (основание) соответствующим образом подобраны, то результирующая последовательность чисел будет статистически неотличима от последовательности, являющейся случайной из набора 1, 2, ..., m-1. Но не может быть случайности в последовательности, полученной с использованием алгоритма, независимо от выбора начального значения Х 0 . Если значение выбрано, то оставшиеся числа в последовательности будут предопределены. Это всегда учитывается при криптоанализе.



Если противник знает, что используется алгоритм линейного конгруента, и если известны его параметры (а = 7 5 , с = 0, m = 2 31 - 1), то, если раскрыто одно число, вся последовательность чисел становится известна. Даже если противник знает только, что используется алгоритм линейного конгруента, знания небольшой части последовательности достаточно для определения параметров алгоритма и всех последующих чисел. Предположим, что противник может определить значения Х 0 , Х 1 , Х 2 , Х 3 . Тогда:

Х 1 = (а Х 0 + с) mod mХ 2 = (а Х 1 + с) mod mХ 3 = (а Х 2 + с) mod m

Эти равенства позволяют найти а, с и m.

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

(англ.) русск. : «генерация случайных чисел слишком важна, чтобы оставлять её на волю случая ».

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

    1 / 5

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

    ✪ Генератор псевдослучайных чисел | Криптография | Программирование (часть 8)

    ✪ Уроки C++ с нуля / Урок #5 - Генератор чисел + строки в C++

    ✪ rand. srand. rand задать диапазон. srand time null. Генератора случайных чисел. randomize. Урок #29.

    ✪ Случайные числа, линейный конгруэнтный метод - LNG (Linear Congruential Generator)

    Субтитры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разновидностью ГПСЧ являются ГПСБ (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 - ключи, используемые на каждой стадии.

1 Ri = EDEK1,K2 [ EDEK1,K2 [ DTi] Vi ] 2 Vi+1 = EDEK1,K2 [ EDEK1,K2 [ DTi] Ri]

Схема включает использование 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) в поточных режимах.

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

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

Конструктивний підхід к определению случайной последовательности предложили Блюм, Голдвассер, Микалли и Яо. Их определение считает последовательность случайной, если не существует полиномиального (вероятностного) алгоритма, который сможет отличить ее от чисто случайной. Такая последовательность называется полиномиально неразличимой от случайной илипсевдослучайной .

Этот подход позволяет использовать для формирования псевдослучайных последовательностей (ПСП) детерминированные алгоритмы, реализуемые конечными автоматами. Хотя с математической точки зрения такие последовательности не случайны, так как они полностью определяются начальным заполнением, тем не менее, их практическое использование не дает никаких преимуществ криптоаналитику благодаря “неразличимости” со случайными. Поскольку этот подход представляется более конструктивным, остановимся на нем детальнее.

Случайные последовательности в смысле последнего определения также называют “случайными для всех практических применений”. Генераторы таких последовательностей, называют криптографически надежными (cryptographically strong ) или криптографически безопасными (cryptographically secure ). Псевдослучайность в данном случае есть не только свойство последовательности (или генератора), но и свойство наблюдателя, а точнее его вычислительных возможностей.

Для ПСП доказаны два важных утверждения:

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

2. Криптографически сильные генераторы существуют в том и только в том случае, если существуют легко вычислимые функции, но вычислительно сложно обратимые (односторонние функции - one-way functions ). В этом случае каждому генератору ПСП можно поставить во взаимнооднозначное соответствие некоторую одностороннюю функцию, которая зависит от определенных параметров.

Наиболее простым датчиком псевдослучайных чисел является линейный конгруэнтный генератор (ЛКГ), который описывается рекуррентным уравнением вида X n = (aX n -1 +b ) mod N , где X 0 – случайное начальное значение, а – множитель, b – приращение, N – модуль.

Период выходной последовательности такого генератора не превышает N , максимальное значение достигается при правильном выборе параметров a,b, N , а именно, когда

· числа N и b взаимнопросты: НОД(N,b)=1 );

· a-1 кратно любому простому p , делящему N ;

· a-1 кратно 4 , если N кратно 4 .

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

Для реализации ЛКГ на персональных компьютерах с учетом их разрядной сетки нередко используется модуль N=2 31 -1»2.14×10 9 . При этом наиболее качественные статистические свойства ПСП достигаются для константы a=397204094.

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

Недостатком ЛКГ в плане их использования для создания поточных шифров является предсказуемость выходных последовательностей. Эффективные атаки на ЛКГ были предложены Joan Boyar , ей принадлежат методы атак на квадратичные ‑ X n =(aX n -1 2 +bX n -1 +c)modN и кубические ‑ X n =(aX n -1 3 +bX n -1 2 +cX n -1 +d)modN генераторы.

Другие исследователи обобщили результаты работ Boyar на случай общего полиномиального конгруэнтного генератора. Stern и Boyar показали, как взломать ЛКГ, даже если известна не вся последовательность.

Wishmann и Hill , а позже Pierre L’Ecuger изучили комбинации ЛКГ. Результаты не являются более стойкими криптографически, но имеют большие периоды и лучше ведут себя на некоторых критериях случайности.

Регистры сдвига с линейной обратной связью (Linear Feedback Shift Registers - LFSR ) включают собственно регистр сдвига и схему вычисления функции обратной связи (tap sequence ) – см. рис. 12:

Поток бит
n
∙∙∙
2
1

Рис. 2. Регистр сдвига с линейной обратной связью (LFSR )

На схеме содержимое регистра ‑ последовательность бит – сдвигается с приходом тактового импульса (clock pulse ) на один разряд вправо. Бит самого младшего разряда считается выходом LFSR в данном такте работы. Значение самого старшего разряда при этом является результатом сложения по mod2 (функция XOR) разрядов обратной связи.

Теоретически, n -битный LFSR может сгенерировать псевдослучайную последовательность с периодом 2 n -1 бит, такие LFSR называются регистрами максимального периода. Для этого регистр сдвига должен побывать во всех 2 n -1 внутренних состояниях (2 n -1 , т.к. нулевое заполнение регистр сдвига, вызовет бесконечную последовательность нулей).

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

Примитивный полином степени n – это неприводимый полином, который делит ,но не делит x d +1 для любого d : (2 n-1 d)

Теорема (без доказательства): Для того, чтобы LFSR имел максимальный период, необходимо и достаточно, чтобы полином, образованный из элементов обратной связи (tap sequence ) плюс единица был примитивным полиномом по модулю 2. (на самом деле, примитивный полином – это генератор в данном поле).

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

Например, примитивным полиномом является x 32 x 7 x 5 x 3 x 2 x1 . Запись (32,7,5,3,2,1,0 ) означает, что, взяв 32-битный регистр сдвига и генерируя бит обратной связи путем сложения по mod2 7-го, 5-го, 3-го, 2-го и 1-го бита, мы получим LFSR максимальной длины (с 2 32 -1 состояниями).

Заметим, если р(х) – примитивный полином, то x n ×p(1/x) – также примитивный.

Например, если полином (a,b,0) примитивный, то (a,a-b,0) – примитивный. Если полином (a,b,c,d,0) примитивный, то и (a,a-d,a-c,a-b,0) – примитивный и т.д.

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

LFSR – удобны для технической реализации, но имеют неприятные свойства. Последовательные биты линейно зависимы, что делает их бесполезными для шифрования. Даже если схема обратной связи неизвестна, то достаточно 2n выходных бит, чтобы определить ее.

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

Существует еще ряд генераторов ПСП (в т.ч. генераторы чисел Фибоначчи), которые по ряду причин не нашли широкого применения в криптографических системах. Наиболее эффективные решения были получены на основе составных генераторов.

Идея построения составного генератора базируется на том факте, что комбинация двух и более простых генераторов ПСП, в случае правильного выбора объединяющей функции (в т.ч. mod 2 , mod 2 32 -1 и др.), дает генератор с улучшенными свойствами случайности, и, как следствие, с повышенной криптографической стойкостью.

В случае создания криптографически стойкого генератора ПСП просто решается вопрос создания потоковых шифров. Выход таких ПСП неотличим (точнее, должен быть неотличим) от РРСП. Два генератора всегда могут быть синхронно запущены из одного вектора начального состояния, который намного короче передаваемого сообщения, что выгодно отличает эту схему от шифра Вернама.

Известно 4 подхода к конструированию соответствующих генераторов:

1) системно-теоретический подход;

2) сложностно-теоретический подход;

3) информационно-теоретический подход;

4) рандомизированный подход.

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

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

На основе такого подхода Рюппелем сформулирован следующий набор критериев для потоковых шифров:

1. Большой период выходной последовательности, отсутствие повторений;

2. Высокая линейная сложность, как характеристика нашего генератора через регистр LFSR минимальной длины, который может сгенерировать такой же выход;

3. Неотличимость от РРСП по статистическим критериям;

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

5. Рассеивание: избыточность во всех подструктурах алгоритма работы генератора должна рассеиваться;

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

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

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

Примером удачного построения составного генератора с точки зрения повышения линейной сложности является каскад Голмана (рис. 3).

Каскад Голмана включает несколько регистров LFSR , причем тактирование каждого следующего LSFR управляется предыдущим так, что изменение состояния LFSR -(k+1) в момент времени t происходит, если в предыдущем такте t-1 выход LFSR -k равняется 1, и LFSR -(k+1) не меняет свое состояние в противном случае.

Если все LFSR – длины l, то линейная сложность системы с n регистрами равна l ×(2 l -1) n-1 .

X(t)
LFSR-2
LFSR-3
Такт

Рис. 4. Чередующийся старт-стопный генератор

У этого генератора большой период и большая линейная сложность.

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

Однонаправленную функцию f (x ): D→R легко вычислить для всех x Î D , но очень трудно инвертировать для почти всех значений из R . Иначе, если V – вычислительная сложность получения f (x ), а V * – вычислительная сложность нахождения f -1 (x ), то имеет место неравенство V * >>V. Нетрудно видеть, что кандидатом на однонаправленную функцию может быть степенная функция в некотором конечном поле f (x )=a x , где a,xÎGF(q) – поле Галуа из q элементов.

Нетрудно видеть, что умножение, за счет свойства ассоциативности, можно выполнить за меньшее, чем число x-1 шагов. Например, a 9 =a×((a 2) 2) 2 , что позволяет вычислить искомую степень вместо восьми за четыре шага (вначале a 2 =a × a , затем a 4 =a 2 a 2 , a 8 =a 4 a 4 и, наконец, a 9 =a 8 a ).

Обратная операция – нахождение показателя степени по значению степенной функции (логарифмирование) ‑ в конечном поле пока не может быть решена лучше, чем с помощью оптимизированных методов перебора возможных вариантов. В случае большого размера поля (порядка 2 1024 )эта задача при современном развитии компьютерной техники вычислительно неразрешима.

Примером соответствующего генератора может алгоритм RSA . Пусть параметр N=p×q , где p,q – простые числа, начальное значение генератора x 0 N, e: НОД(e,(p-1)×(q-1) )=1.

x i+1 =x e i mod N

Результат генератора – наименьший значимый бит x i+1 . Стойкость этого генератора эквивалентна стойкости RSA . Если N достаточно большое, то генератор обеспечивает практическую стойкость.

Другой пример генератора, построенного на сложностном подходе, предложен Blum , Blum и Shub (BBS ). На данный момент это один из простых и эффективных алгоритмов. Математическая теория этого генератора – квадратичные вычеты по модулю n .

Выберем два больших простых числа p и q, дающих при делении на 4 остаток 3. Произведение n p q назовем числом Блюма. Выберем х : НОД(n,x )=1. Найдем начальное значение генератора: x 0 =x 2 mod n .

Теперь i -ым псевдослучайным числом является наименьший значимый бит x i , где x i =x 2 i -2 mod n .

Заметим, что для получения i- го бита, не требуется вычисления (i-1 ) состояния. Если мы знаем p,q, то мы можем его вычислить сразу: b i есть наименьшее значение бит:

Это свойство позволяет использовать BBS- генератор для работы с файлами произвольного доступа (random-access ).

Число n можно распространять свободно, для того чтобы каждый абонент сети смог самостоятельно сгенерировать необходимые биты. При этом если криптоаналитик не сможет разложить на простые множители число n , он не сможет предсказать следующий бит, даже в вероятностном смысле, например, «с вероятностью 51% следующий бит равен 1».

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

Следующие два подхода информационно-теоретический и рандомизированный не нашли широкого практического применения.

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

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

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

Ueli Maurer описал такую схему. Вероятность вскрытия такой криптосистемы зависит от объема памяти, доступного криптоаналитику (но не зависит от его вычислительных ресурсов).

Чтобы эта схема приобрела практический вид, требуется около 100 битовых последовательностей по 10 20 бит каждая. Оцифровка поверхности Луны – один из способов получения такого количества бит.

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

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

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

Время дня;

Загруженность процессора;

Время прибытия сетевых пакетов и т.п.

Проблема не в том, чтобы найти источники случайности, но в том, чтобы сохранить случайность при измерениях.

Например, это можно делать так: найдем событие, случающееся регулярно, но случайно (шум превышает некоторый порог). Измерим время между первым событием и вторым, затем между вторым и третьим. Если t 1,2 t 2,3 , то полагаем выход генератора равным 1; если t 1,2 < t 2,3 , то выход равен 0. Далее процесс продолжим.

Американский национальный институт стандартов (ANSI) разработал метод генерации 64-битных ключей при помощи DES-алгоритма (ANSI X9.17). Его основное назначение состоит в получении большого количества ключей для многократных сеансов связи. Вместо DES-алгоритма можно использовать любой другой стойкий алгоритм шифрования.

Пусть функция Е K (Р) осуществляет шифрование Р по DES-алгоритму на заранее заготовленном ключе К, который используется только для генерации секретных ключей. Пусть далее V 0 является начальным 64-битным значением, которое держится в тайне от противника, а Т i представляет собой отметку даты-времени, когда был сгенерирован i-й ключ. Тогда очередной случайный ключ R i вычисляется с помощью преобразования:

R i = Е К (Е К (Т i) Å V i)

Чтобы получить очередное значение V i , надо вычислить

V i = Е К (Е К (Т i) Å R i)

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

1) Сложением по mod 2 двух независимых последовательностей:если случайный бит смещен к 0 на величину ε , то вероятность появления 0 может быть записана как P(0)=0.5+ε .

Сложение по mod 2: двух одинаково распределенных независимых бит даст: P(0) =(0.5 +ε) 2 +(0.5-ε) 2 =0.5 +2×ε 2 , сложением четырех бит получим: P (0)=0.5+8 ε 4 и т.д. Процесс сходится к равновероятному распределению 0 и 1.

2) Пусть распределение единиц и нулей в последовательности есть величины p и q соответственно. Воспользуемся методом кодирования: рассмотрим два бита:

Если это одинаковые биты, то отбросим их и рассмотрим следующую пару;

Если биты различны, то в качестве выходного значения возьмем первый бит.

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

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

Факт наличия смещения у генератора случайных чисел, вообще говоря, не означает его непригодность. Например, пусть для генерации 112-битного ключа для алгоритма «тройной» DES (Triple DES ) используется генератор со смещением к нулю: P{x t =0}=0.55, Р{x t =1}=0.45 (энтропия Н= 0.99277 на один бит ключа по сравнению с 1 для идеального генератора).

В этом случае нарушитель может оптимизировать процедуру тотального перебора ключей за счет поиска ключа начиная с наиболее вероятного значения (00…0 ) и заканчивая наименее вероятным (11…1 ). Вследствие наличия смещения, можно ожидать нахождения ключа в среднем за 2 109 попыток. Если бы смещения не было, то потребовалось бы 2 111 попыток. Выигрыш есть, но несущественный.




Top