Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kody_i_shifry_yuliy_Cezar_Enigma_i_Internet_2007.pdf
Скачиваний:
259
Добавлен:
29.03.2016
Размер:
2.04 Mб
Скачать

125

110110110110110110110110110...

111010011101001110100111010...

Сумма (по модулю 2) 001100101011111000010001100...

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

Нет никакой необходимости ограничиваться использованием только двух линейных рекуррент: можно использовать и три, и больше. Преимущество этого подхода в том, что чем больше рекуррент использовать, тем труднее криптоаналитику будет вскрыть систему. Недостатком же, если работать приходится вручную, является достаточно утомительный способ получения гаммы и высокая вероятность ошибок. Конечно, от этого недостатка можно избавиться, если у нас есть возможность выработать гамму с помощью механического или электронного устройства. Поэтому неудивительно, что появились машины, порождающие последовательности знаков гаммы большого периода, как двоичные (т.е. модуля 2), так и алфавитные (т.е. модуля 26), которые являются комбинациями нескольких более коротких последовательностей. Одной из таких машин была шифрмашина "Хагелин", широко использовавшаяся во время Второй мировой войны целым рядом стран; она вырабатывала последовательность знаков гаммы модуля 26. Другой пример - это "Lorenz SZ42", одна из шифрмашин, использовавшихся в Германии; она вырабатывала последовательность знаков гаммы модуля 2. О них рассказано в главах 10 и 11.

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

Иногда, если аналитические методы оказываются неприменимы, как например, в задачах корпускулярной физики или при изучении динамики звездных скоплений, в вычислениях бывает необходимо использовать случайные числа, подобные тем, что получают методом "Монте-Карло" (см. [8.3]). В таких случаях нередко применяют математические методы получения последовательностей псевдослучайных чисел. И хотя такие последовательности не считаются подходящими для использования в качестве гаммы в криптографических системах, они представляют подлинный интерес, и о них стоит рассказать.

126

Метод срединных квадратов

Хотя данный метод нельзя рекомендовать для использования в криптографии, он применялся при решении ряда других задач. Если случайным образом выбрать число и возвести его в квадрат, то последняя цифра не может быть равна 2, 3, 7 и 8. Поэтому может показаться, что, бессмысленно пытаться получить последовательность случайных чисел, задавая начальное число и последовательно возводя его в квадрат. Однако, если после возведения в квадрат "отбросить" несколько старших и младших цифр результата, то оставшиеся цифры могут оказаться распределены достаточно равновероятно, и ими можно пользоваться в качестве источника псевдослучайных чисел. Этот факт лежит в основе метода срединных квадратов, который работает следующим образом:

(1)выберем большое "случайное" целое число X, запись которого состоит из n десятичных цифр;

(2)вычислим X2, из его десятичной записи вырежем средние n цифр (приписав слева нули, если это необходимо); полученное число используется в качестве нового значения X.

Последовательность полученных таким образом n-значных целых чисел в конечном счете должна начать повторяться, поскольку возможных значений только 10n. Цикл может возникнуть, если повторится ранее встречавшееся число (не обязательно начальное значение), или если получено число, состоящее из одних нулей, после которого в последовательности могут быть только нули. Как показывает следующий пример, данным методом в любом случае следует пользоваться с осторожностью.

Пример 8.3

(1)Используя метод срединных квадратов, получить последовательность четырехзначных чисел, начиная с 3317.

(2)Повторить эксперимент для начального значения 2907.

(3)Повторить эксперимент для начального значения 3127.

(Для второго и третьего случаев понадобится калькулятор или компьютер.)

Решения

(1) X=3317, поэтому X2=11002489. Отбрасывая первую и последнюю пары цифр, получим новое значение X=0024, поэтому X2=00000576. Отбрасывая первую и последнюю пары цифр, получим новое значение X=0005. Поскольку X2=00000025, то следующее, а также все последующие значения X равны 0000.

127

