- •Предисловие
- •Глава 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
- •Литература
207
обнаружены два одинаковых текста, то это значит, что у нас есть возможные значения для пары неизвестных нам ключей. Будет найдено много ложных пар ключей (их окажется около 248, см. M27), их придется проверять на других известных парах открытого/шифрованного текстов. Такой метод "встречного поиска" в настоящее время невозможно реализовать практически, до и в обозримом будущем это вряд ли удастся.
Однако, стойкость DES-алгоритма чрезвычайно возрастает, если применить тройное шифрование. Потребуется всего два ключа, которые применяются следующим образом:
(1)зашифровать сообщение на 1-м ключе;
(2)расшифровать сообщение на 2-м ключе;
(3)зашифровать сообщение на 1-м ключе.
Теперь противнику необходимо опробовать 2112 возможных пар ключей, а это считается невозможным ни за какое реальное время. Такое тройное DES-преобразование считается стойким и используется в настоящее время. Такая форма тройного шифрования имеет дополнительное преимущество, состоящее в том, что для двух одинаковых ключей оно становится идентично одинарному DES-преобразованию. Это позволяет пользователю, применяющему тройное шифрование, связываться с пользователем, применяющим одинарное, и наоборот. В другой форме тройного шифрования на всех трех стадиях используются различные ключи. И снова совместимости с другими вариантами можно добиться, положив два или более ключа одинаковыми.
Зацепление
Поскольку DES-алгоритм шифрует текст короткими блоками (всего по 64 бита), возникает резонный вопрос: как зашифровать сообщение большей длины? Самое простое - разбить сообщение на блоки по 8 знаков (=64 бита) и зашифровать их последовательно на одном и том же 64-разрядном ключе. Это будет означать, что все 64-разрядные шифрованные сообщения окажутся одноключевыми, однако данное свойство, которое было бы фатальным для линейных видов шифрования, ничего или почти ничего не дает криптоаналитику благодаря нелинейной природе DES-преобразования. Однако есть более надежный способ: менять ключ для каждого 8-символьного блока, сделав его зависящим как от начального ключа, так и от части (или от всего) открытого текста предыдущих блоков. Легальный получатель расшифрует открытый текст первого блока, так как ему известен начальный ключ; далее он может вычислить ключ для второго блока, а затем расшифровать его. Теперь у него есть открытый текст второго блока, и он
208
может вычислить ключ для расшифрования третьего блока, и так далее. Если противнику удалось прочесть часть сообщения (например, из-за повторений стандартного текста), он не сможет продвинуться далее, так как без знания всех предыдущих блоков открытого текста он не сможет вычислить другие ключи. Если бы для всех блоков использовался один и тот же ключ, он смог бы дешифровать все сообщение целиком.
Пользователям систем шифрования, в основе которых лежит применение ключей к коротким блокам текста (как в DES-алгоритме), настоятельно рекомендуется использовать зацепление.
Реализации DES-алгоритма
Хотя написать программу зашифрования/расшифрования по DES-алгоритму совсем не трудно, никакая его реализация в программном виде не может быть официально одобрена, в частности, потому что программу легко изменить. К тому же, программные версии работают гораздо медленнее аппаратных, выполненных на специально разработанных микросхемах. Вскоре после официального одобрения DES-алгоритма различными производителями были разработаны и предложены к использованию устройства, в состав которых входили микросхемы, осуществлявшие преобразование согласно DES-алгоритму. Такие устройства могут зашифровывать и расшифровывать со скоростью сто тысяч знаков в секунду и даже больше.
Совместное использование алгоритмов RSA и DES
В системах с открытым ключом, таких как RSA, алгоритм зашифрования/расшифрования обычно требует большого объема вычислений, и поэтому может потребовать большого времени. В то же время в блочных системах шифрования, подобных DES-алгоритму, процессы зашифрования/расшифрования могут выполняться гораздо быстрее (возможно, даже в тысячу раз быстрее). Однако, если отправитель
(1)зашифрует ключ DES-алгоритма по методу RSA и пошлет его получателю, а затем
(2)зашифрует сообщение на ключе DES-алгоритма,
то он сможет значительно уменьшить объем вычислений, не снижая стойкости системы в целом. Если применяется "зацепление", то RSA нужно будет применить только один раз, для зашифрования начального ключа DESалгоритма.
209
Полезное замечание
С позиции метода "грубой силы" шифры простой замены, имеющие более 1026 возможных вариантов, вскрыть гораздо труднее, чем сообщения, зашифрованные с помощью DES-алгоритма, так как в нем число вариантов меньше 1017. Этот факт вновь показывает, сколь обманчивы могут быть рассуждения с позиции метода "грубой силы".
После DES-алгоритма
Правительство США официально одобрило использование стандартного DES-алгоритма примерно на 10 лет. После этого такое одобрение сохранилось у описанного выше тройного DES-алгоритма, но, кроме того, проводились поиски новых алгоритмов шифрования. В 1993 году был одобрен алгоритм под названием SKIPJACK, который был реализован на микросхеме CLIPPER. Сначала детали алгоритма шифрования SKIPJACK хранились втайне, но были рассекречены 24 июня 1998 года (см. [13.7]).
Одной из "неофициальных" систем шифрования (т.е. разработанных частными лицами), получившей распространение среди пользователей, является PGP (аббревиатура слов "Pretty Good Privacy" - "довольно хорошая конфиденциальность"). Алгоритм PGP разработан Филиппом Циммерманном
идоступен любому желающему. Он состоит из следующих шагов:
(1)на основе движений "мышью" и нажатия клавиш клавиатуры, выполняемых пользователем, вырабатывается "случайный" ключ - он называется сеансовым ключом;
(2)открытый текст сообщения подвергается сжатию; степень сжатия зависит от природы и длины текста; обычный английский текст можно сжать до 50% без внесения неоднозначностей, но для коротких текстов экономия во времени передачи сообщения может не стоить затраченных усилий;
(3)ключ, полученный на шаге (1), используется для зашифрования сжатого текста, построенного на шаге (2), с помощью алгоритма
IDEA ("International Data Encryption Algorithm" - "Международный алгоритм шифрования данных"), предложенного Лаи и Мэсcи (Lai, Massey) из Федерального Технологического Института в Цюрихе
(Швейцария) - см. [13.8].
(4)сеансовый ключ шифруется на открытом ключе получателя;
(5)шифрованный сеансовый ключ записывается впереди шифрованного текста; все вместе посылается получателю;
(6)получив шифрованный текст, получатель сначала на своем секретном ключе расшифровывает сеансовый ключ, стоящий в начале текста;
210
(7)имея расшифрованный ключ, он теперь может расшифровать текст сообщения и "разжать" его, если потребуется.
Как и в упомянутом выше случае применения DES-алгоритма после RSA, в случае PGP использование двух систем шифрования увеличивает не только стойкость системы: значительно возрастает скорость, поскольку в системе, где ключи зашифрования и расшифрования по существу одинаковы, на зашифрование и расшифрование будет затрачено гораздо меньше времени, чем в системе с открытым ключом (такой как RSA), в которой эти ключи абсолютно разные. В алгоритме PGP с помощью системы с открытым ключом шифруется только относительно короткий сеансовый ключ, а сам текст шифруется с помощью IDEA - системы без открытого ключа.
По поводу PGP и связанных с этим алгоритмом вопросов появились тысячи статей, которые можно найти в Интернете. Тех, кто интересуется деталями, отсылаем к [13.10],[13.11].
Алгоритмы шифрования, предназначенные для общего пользования, являются предметом многочисленных исследований, и следует полагать, что интерес к ним не иссякнет и в дальнейшем.
Проверка подлинности сообщения и удостоверение подлинности подписи
Как уже говорилось ранее, эти задачи можно решить с помощью систем с открытым ключом. DES-алгоритм к ним не относится, но алгоритм RSA именно таков. Вспомним, что в системе с открытым ключом у каждого пользователя есть открытый ключ E (для зашифрования), и секретный ключ D (для расшифрования). Допустим, пользователь X хочет послать сообщение M пользователю Y, а EX,DX,EY и DY - это ключи зашифрования и расшифрования пользователей X и Y соответственно.
Как может
(1)Y удостовериться в том, что сообщение действительно прислано пользователем X?
(2)X быть уверен в том, что Y не сможет утверждать, что получил от него другое сообщение (например, M')?
(3)Y быть уверен в том, что X не сможет утверждать, что посылал ему другое сообщение (например, M'')?
Есть несколько путей решения этих проблем, каждый из которых подразумевает использование некоторых (или всех) ключей зашифрования и расшифрования. Один из возможных способов следующий:
(1)X записывает перед сообщением M данные, содержащие дату и время, а также информацию о самом себе. При этом из M получается