- •Предисловие
- •Глава 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
- •Литература
198
Пример 13.2 (Немного более реалистичный случай, который мы будем использовать ниже)
Найти ключ расшифрования d, если n=3127, а ключ зашифрования e равен 17.
Решение
Заметим, что n=3127=53 59, причем и 53, и 59 - простые числа. Следовательно, значение n годится в качестве модуля для системы RSA, а (p- 1)(q-1)= 52 58=3016. Далее, поскольку число 17 не имеет общих делителей ни с 3127, ни с 3016, то оно годится в качестве ключа зашифрования. Действуя, как и ранее, то есть по алгоритму Евклида, получаем:
3016=177 17+7, 17=2 7+3, 7=2 3+1,
откуда
1=7-2 3,
но из второго равенства сверху следует, что 3=17-2 7, поэтому
1=7-2 (17-2 7)=5 7-2 17,
а из первого равенства следует, что 7=3016-177 17, поэтому
1=5 (3016-177 17)-2 17=5 3016-887 17,
или
887 17 -1(mod 3016).
Нам требуется значение d, которое, будучи умножено на 17, даст при делении на 3016 остаток +1. Следовательно, оно равно -887, а не +887. Так как -887 2129(mod 3016), то окончательно получаем, что ключ расшифрования d=2129.
(Проверка: 2129 17=36193=12 3016+1.)
Процессы зашифрования и расшифрования в системе RSA
Для зашифрования сообщения по методу RSA предполагаемому
199
пользователю необходимо знать значение модуля n(=pq) и ключ зашифрования e - эти величины общедоступны. Значения чисел p и q и ключа расшифрования d известны только "хозяину" используемой системы.
Чтобы зашифровать сообщение, посылаемое "хозяину", и которое только он один и сможет прочесть, пользователь должен:
(1)преобразовать буквы сообщения в числа подобно тому, как это показано в таблице 1.1, получая, к примеру, A=00, B=01, ..., Z=25;
(2)если в записи модуля n не более D цифр, разбить числовое представление сообщения на блоки, в каждом из которых не более D цифр; эти блоки обозначим B1,B2, ...;
(3)последовательно зашифровать блоки независимо друг от друга, вычислив
(4)(BI)e(mod n), I=1,2,... - в результате получаются блоки шифрованного текста C1,C2,...
Шифрованное сообщение записывается C1C2... (в виде последовательности чисел, а не букв).
Процедура расшифрования сообщения в точности та же самая, как и при зашифровании, за исключением того, что теперь преобразуются блоки шифрованного текста CI, а на шаге (4) вместо ключа зашифрования e используется ключ расшифрования d. Из способа получения d следует, что
(CI)d=BI ,
или, другими словами, происходит восстановление исходного сообщения.
Пример 13.3
Зашифровать по системе RSA сообщение
COMEXATXNOON
при n=3127 и ключе зашифрования e=17.
Зашифрование Преобразуем текст в числа обычным образом по таблице 1.1. Поскольку
значение модуля (3127) записывается с помощью четырех цифр, разобьем
текст на пары букв следующим образом: |
|
|
|
||
CO |
ME |
XA |
TX |
NO |
ON |
0214 |
1204 |
2300 |
1923 |
1314 |
1413 |
Теперь необходимо вычислить значения, получаемые при возведении каждого из этих шести четырехзначных чисел в 17-ю степень и приведении по модулю 3127. Производить эти вычисления вручную - дело довольно
200
трудоемкое, и поэтому здесь они приведены в деталях только для первого значения, 0214. Остальные значения легко получить при помощи простой компьютерной программы.
Итак, наша задача состоит в том, чтобы вычислить значение (0214)17(mod 3127). Везде, где это возможно в модульных вычислениях такого типа, мы для нахождения степеней исходного числа будем последовательно возводить его в квадрат, а затем перемножим значения соответствующих степеней. Поскольку 16=24, то, действуя таким образом, мы почти вычислим необходимую нам степень. Итак, вычислим следующие степени:
(214)2=45796=14 3127+2018 2018(mod 3127),
откуда
(214)4 (2018)2=4072324=1302 3127+970 970(mod 3127),
и
(214)8 (970)2=940900=300 3127+2800 2800(mod 3127),
откуда
(214)16 (2800)2=7840000=2507 3127+611 611(mod 3127).
Окончательно получаем
(214)17 214 611=130754=41 3127+2547 2547(mod 3127).
Итак, 0214 при зашифровании переходит в 2547.
Остальные блоки текста сообщения шифруются точно так же, то есть возведением каждого четырехзначного числа в степень 17 с приведением по модулю 3127. В результате получается шифрованный текст
2547 3064 2831 0063 2027 1928.
Его нельзя преобразовать обратно в буквы, так как на некоторых местах (на самом деле, в большинстве случаев) получаются двузначные числа больше
25.
Для расшифрования этого шифрованного сообщения получатель ("хозяин") возводит каждое четырехзначное число в степень, задаваемую ключом расшифрования, 2129, и приводит результат по модулю 3127.
201
Поскольку
2129=2048+64+16+1=211+26+24+1,
то в ходе вычислений понадобится возвести каждое четырехзначное число в степени 24, 26 и 211 путем последовательного возведения в квадрат с дельнейшим перемножением нужных нам чисел. С использованием метода "последовательного возведения в квадрат" для вычисления 2129-й степени числа понадобится "всего лишь" по 14 операций умножения и деления, в то время как для прямого подсчета "в лоб" их потребуется более 4000. Далее выполнены операции по расшифрованию четвертого четырехзначного блока из приведенного выше шифрованного текста (т.е. 0063), чтобы продемонстрировать , как именно выполняются подсчеты, и чтобы подтвердить, что в данном случае число 2129 действительно является ключом расшифрования.
Необходимо вычислить значение (63)2129 и найти остаток от его деления на 3127. Из сказанного выше следует, что
(63)2129=(63)2048 (63)64 (63)16 (63)1,
и мы переходим к составлению таблицы степеней числа 63 с показателями 2n до значения n=11 путем последовательного возведения в квадрат. Так как (63)2=3969=3127+842, то в строку таблицы для n=2 мы заносим число 842. Продолжая подобным образом, получаем всю таблицу степеней, которая показана в Таблице 13.1.
Таблица 13.1 |
|
|
|
|
|
|
|
|
n |
N=2n |
(63)N(mod 3127) |
|
0 |
1 |
63 |
1 |
2 |
842 |
|
2 |
4 |
2262 |
|
3 |
8 |
872 |
|
4 |
16 |
523 |
|
5 |
32 |
1480 |
|
6 |
64 |
1500 |
|
7 |
128 |
1687 |
|
8 |
256 |
399 |
|
9 |
512 |
2851 |
|
10 |
1024 |
1128 |
|
11 |
2048 |
2822 |
|
|
|
|
|
Для вычисления значения (63)2129(mod 3127) теперь перемножаем четыре