(2)Этот случай не такой вырожденный. Последовательность значений X начинается с чисел 2907, 4506, 3040 и кажется вполне удовлетворительной, но тем не менее, 42-е значение оказывается равным нулю.

(3)В этом случае образуется цикл, но последовательность повторяется не с начала. Начав с X=3127, находим следующие элементы последовательности: 7781, 5439, 5827,... , но начиная с 38-го элемента и далее мы получаем 6100, 2100, 4100, 8100, 6100, 4100,... , и эти четыре числа теперь повторяются бесконечно.

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

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

Для порождения последовательности целых чисел из диапазона от 0 до (M-1) наиболее широко используется метод на основе рекуррентной формулы типа

Un = AU(n-1) + B (mod M),

где A, B и M - целые числа. A называется множителем, B - приращением, а M - модулем. Процесс начинается с выбора так называемого начального значения U0 из диапазона от 0 до (M-1). Такая рекуррента должна в конце концов повториться, и очевидно, что максимальный период не может превосходить числа M, так что M нужно выбирать "достаточно большим". Для правильно подобранных значений A, B и M большой период является достижимым. В самом лучшем случае период будет максимальным; тогда выбор начального значения не важен, так как в этом случае в последовательности встретятся все значения по модулю M, кроме одного. Данный метод лежит в основе большинства генераторов случайных чисел, применяемых в компьютерах, причем значения модуля, приращения и множителя встроены в программу, а выбор начального значения предоставляется пользователю. Чтобы обеспечить еще лучшие результаты, можно использовать несколько таких генераторов, комбинируя каким-либо образом их выходные последовательности. Другое усовершенствование может состоять в том, чтобы использовать числа не в порядке их получения, а "перетасовать" их каким-нибудь способом, дабы уменьшить риск корреляции между последовательными значениями. Таким способом можно получать длинные "псевдослучайные" последовательности с хорошими свойствами. В таблице 8.1 приведены некоторые из известных "хороших" вариантов выбора чисел A, B и M.

128

Таблица 8.1

A

B

M

106

1283

6075

171

11213

53125

141

28411

134456

421

54773

259200

 

 

 

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

Пример 8.4 Используя рекурренту

Un = 3U(n-1) + 4 (mod 17),

получить последовательность целых чисел, начиная с

(1)U0 = 5,

(2)U0 = 15.

Решение

(1) Поскольку U0 = 5, то U1 = 3 5+4=19 2(mod 17), и т.д. Получается последовательность длины 16:

5, 2, 10, 0, 4, 16, 1, 7, 8, 11, 3, 13, 9, 14, 12, 6, 5, 2, 10, ... .

Этот генератор, хотя и скромный с виду, имеет максимально возможный цикл, в данном случае 16. Дополнительные комментарии можно найти в приложении M13.

(2) U0 = 15 дает нам U1 = 3 15+4=49 15(mod 17), и период равен единице! Это объясняет, почему число 15 не встречается в полученном выше цикле длины 16.

Задача 8.2 Проверить, что последовательность, полученная методом срединных

квадратов для четырехзначных чисел, начиная с X=7789, вырождается в цикл из четырех чисел.

Задача 8.3

Каковы будут для U0 = 1 длины циклов следующих рекуррент:

(1)Un = 3U(n-1) + 7 (mod 19),

(2)Un = 4U(n-1) + 7 (mod 19)?

129

При использовании генераторов псевдослучайных чисел этого типа получаемые значения обычно делят на значение модуля M, чтобы получить в результате действительное число от нуля до единицы. Поскольку генератор вырабатывает целые числа в диапазоне от 0 до (M-1), то среди получаемых действительных чисел может встретиться число 0.0, но никогда не встретится число 1.0. Это небольшое ограничение, скорее всего, не очень важно, и для правильно подобранных значений A, B и M получаемые действительные числа будут равномерно распределены в диапазоне от 0 до 1. Более подробно этот вопрос освещен в [8.4] и в приложении M13.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]