- •Предисловие
- •Глава 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
- •Литература
202
числа, стоящие в правом столбце напротив значений n=0,4,6 и 11:
(63)2129 63 523 1500 2822.
Поскольку
63 523=32949=10 3127+1679 1679(mod 3127),
и
1500 2822=4233000=1353 3127+2169 2169(mod 3127),
и наконец,
1679 2169=3641751=1164 3127+1923 1923(mod 3127),
то в результате расшифрования блока 0063 получается значение 1923. Оно преобразуется в пару букв TX, которая на самом деле является четвертым диграфом исходного сообщения.
Эти вычисления, хотя они и утомительны, могут быть выполнены на карманном калькуляторе. Но в реальных приложениях системы RSA используются числа, гораздо большие по порядку величин, и здесь не обойтись без компьютера со специальным программным обеспечением для обработки подобных чисел. И даже с использованием компьютера жизненно необходимым остается применение техники "последовательного возведения в квадрат" ради сокращения числа операций умножения и деления. В типичном приложении системы RSA, где порядок модуля, скорее всего, не меньше 10100, значение ключа зашифрования или расшифрования легко может оказаться близким к 1050. Поскольку числовые блоки придется возводить в эту степень, то о подсчете "в лоб" речи идти не может. С другой стороны, применяя последовательное возведение в квадрат, мы сокращаем число операций умножения и деления до нескольких сотен, что по времени займет не больше нескольких миллисекунд (см. приложение M26).
Каким образом хозяин ключей отвечает корреспондентам?
Как может обладатель ключа расшифрования ответить на письмо, зашифрованное с помощью предоставленного им открытого ключа по системе RSA? Ответ очень прост: зашифровать свой ответ на (секретном) ключе расшифрования d; получатель при этом расшифрует пришедшее ему шифрованное сообщение на (открытом) ключе зашифрования. При этом
203
получится исходное открытое сообщение, потому что, как уже замечено ранее, в системе RSA ключи зашифрования и расшифрования симметричны:
каждый из них является обратным для другого.
Алгоритм RSA является частным случаем системы шифрования с открытым ключом, поскольку любой желающий получать шифрованные сообщения в какой-либо форме публикует свой ключ, который является общедоступным, подобно телефонному справочнику. Это - ключ зашифрования. И только у хозяина этого ключа есть соответствующий ключ расшифрования. Поэтому, хотя любой может послать ему шифрованное сообщение, только он в состоянии расшифровать их. Для того, чтобы это было так, надо, чтобы для данного метода шифрования было невозможно за приемлемое время найти ключ расшифрования, даже если известны и сам метод шифрования, и ключ зашифрования. В случае алгоритма RSA стойкость держится на том, что перемножить два больших числа просто, но, если дано только произведение этих двух больших чисел, то найти их крайне трудно. Функция, значение которой просто вычислить, но очень трудно найти ее инверсию (как в случае алгоритма RSA), называется однонаправленной функцией. Еще один пример такой функции - это задача дискретного логарифмирования, с которой мы уже встречались при анализе системы Диффи-Хеллмана.
Задача 13.1
Существует вероятность, что при шифровании по системе RSA строка перейдет сама в себя. Наиболее очевидными случаями для двухзначных строк из вышеприведенного примера являются строки AA и AB, численные представления которых равны соответственно 0000 и 0001. Поскольку эти числа при возведении в любую степень не изменяются, то они при шифровании переходят сами в себя независимо от значений ключа зашифрования и модуля. Существуют и другие случаи: проверьте, что
для значения модуля 3127 и ключа зашифрования 17 числа 0530 и 0531 при зашифровании по алгоритму RSA оба переходят в себя.
(Могут возразить, что числам 0530 и 0531 не отвечают никакие пары букв; однако, заметим, что числа 0825 и 2302 - числовые представления пар IZ и XC - также переходят сами в себя.)
Тем не менее, необходимо сказать, что для "реального" приложения системы RSA вероятность того, что блок текста перейдет при шифровании сам в себя, будет пренебрежимо мала
204
Американский Стандарт Шифрования Данных (DES)*)
В1973 году правительство США в ответ на неоднократные обращения со стороны промышленности и различных организаций дало своему министерству торговли поручение разработать единые федеральные стандарты автоматической обработки данных. Внутри министерства эта задача была возложена на Национальное Бюро Стандартов (НБС). Одной из задач, рассматривавшихся в HБС, была разработка стандарта шифрования данных. Вместо того, чтобы просто заняться самостоятельной разработкой такого алгоритма, НБС в мае 1973 года публично пригласило заинтересованные стороны присылать свои предложения по разработке "стандарта шифрования данных".
Вопубликованной НБС спецификации на стандарт шифрования данных содержались требования, которым должен удовлетворять любой предложенный алгоритм: он должен обеспечивать высокий уровень стойкости, и эта стойкость не должна основываться на сохранении втайне самого алгоритма, его реализация в виде электронных устройств должна быть экономичной, он должен быть эффективен в использовании и доступен всем пользователям и поставщикам.
Поскольку первые поступившие предложения разочаровали организаторов, в августе 1974 года приглашение было опубликовано повторно, в результате чего в марте 1975 года для дальнейшего исследования был выбран проект, представленный корпорацией IBM. После обсуждений и диспутов, длившихся более 18 месяцев, в ноябре 1976 года данное предложение IBM было принято и превратилось в "Стандарт шифрования данных" ("The Data Encryption Standard", сокращенно DES) - см. [13.3, 13.4].
DES-алгоритм явился предметом большого числа исследований, и ему посвящено значительное количество работ. Полное его описание, представляющее интерес в основном для специалистов, можно найти в многочисленных книгах, в том числе [13.5] и [13.6]. Вкратце же сущность алгоритма заключается в следующем.
Общие сведения
(1)Конструктивно алгоритм обеспечивает шифрование блоков данных по 64 разряда (бита) под управлением 64-разрядного ключа (K). Таким образом, DES-алгоритм является примером так называемых
блочных шифров.
(2)Два человека, желающие связываться друг с другом с помощью DES-
*) DES –аббревиатура словосочетания "Data Encryption Standard", перевод которого вынесен в данный заголовок (прим. перев.).
205
алгоритма, должны договориться об используемом значении (секретного) ключа K. Все остальные сведения о DES-алгоритме являются общедоступными.
(3)При задании секретного ключа K пользователи выбирают семь 8-разрядных символов (т.е. в общей сложности 56 битов), к которым в процессе работы DES-алгоритма добавляются еще 8 проверочных разрядов. В результате получаются требуемые 64 разряда секретного ключа.
Процедура зашифрования
(4)Разряды 64-битового блока данных представляются согласно начальной перестановке (IP).
(5)64-битовый блок данных разбивается на два 32-разрядных сегмента: левый (L) и правый (R).
(6)Сорок восемь разрядов ключа K нелинейным образом комбинируются с 48-разрядным "расширением" сегмента R ("расширение" получается повторением 16-ти из 32 разрядов R); затем полученные 48 битов редуцируются до 32-разрядной строки (обозначим ее через X).
(7)L заменяется на R, а в качестве нового 32-разрядного значения R берется сумма по модулю 2 строк X и L.
(8)Шаги (6) и (7) повторяются 16 раз, и каждый раз на шаге (6) используются разные 48-разрядные сегменты ключа K.
(9)64 разряда, полученные в конце последнего (16-го) шага подвергаются инверсии начальной перестановки, т.е. (IP)-1.
(10)В результате получаются 64 бита шифрованного текста.
Процедура расшифрования
(11) Расшифрование осуществляется в обратном порядке с использованием того же самого ключа K.
Стойкость DES-алгоритма
Стоит заметить, что два человека, желающие связываться друг с другом с помощью DES-алгоритма, должны договориться об общем ключе. Это можно сделать с использованием системы ключевого обмена ДиффиХеллмана. Эта процедура является безопасной, если только третья сторона не может перехватывать и изменять содержание сообщений.
206
Что касается самого DES-алгоритма, то данные, зашифрованные с его помощью на большом количестве ключей, подвергались различным тестам, в том числе статистическим, и все они дали хорошие результаты. Один из самых важных тестов называется "лавина": сколько именно разрядов из 64-х изменится на выходе, если изменить один из 64-х разрядов на входе? Для слабого шифра ответ был бы "1"; в идеальной системе шифрования ответ должен быть "около 32-х" - именно так обстоит дело в DES-алгоритме
(примеры см. в [13.5]).
Несмотря на это, дебаты относительно его уровня стойкости шли даже еще до введения DES-алгоритма в эксплуатацию. Так как пользователи
задают 56-разрядный ключ, то противнику надо опробовать "всего лишь" 256 возможных ключей. Так как 256 составляет около 1016,86, то компьютеру,
способному проверять один ключ в микросекунду, понадобится 2300 лет для их полного перебора. Ясно, что это практически невыполнимо. Однако критики DES-алгоритма заявляли, что миллион таких компьютеров, работающих параллельно, смогут найти ключ всего за один день. И так как это будет стоить огромной суммы денег и потребует больших организационных усилий, то трудно себе представить, чтобы кто-нибудь посчитал стоящим такое предприятие, если только заранее не известно, что сообщение относится к жизненно важному вопросу национальной безопасности. Также выдвигались предположения, что возможно существование тайной "лазейки", или Ахиллесовой пяты, известной разработчикам DES-алгоритма, что позволит осведомленным о ее существовании находить ключ за приемлемое время. Это может быть правдой, но никто до сих пор не обнаружил данных, свидетельствующих о ее существовании.
Также высказывались предположения, что в DES-алгоритме надо было использовать ключ большей длины, и чаще всего при этом говорили о 128 разрядах. Это, конечно, устранило бы все сомнения по поводу его стойкости, и с тех пор 128-битовое шифрование появилось в составе других систем, но в 1977 году это не сочли необходимым.
Альтернативой использования 128-разрядного ключа могло бы быть последовательное шифрование на двух 64-разрядных ключах, но можно показать, что в этом случае стойкость возрастает всего лишь вдвое по сравнению с использованием одного 64-разрядного ключа (если у криптоаналитика в наличии имеется компьютер с огромным объемом памяти). Данный метод вскрытия требует знания открытого текста и его шифрованного эквивалента. Известный открытый текст зашифровывается на всех возможных 64-разрядных ключах, а известный шифрованный текст расшифровывается на всех возможных 64-разрядных ключах. Затем происходит сортировка и сравнение двух построенных множеств данных. Это означает, что потребуется всего лишь 257 испытаний, а не 2112. Если