- •Предисловие
- •Глава 1. Введение
- •Некоторые аспекты безопасности связи
- •Шифр Юлия Цезаря
- •Несколько основных определений
- •Коды и шифры
- •Оценка стойкости системы шифрования
- •Коды, обнаруживающие и исправляющие ошибки
- •Другие методы сокрытия содержания сообщений
- •Модульная арифметика
- •Модульное сложение и вычитание букв
- •Заключение
- •Глава 2. От Юлия Цезаря до простой замены
- •Шифры Юлия Цезаря и их вскрытие
- •Шифры простой замены
- •Вскрытие шифра простой замены
- •Частоты встречаемости букв в других языках, кроме английского
- •Сколько знаков необходимо для дешифрования простой замены?
- •Глава 3. Многоалфавитные системы
- •Усиление системы Юлия Цезаря: шифры Вижанэра
- •Вскрытие шифра Вижанэра
- •Индикаторы
- •Одноключевые сообщения
- •Распознавание одноключевых сообщений
- •Какой объем текста необходим для дешифрования шифра Вижанэра?
- •Цилиндр Джефферсона
- •Глава 4. Шифры-головоломки
- •Перестановки
- •Простая перестановка
- •Двойная перестановка
- •Другие виды перестановок
- •Регулярные перестановочные таблицы
- •Нерегулярные перестановочные таблицы
- •Оценка стойкости шифров перестановки
- •Общая концепция двойного шифрования
- •Глава 5. Двухбуквенные шифры
- •Замена "монограф-диграф"
- •МДПМ-шифры
- •Система "диграф-диграф"
- •Шифр Плейфера*)
- •Расшифрование в системе Плейфера
- •Криптоаналитические аспекты системы Плейфера
- •Двойной шифр Плейфера
- •Глава 6. Коды
- •Характеристики кодов
- •Одночастевые и двухчастевые коды
- •Код плюс аддитивное шифрование
- •Глава 7. Шифры для шпионов
- •Шифры-решетки
- •Книжные шифры
- •Использование книжного шифра
- •Частоты встречаемости букв в книжных шифрах
- •Вскрытие книжного шифра
- •Индикаторы
- •Катастрофические ошибки при использовании книжного шифра
- •Шифры "агента Гарбо"
- •Первый шифр "агента Гарбо"
- •Второй шифр "агента Гарбо"
- •Одноразовый блокнот
- •Глава 8. Получение случайных чисел и букв
- •Случайные последовательности
- •Получение случайных последовательностей
- •Бросание монеты
- •Бросание костей
- •Извлечение из урны (по типу лотереи)
- •Космические лучи
- •Шум от усилителей
- •Псевдослучайные последовательности
- •Линейные рекурренты
- •Использование последовательности двоичных знаков гаммы для шифрования
- •Двоичные линейные последовательности как генераторы гаммы
- •Криптоанализ линейной рекурренты
- •Повышение стойкости двоичной гаммы
- •Генераторы псевдослучайных чисел
- •Метод срединных квадратов
- •Линейные конгруэнтные генераторы
- •Глава 9. Шифрмашина "Энигма"
- •Историческая справка
- •Первая "Энигма"
- •Шифрование с использованием контактных колес
- •Шифрование в "Энигме"
- •Коммутатор "Энигмы"
- •Ахиллесова пята "Энигмы"
- •Цепочки индикаторов в "Энигме"
- •Выравнивание цепочек
- •Идентификация колеса R1 и его угловой установки
- •Двойное шифрование в "Энигме"
- •"Энигма" Абвера
- •Глава 10. Шифрмашина "Хагелин"
- •Историческая справка
- •Конструкция шифрмашины «Хагелин»
- •Шифрование при помощи шифрмашины "Хагелин"
- •Выбор установок барабана в шифрмашине "Хагелин"
- •Теоретический объем перебора для шифрмашины "Хагелин"
- •Вскрытие установок "Хагелина" по отрезку гаммы
- •Дополнительные возможности шифрмашины "Хагелин"
- •Смещение
- •Определение смещения по шифрованному тексту
- •Перекрытия
- •Вскрытие шифрмашины "Хагелин" только по шифрованному тексту
- •Глава 11. После "Энигмы"
- •SZ42 - предтеча электронных машин
- •Описание шифрмашины SZ42
- •Шифрование в машине SZ42
- •Вскрытие шифрмашины SZ42 и определение ее угловых установок
- •Модификации шифрмашины SZ42
- •Глава 12. Криптография с открытым ключом
- •Историческая справка
- •Вопросы безопасности
- •Защита программ и данных
- •Шифрование программ, данных и сообщений
- •Задача распределения ключей
- •Система ключевого обмена Диффи-Хеллмана
- •Стойкость системы Диффи-Хеллмана
- •Глава 13. Шифрование и Интернет
- •Обобщение шифра простой замены
- •Факторизация больших целых чисел
- •Стандартный метод факторизации
- •Малая теорема Ферма
- •Теорема Ферма-Эйлера (для случая системы RSA)
- •Ключи зашифрования и расшифрования в системе RSA
- •Процессы зашифрования и расшифрования в системе RSA
- •Каким образом хозяин ключей отвечает корреспондентам?
- •Американский Стандарт Шифрования Данных (DES)*)
- •Общие сведения
- •Процедура зашифрования
- •Процедура расшифрования
- •Стойкость DES-алгоритма
- •Зацепление
- •Реализации DES-алгоритма
- •Совместное использование алгоритмов RSA и DES
- •Полезное замечание
- •После DES-алгоритма
- •Проверка подлинности сообщения и удостоверение подлинности подписи
- •Криптография эллиптической кривой
- •Приложение. Математические вопросы
- •Глава 2
- •М1. Совпадения знаков в алфавитах замены
- •М2. Снижение стойкости при использовании взаимно-обратных алфавитов
- •M3. Парадокс дней рождения
- •Глава 3
- •М4. Евклидово доказательство бесконечности множества простых чисел
- •Глава 6
- •М5. Последовательность чисел Фибоначчи
- •Глава 7
- •М6. Частота встречаемости букв для книжного шифра
- •М7. Одноразовый блокнот дешифровать невозможно
- •Глава 8
- •М8. Частота появления случайных чисел на странице
- •М9. Комбинирование двух последовательностей двоичных знаков гаммы, имеющих отклонения
- •М10. Последовательность типа Фибоначчи
- •М11. Двоичные линейные рекурренты
- •M12. Восстановление двоичной линейной рекурренты по отрезку гаммы
- •М13. Получение псевдослучайных чисел
- •Глава 9
- •М14. Распайка колёс шифрмашины "Энигма"
- •М15. Число возможных отражателей шифрмашины "Энигма"
- •М16. Вероятность одноключевых сообщений для "Энигмы"
- •М17. Среднее число индикаторов, необходимое для построения полных цепочек
- •Глава 10
- •М18. Число возможных барабанов шифрмашины "Хагелин"
- •М19. Максимальная кратность значения зацепления, которая может встретиться при вычислении разности гаммы шифрмашины "Хагелин"
- •M20. Определение смещения шифрмашины "Хагелин" с помощью коэффициента корреляции
- •Глава 13
- •M21. (Порядок роста количества простых чисел)
- •M22. Вычисление остатка с использованием модульной арифметики
- •М23. Доказательство теоремы Ферма-Эйлера
- •М24. Нахождение чисел, "предположительно" являющихся простыми
- •M25. Алгоритм Евклида
- •М26. Эффективность возведения в степень методом последовательного возведения в квадрат
- •М27. Число ложных ответов при дешифровании DES-алгоритма методом "встречного поиска "
- •М28. Криптография эллиптической кривой
- •Решения задач
- •Глава 2
- •Глава 3
- •Глава 4
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10
- •Глава 11
- •Глава 13
- •Литература
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.