- •Министерство образования и науки Российской Федерации
- •В.И. Аверченков, м.Ю. Рытов, с.А. Шпичак
- •Брянск Издательство бгту
- •Isbn 978-5-89838-596-5
- •Редактор издательства т.И. Королева
- •Темплан 2011г., п. 57
- •1. Введение в криптографию 10
- •2. Стойкость криптографических систем 34
- •3. Принципы построения симметричных криптографических алгоритмов 61
- •4. Принципы построения асимметричных криптографических алгоритмов 98
- •5. Криптографические хэш-функции и электронно-цифровая подпись 133
- •6. Организация сетей засекреченной связи 160
- •7.Криптоанализ и перспективные направления в криптографии 183
- •Предисловие
- •1. Введение в криптографию
- •1.1. Краткая история развития криптографических методов.
- •1.2. Основные понятия криптографии
- •1.2.1. Термины и определения
- •1.2.2. Классификация шифров
- •1.2.3. Характер криптографической деятельности
- •Контрольные вопросы
- •2. Стойкость криптографических систем
- •2.1. Модели шифров и открытых текстов
- •2.1.1. Алгебраические модели шифров.
- •2.1.2. Вероятностные модели шифров.
- •2.1.3. Математические модели открытых сообщений.
- •2.2. Криптографическая стойкость шифров
- •2.2.1. Теоретико-информационный подход к оценке криптостойкости шифров
- •2.2.2. Практическая стойкость шифров.
- •2.3. Имитостойкость и помехоустойчивость шифров
- •2.3.1. Имитостойкость шифров. Имитация и подмена сообщения
- •2.3.2. Способы обеспечения имитостойкости
- •2.3.3. Помехостойкость шифров
- •2.3.4. Практические вопросы повышения надежности.
- •Контрольные вопросы
- •3. Принципы построения симметричных криптографических алгоритмов
- •3.1. Виды симметричных шифров. Особенности программной и аппаратной реализации.
- •3.2. Принципы построения блочных шифров
- •3.2.1. Базовые шифрующие преобразования
- •3.2.2. Сеть Файстеля
- •3.3. Современные блочные криптоалгоритмы
- •3.3.1. Основные параметры блочных криптоалгоритмов.
- •3.3.2. Алгоритм des
- •3.3.3. Блочный шифр tea
- •Var key:tLong2x2;
- •Var y,z,sum:longint; a:byte;
- •Inc(sum,Delta);
- •3.3.4. Международный алгоритм idea
- •3.3.5. Алгоритм aes (Rijndael)
- •InverseSubBytes(s);
- •InverseShiftRows(s);
- •InverseSubBytes(s) End;
- •3.4. Принципы построения поточных шифров
- •3.4.1. Синхронизация поточных шифрсистем
- •3.4.2. Структура поточных шифрсистем
- •3.4.3.Регистры сдвига с обратной связью
- •3.4.4. Алгоритм Берленкемпа-Месси
- •3.4.5. Усложнение линейных рекуррентных последовательностей
- •3.5. Современные поточные криптоалгоритмы
- •3.5.1. Алгоритм Гиффорда
- •3.5.2. Алгоритм a5
- •3.6. Режимы использования шифров
- •Контрольные вопросы
- •4. Принципы построения асимметричных криптографических алгоритмов
- •4.1. Математические основы асимметричной криптографии
- •4.1.1. Свойства операций
- •4.1.2. Функция Эйлера. Поле. Теоремы Эйлера - Лагранжа и Ферма
- •4.1.3. Конечные поля
- •4.1.4. Основные алгоритмы
- •Алгоритм разложения чисел на простые множители.
- •4.1.5. Алгоритмы нахождения нод и мультипликативного обратного по модулю
- •4.1.6. Китайская теорема об остатках
- •4.1.7. Символы Лежандра и Якоби. Извлечение корней
- •4.2. Примеры современных асимметричных шифров
- •4.2.1. Криптосистема rsa
- •4.2.2. Взаимосвязь компонентов rsa
- •Слабые моменты реализации rsa
- •4.2.3. Криптосистема Эль-Гамаля
- •4.2.4. Криптосистема Рабина
- •4.2.5. Рюкзачные криптосистемы
- •4.2.6. Шифрсистема Мак-Элиса
- •Контрольные вопросы
- •5. Криптографические хэш-функции и электронно-цифровая подпись
- •5.1. Криптографические хэш-функции
- •5.1.1. Блочно-итерационные и шаговые функции
- •5.1.2. Ключевые функции хэширования
- •5.1.3 Бесключевые функции хэширования
- •5.1.4. Схемы использования ключевых и бесключевых функций
- •5.2. Электронно-цифровая подпись
- •5.2.1. Задачи и особенности электронно-цифровой подписи
- •5.2.2. Асимметричные алгоритмы цифровой подписи на основе rsa
- •5.2.3. Алгоритм цифровой подписи Фиата – Фейге – Шамира
- •5.2.4. Алгоритм цифровой подписи Эль-Гамаля
- •5.2.5. Алгоритм цифровой подписи Шнорра
- •5.2.6. Алгоритм цифровой подписи Ниберга-Руппеля
- •5.2.7. Алгоритм цифровой подписи dsa
- •5.2.8. Симметричные (одноразовые) цифровые подписи
- •Контрольные вопросы
- •6. Организация сетей засекреченной связи
- •6.1. Протоколы распределения ключей
- •6.1.1. Передача ключей с использованием симметричного шифрования
- •6.1.2. Передача ключей с использованием асимметричного шифрования
- •6.1.3. Открытое распределение ключей
- •6.1.4. Предварительное распределение ключей
- •6.1.5. Схемы разделения секрета
- •6.1.6. Способы установления ключей для конференц-связи
- •6.2. Особенности использования вычислительной техники в криптографии
- •6.2.1. Методы применения шифрования данных в локальных вычислительных сетях
- •6.2.2. Обеспечение секретности данных при долгосрочном хранении.
- •6.2.4. Обеспечение секретности ключей при долгосрочном хранении
- •6.2.5. Защита от атак с использованием побочных каналов
- •7.1.2. Атаки на хэш-функции и коды аутентичности
- •7.1.3. Атаки на асимметричные криптосистемы
- •7.2. Перспективные направления в криптографии
- •7.2.1. Эллиптические кривые
- •7.2.2. Эллиптические кривые над конечными полями
- •7.2.3. Алгоритм цифровой подписи ec-dsa
- •7.2.4. Квантовая криптография
- •Контрольные вопросы
- •Приложение
- •Заключение
- •Список использованной и рекомендуемой литературы
- •Учебное издание
- •Аверченков Владимир Иванович Рытов Михаил Юрьевич Шпичак Сергей Александрович
4.1.4. Основные алгоритмы
Нахождение НОД не составляет проблем, если известно разложение чисел на простые множители или многочленов на неприводимые многочлены, но разложение на простые множители или неприводимые многочлены (факторизация) – очень трудоемкая операция.
Алгоритм разложения чисел на простые множители.
Алгоритм А (Разложение на простые множители путем деления). По данному положительному целому числу N этот алгоритм находит простые множители p1 ≤ р2 ≤ … ≤ pt числа N. В этом методе используется вспомогательная последовательность пробных делителей
d = d0 < d1 < d2 < d3 < …,
которая включает в себя все простые числа < (и, если это удобно, может содержать числа, не являющиеся простыми). Последовательность чисел di должна также содержать по крайней мере одно значение, такое, что dk > .
А1. [Начальная установка.] Присвоить t ← 0, k ← 0, n ← N. (В ходе выполнения алгоритма переменные t, k, n подчинены следующим условиям: "n = N/p1...pt и n не имеет простых множителей, меньших dk".)
А2. [n = 1?] Если n = 1, алгоритм заканчивается.
A3. [Разделить.] Присвоить q ← , r ← n mod dk. (Здесь q и r - соответственно частное и остаток от деления числа n на dk.)
А4. [Остаток равен нулю?] Если r ≠ 0, то перейти к шагу А6.
А5. [Множитель найден.] Увеличить t на 1 и присвоить pt ← dk, n ← q. Возвратиться к шагу А2.
А6. [Частное мало?] Если q > dk, увеличить k на 1 и возвратиться к шагу A3.
А7. [n — простое число.] Увеличить t на 1, присвоить pt ← n и завершить выполнение алгоритма.
Рис.32. Алгоритм разложения числа на простые множители
Пример.
Разложение на простые множители числа N = 25852. Сразу же находим, что N = 2 · 12926; следовательно, р1 = 2. Далее, 12926 = 2 · 6463, так что р2 = 1. Но теперь число n = 6463 не делится на числа 2, 3, 5, ..., 19; находим, что n = 23 · 281; значит, р3 — 23. В итоге имеем 281 = 12 · 23 + 5 и 12 ≤ 23, т. е. р4 = 281.
Алгоритм Евклида
Разделить целое число a на число b с остатком – это значит найти такие числа q и r c 0 r < |b|, при которых выполняется равенство
a = q · b + r.
Разделить многочлен f на многочлен g с остатком – это значит найти такие многочлены q и r c 0 deg r < deg g, при которых выполняется равенство
f = q · g + r.
Для вычисления НОД(r0 = a, r1 = b) производится деление с остатком по следующей схеме:
a = r0 = q1r1 + r2,
b = r1 = q2r2 + r3,
.....
rm-2 = qm-1bm-1 + rm,
rm-1 = qmrm.
Работа алгоритма Евклида основана на том, что отображение сохраняет наибольший общий делитель.
Отображение работает до a = НОД, b = 0.
Пример.
НОД(21, 12) = НОД (21 (mod 12), 12) =
= НОД(12, 9) = НОД (12 (mod 9), 9) =
= НОД(9, 3) = НОД (9 (mod 3), 3) =
= НОД(3, 0) = 3
Работа бинарного алгоритма нахождения НОД основана на следующем ряде отображений, также сохраняющих НОД:
Отображения работают до (a – b) /2 = 0. НОД = b.
Пример.
НОД(21, 12) = НОД (21, 12 / 2) =
= НОД(21, 6) = НОД (21, 6 / 2) =
= НОД(21, 3) = НОД ((21 – 3) / 2, 3) =
= НОД(9, 3) = НОД ((9 – 3) / 2, 3) =
= НОД(3, 3) = НОД ((3 – 3) / 2, 3) =
= НОД(0, 3) = 3
Во всех вышеперечисленных рассуждениях принимается a b.
Расширенный алгоритм Евклида
Позволяет найти не только НОД(a, b), но и мультипликативный обратный к b по модулю a. Преобразуем формулы для алгоритма Евклида, выразив все остатки ri через a и b:
r2 = r0 – q1r1 = a – q1b,
r3 = r1 – q2r2 = b – q2(a – q1) = – q2a + (1 + q1 q2)b,
.....
ri-2 = si-2a + ti-2b,
ri-1 = si-1a + ti-1b,
ri = ri-2 – qi-1ri-1 = a(si-2 – qi-1si-1) + b(ti-2 – qi-1ti-1)
.....
rm = sma + tmb.
Расширенный алгоритм Евклида по данным целым числам a и b выдает rm, sm и tm, так что
rm = НОД(a, b) = sma + tmb.
При НОД(a, b) = 1; 1 tmb (mod a); b – 1 tm (mod a).
Пример.
r2 = 5 = 19 – 2 · 7,
r3 = 2 = 7 – 5 = 7 – (19 – 2 ·7) = – 19 + 3 · 7,
r4 = 1 = 5 – 2 · 2 = (19 – 2 ·7) – 2 · (– 19 + 3 · 7) = 3 · 19 – 8 · 7.
Отсюда 1 – 8 · 7 (mod 19),
так что 7–1 – 8 11 (mod 19).