Алгоритмы симметричного шифрования

       

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


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



M Модуль (основание системы) m > 0
А Множитель 0 ? a < m
С Приращение 0 ? с < m
Х0 Начальное значение или зерно (seed) 0 ? Х0 < m

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

Xn+1 = (a Xn + c) mod m

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

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

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

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

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

    Xn+1 = (a Xn) mod (231 - 1)

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


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

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

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

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

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


    Содержание раздела