- •Министерство образования и науки Российской Федерации
- •В.И. Аверченков, м.Ю. Рытов, с.А. Шпичак
- •Брянск Издательство бгту
- •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.2. Примеры современных асимметричных шифров
4.2.1. Криптосистема rsa
Система построена на следующих функциях:
Односторонняя функция - умножение двух больших простых чисел:
N = p · q.
Обратная задача – задача факторизации, является сложной.
Односторонняя функция с секретом - потенцирование (возведение в степень) по модулю составного N = p · q с фиксированной степенью E:
C = mE mod N.
Обратная задача – задача извлечения корня степени E по модулю N:
является сложной, если неизвестно разложение N на множители (секрет) и является простой при известном разложении N.
В дальнейшем секретные элементы криптосистем обозначаются строчными (p, q, m и пр.) открытые прописными (N, C, E и пр.) латинскими буквами.
Предположим абонент A считает нужным разрешить всем желающим отправлять ему секретные сообщения, расшифровать которые способен только он. Для этого выбирается два больших простых числа p и q, которые держатся в секрете, и публикуется их произведение
N = p · q,
которое называют модулем алгоритма. Кроме того, выбирается шифрующая экспонента E, удовлетворяющая условию
НОД (E, (p – 1), (q – 1)) = 1.
Как правило E берут равным 3, 17 или 65537. Пара, доступная всем желающим, - это (N, E). Для выбора секретного ключа применяют расширенный алгоритм Евклида к паре чисел E и
(p – 1)(q – 1), получая при этом расшифровывающую экспоненту d. Найденная экспонента удовлетворяет соотношению
E · d = 1 (mod (p – 1)(q – 1)) = 1.
Секретным ключом является тройка (d, p, q). Фактически, можно было бы выбросить простые делители p и q из ключа и помнить лишь о d и всем числе N. Но, как будет рассмотрено позднее, это снизит скорость алгоритма.
Допустим теперь пользователь B намерен зашифровать сообщение, адресованное A. Он сверяется с открытым ключом и представляет сообщение в виде числа m, строго меньшего модуля N алгоритма. Шифртекст C получается из m по следующему правилу:
C = mE (mod N).
A, получив шифрограмму, расшифровывает ее, возводя число C в степень d:
m = Cd (mod N).
Равенство имеет место в связи с тем, что порядок группы
#(Z/NZ)* = φ(N) = (p – 1)(q – 1).
Потому по теореме Лагранжа (Эйлера-Ферма),
x(p - 1)(q - 1) = 1 (mod N)
для любого числа x (Z/NZ)*. Поскольку E и d взаимно обратны по модулю (p – 1)(q – 1), при некотором целом числе s получается равенство
Ed – s(p – 1)(q – 1) = 1.
Следовательно,
Cd = (mE)d = mEd = m1 + s(p – 1)(q – 1) = m · m s(p – 1)(q – 1) = m (mod N).
Пример. Пусть p = 7 и q = 11. Тогда N = 77, а (p – 1)(q – 1) = 6 · 10 = 60. В качестве открытой шифрующей экспоненты возьмем число E = 37, поскольку НОД(37, 60) = 1. Применяя расширенный алгоритм Евклида, найдем d = 13, так как
37 · 13 = 481 = 1 (mod 60).
Для зашифрования сообщения численное представление которого имеет вид m = 2:
C = mE (mod N) = 237 (mod 77) = 51.
Расшифрование происходит аналогично:
m = Cd (mod N) = 5113 (mod 77) = 2.
4.2.2. Взаимосвязь компонентов rsa
Задача RSA: Даны числа C и E, последнее из которых удовлетворяет соотношению:
НОД(E, (p – 1)(q – 1)) = 1.
Требуется найти такое число m, что
mE = C (mod N).
Лемма. Задача RSA не сложнее проблемы факторизации.
Доказательство. Применяя алгоритм факторизации, разложим число N на простые множители, вычислим значение функции Эйлера Ф = (N) и найдем
D = 1/E (mod Ф).
Теперь, зная число D, легко восстановить m, поскольку
CD = mED = m1 (mod Ф) = m (mod N).
Отсюда следует, что при известных p и q легко находятся d и m.
Самые большие числа, которые к настоящему времени удается разложить на множители за разумное время, имеют 500 двоичных знаков. В связи с этим, для обеспечения стойкости систем среднего срока действия, рекомендуют брать модули шифрования порядка 1024 бит. Для систем большого срока действия следует выбирать модули, состоящие из 2048 бит.
Секретная экспонента и проблема факторизации:
Лемма. Если известна секретная экспонента d алгоритма RSA, соответствующая открытому ключу (N, E), то число N можно эффективно разложить на множители.
Доказательство. При некотором целом s имеет место равенство
Ed – s(p – 1)(q – 1) = 1.
Возьмем произвольное целое число X 0. Тогда
XEd – 1= 1(mod N).
Вычисляем квадратный корень Y1 по модулю N:
что можно сделать, поскольку Ed – 1 известно и четно. Приходим к тождеству
которое можно использовать для определения делителей числа N с помощью вычисления НОД(Y1 – 1, N). Однако это будет работать только если Y1 1 (mod N).
Предположим, что нам не повезло и Y1 = 1 (mod N). Если Y1 = –1 (mod N), вернемся к началу и выберем другое число X. Если Y1 = 1 (mod N), то можно взять еще один квадратный корень
Опять получаем
откуда НОД(Y2 – 1, N) – делитель числа N. К сожалению, здесь тоже может оказаться, что Y2 = 1 (mod N). Тогда придется повторить все снова.
Алгоритм необходимо повторять до тех пор, пока мы не разложим N на множители и не придем к числу (ED – 1)/2t, которое уже не будет делиться на 2. В последнем случае придется вернуться к началу алгоритма, выбрать новое случайное значение X и все повторить.
Отсюда следует, что при известном d легко найти p и q.
Алгоритм, приведенный в доказательстве, - типичный пример алгоритма Лас-Вегаса, вероятностного по своей природе, которая проявляется в процессе работы. Но если уж ответ отыщется, то он будет обязательно верным.
Пример. Входные данные задачи RSA:
N = 1441499, E = 17 и d = 507905.
Напомним, что мы предполагаем известной расшифровывающую экспоненту d, которая обычно хранится в секрете. Опираясь на предыдущий алгоритм, найдем числа N. Положим
T1 = (Ed – 1)/2 = 4317192,
X = 2.
Для вычисления Y1, сделаем преобразования :
Поскольку Y1 оказался равным 1, нам нужно взять
T2 = T1/2 = (Ed – 1)/4 = 2158596 и .
Теперь
Снова нужно повторять предыдущие шаги, что приведет нас к
T3 = (Ed – 1)/8 = 1079298
и
Отсюда
и мы можем найти простой делитель числа N, вычислив
НОД(Y3 – 1, N) = 1423.
Значение функции Эйлера (N) и проблема факторизации:
Лемма. Значение Ф = (N) позволяет эффективно разложить число N на множители.
Доказательство. Имеем
Ф = (p – 1)(q – 1) = N – (p + q) + 1.
Следовательно, положив S = N + 1 – Ф, мы получим
S = p + q.
Нам нужно определить числа p или q, опираясь на их сумму S и произведение N. Рассмотрим многочлен
f(X) = (X – p)(X – q) = X2 – SX + N.
Теперь можно найти как p, так и q, решая квадратное уравнение f(X) = 0 стандартным образом:
Отсюда следует, что при известном (N) легко найти p и q.
Пример. Открытый модуль N = 18923 криптосистемы RSA. Известно Ф = (N) = 18648. Вычисляем
S = p + q = N + 1 – Ф = 276.
Соответствующий многочлен имеет вид:
f(X) = X2 – SX + N = X2 – 276X + 18923,
а его корни – p = 149, q = 127.