- •Криптографическая защита информации
- •Оглавление
- •Раздел 1. Общие подходы к криптографической защите информации
- •Тема 1. Теоретические основы криптографии
- •1.1. Криптография
- •1.2. Управление секретными ключами
- •1.3. Инфраструктура открытых ключей.
- •1.4. Формальные модели шифров
- •1.5. Модели открытых текстов
- •Тема 2. Простейшие и исторические шифры и их анализ
- •Тема 3. Математические основы криптографии
- •3.1. Элементы алгебры и теории чисел
- •3.1.1. Модулярная арифметика. Основные определения.
- •3.1.2. Алгоритм Евклида нахождения наибольшего общего делителя
- •3.1.3. Взаимно простые числа
- •3.1.4. Наименьшее общее кратное
- •3.1.5. Простые числа
- •3.1.6. Сравнения
- •3.1.7. Классы вычетов
- •3.1.8. Функция Эйлера
- •3.1.9. Сравнения первой степени
- •3.1.10. Система сравнений первой степени
- •3.1.11. Первообразные корни
- •3.1.12. Индексы по модулям рk и 2рk
- •3.1.13. Символ Лежандра
- •3.1.14. Квадратичный закон взаимности
- •3.1.15. Символ Якоби
- •3.1.16. Цепные дроби
- •3.1.17. Подходящие дроби
- •3.1.18. Подходящие дроби в качестве наилучших приближений
- •3.2. Группы
- •3.2.1. Понятие группы
- •3.2.2. Подгруппы групп
- •3.2.3. Циклические группы
- •3.2.4. Гомоморфизмы групп
- •3.2.5. Группы подстановок
- •3.2.6. Действие группы на множестве
- •3.3. Кольца и поля
- •3.3.1. Определения
- •3.3.2. Подкольца
- •3.3.3. Гомоморфизмы колец
- •3.3.4. Евклидовы кольца
- •3.3.5. Простые и максимальные идеалы
- •3.3.6. Конечные расширения полей
- •3.3.7. Поле разложения
- •3.3.8. Конечные поля
- •3.3.9. Порядки неприводимых многочленов
- •3.3.10. Линейные рекуррентные последовательности
- •3.3.11. Последовательности максимального периода
- •3.3.12. Задания
- •Тема 4. Классификация шифров
- •4.1. Классификация шифров по типу преобразования
- •4.2. Классификация шифров замены
- •4.3 Шифры перестановки
- •4.3.1. Маршрутные перестановки
- •4.3.2. Элементы криптоанализа шифров перестановки
- •4.4. Шифры замены
- •4.4.1. Поточные шифры простой замены
- •4.4.2. Криптоанализ поточного шифра простой замены
- •4.4.3. Блочные шифры простой замены
- •4.4.4. Многоалфавитные шифры замены
- •4.4.5. Дисковые многоалфавитные шифры замены
- •4.5. Шифры гаммирования
- •4.5.1. Табличное гаммирование
- •4.5.2. О возможности восстановления вероятностей знаков гаммы
- •4.5.3. Восстановление текстов, зашифрованных неравновероятной гаммой
- •5.5.4. Повторное использование гаммы
- •4.5.5. Криптоанализ шифра Виженера
- •Тема 5. Поточные шифры
- •5.1. Принципы построения поточных шифрсистем
- •Примеры поточных шифрсистем
- •5.3. Линейные регистры сдвига
- •5.4. Алгоритм Берлекемпа-Месси
- •5.5. Усложнение линейных рекуррентных последовательностей
- •5.6. Методы анализа поточных шифров
- •6. Блочные шифры
- •6.1. Принципы построения блочных шифров
- •6.2. Примеры блочных шифров
- •6.3. Режимы использования блочных шифров
- •6.4. Комбинирование алгоритмов блочного шифрования
- •6.5. Методы анализа алгоритмов блочного шифрования
- •6.6. Рекомендации по использованию алгоритмов блочного шифрования
- •7. Криптографические хэш-функции
- •7.1. Функции хэширования и целостность данных
- •7.2. Ключевые функции хэширования
- •7.3. Бесключевые функции хэширования
- •7.4. Целостность данных и аутентификация сообщений
- •7.5. Возможные атаки на функции хэширования
- •Тема 8. Криптосистемы с открытым ключом
- •8.1. Шифрсистема rsa
- •8.2. Шифрсистема Эль-Гамаля
- •8.3. Шифрсистема Мак-Элиса
- •8.4. Шифрсистемы на основе "проблемы рюкзака"
8.1. Шифрсистема rsa
Система RSA была предложена в 1978 г. и в настоящее время является наиболее распространенной системой шифрования с открытым ключом. Напомним ее определение, приведенное в Теме 1 (определение 4).
Пусть п = р • q — целое число, представимое в виде произведения двух больших простых чисел p,q. Выберем числа е и d из условия
е•d1(mod (n)), (8.1)
где (п) = (р – 1) • (q–1) – значение функции Эйлера от числа п. Пусть k=(n,p,q,e,d) – выбранный ключ, состоящий из открытого ключа kз =(n,e) и секретного ключа kр = (n,p,q,d). Пусть М – блок открытого текста и С – соответствующий блок шифрованного текста. Тогда правила зашифрования и расшифрования определяются формулами:
С = Еk(М) = Mе(mod n), Dk(C) = Cd(mod n) . (8.2)
Заметим, что в соответствии с (2) Dk(С) = М. Это вытекает из следующих рассуждений. Для любого целого числа М и любого простого р справедливо сравнение
М р M(mod р). (8.3)
В самом деле, (8.3) равносильно сравнению
Мр – M 0(mod р)
или сравнению
M( Мр-1 – 1) 0(mod р) (8.4)
Если НОД(М,р)=р, то р делит М, и поэтому М 0(mod p), откуда следует (8.4). Если же НОД(М,р) = 1, то, согласно малой теореме Ферма, Мр-1l(modp), откуда также следует (8.4).
Согласно (8.1), существует целое число r, такое, что e d = r(п)+ 1. Отсюда и из (8.3) получаем следующую цепочку равенств и сравнений:
С d =(Me)d =Med = Мr(п)+ 1=Mr•(p-l)(q-l)+l = Mr•p(q-l)M-r•q+r+l =
= Mr•(q-l)M-r•q+r+l) = Mr•(q-l) M-r•(q+r+l M(mod р). (8.5)
Аналогично можно показать, что
С d = M(mod р). (8.6)
Поскольку р и q — разные простые числа, то на основании известных свойств сравнений из (8.5), (8.6) получаем:
С d = M(mod n).
Отсюда и следует корректность определения (8.2). Для того чтобы лучше представить себе технические детали, возникающие при зашифровании и расшифровании, приведем пример работы с RSA.
Пример
Зашифруем аббревиатуру RSA, используя р=17, q=31. Для этого вычислим n=pq=527 и (п) = (p–1)(q –1) =480 . Выберем, далее, в качестве е число, взаимно простое с (п), например е = 7. С помощью алгоритма Евклида найдем целые числа и и v, удовлетворяющие соотношению eu+(n)v =1:
480=768+4,
7=41+3,
4=31+1,
1=4–31=4–(7–41)1=42–71=(480–768)•2–71=4802–7137,
v=2, и= –137.
Поскольку –137 = 343(mod 480), то d = 343. Проверка:
7343=2401=l(mod 480).
Теперь представим данное сообщение в виде последовательности чисел, содержащихся в интервале 0,…,526. Для этою буквы R,S и А закодируем пятимерными двоичными векторами, воспользовавшись двоичной записью их порядковых номеров в английском алфавите:
R = 18 = (10010), S =19= (10011), А = 1 = (00001).
Тогда RSA= (100101001100001). Укладываясь в заданный интервал 0,…,526, получаем следующее представление:
RSA=(100101001),(100001)=(M1 = 297, М2 = 33).
Далее последовательно шифруем М1 и М2:
С1 = Еk(М1) = M1e = 2977 (mod 527) = 474.
При этом мы воспользовались тем, что
2977 =((2972)3297)(mod 527)=((2003(mod 527)297)(mod 527),
С2 = Еk(М2 )= М2e = ЗЗ7 (mod 527) = 407.
В итоге получаем шифртекст: у1 = 474, у2 = 407.
При расшифровании нужно выполнить следующую последовательность действий. Во-первых, вычислить
Dk(C1)=(C1)343(mod 527).
Отметим, что при возведении в степень удобно воспользоваться тем, что 343 =256+64+16+4+2+1. На основании этого представления получаем:
4742 = 174(mod 527), 4744(mod 527) = 237, 4748 (mod 527) = 307,
47416 (mod 527) = 443, 47432 (mod 527) = 205, 47464 (mod 527) = 392,
474128 (mod 527) = 307, 474256 (mod 527) = 443,
в силу чего
474343 (mod 527) = (443 • 392 • 443 • 237 • 174 • 474)(mod 527) = 297.
Аналогично
407343 (mod 527) =33.
Возвращаясь к буквенной записи, получаем после расшифрования RSA.
Проанализируем вопрос о стойкости системы RSA. Нетрудно показать, что сложность нахождения секретного ключа системы RSA определяется сложностью разложения числа п на простые множители. В связи с этим нужно выбирать числа р и q таким образом, чтобы задача разложения числа п была достаточно сложна в вычислительном плане. Для этого рекомендуются следующие требования:
1) числа р и q должны быть достаточно большими, не слишком сильно отличаться друг от друга и в то же время быть не слишком близкими друг другу;
2) числа р и q должны быть такими, чтобы наибольший общий делитель чисел р–1 и q– 1 был небольшим; желательно, чтобы НОД(р–1, q–1) = 2 ;
3) р и q должны быть сильно простыми числами (сильно простым называется такое простое число r, что r+1 имеет большой простой делитель, r-1 имеет большой простой делитель s, такой, что число s – 1 также обладает достаточно большим простым делителем).
В случае когда не выполнено хотя бы одно из указанных условий, имеются эффективные алгоритмы разложения п на простые множители.
В настоящее время самые большие простые числа, вида п = р • q, которые удается разложить на множители известными методами, содержат в своей записи 140 десятичных знаков. Поэтому, согласно указанным рекомендациям, числа р и q в системе RSA должны содержать не менее 100 десятичных знаков.
Следует подчеркнуть необходимость соблюдения осторожности в выборе модуля RSA (числа п) для каждого из корреспондентов сети. В связи с этим можно сказать следующее.
Самостоятельно можно убедиться в том, что, зная одну из трех величин: р, q или (п), можно легко найти секретный ключ RSA. Известно также, что, зная секретную экспоненту расшифрования d, можно легко разложить модуль п на множители. В этом случае удается построить вероятностный алгоритм разложения п. Отсюда следует, что каждый корреспондент сети, в которой для шифрования используется система RSA, должен иметь свой уникальный модуль.
В самом деле, если в сети используется единый для всех модуль п, то такая организация связи не обеспечивает конфиденциальности, несмотря на то, что базовая система RSA может быть стойкой. Выражаясь другими словами, говорят о несостоятельности протокола с общим модулем. Несостоятельность следует из того, что знание произвольной пары экспонент (ei,di) позволяет, как было отмечено, разложить п на множители. Поэтому любой корреспондент данной сети имеет возможность найти секретный ключ любого другого корреспондента. Более того, это можно сделать даже без разложения п на множители.
Как отмечалось ранее, системы шифрования с открытыми ключами работают сравнительно медленно. Для повышения скорости шифрования RSA на практике используют малую экспоненту зашифрования.
Если выбрать число е небольшим или таким, чтобы в его двоичной записи было мало единиц, то процедуру шифрования можно значительно ускорить. Например, выбрав е=3 (при этом ни р–1, ни q–1 не должны делиться на 3), мы можем реализовать шифрование с помощью одного возведения в квадрат по модулю п и одного перемножения. Выбрав е = 216 +1=65537 – число, двоичная запись которого содержит только две 1, мы сможем реализовать шифрование с помощью 16 возведений в квадрат по модулю п и одного перемножения. Если экспонента е выбирается случайно, то реализация шифрования по алгоритму RSA потребует s возведений в квадрат по модулю п и в среднем s/2 умножений по тому же модулю, где s – длина двоичной записи числа п. Вместе с тем выбор небольшой экспоненты е может привести к негативным последствиям. Дело в том, что у нескольких корреспондентов могут оказаться одинаковые экспоненты е.
Пусть, например, три корреспондента имеют попарно взаимно простые модули п1, п2, п3, и общую экспоненту е = 3. Если еще один пользователь посылает им некое циркулярное сообщение М, то криптоаналитик противника может получить в свое распоряжение три шифрованных текста yi М3 (mod ni), i = 1,2,3. Далее он может найти решение у системы сравнений
y y1(mod n1),
у y2(mod n2),
y y3(mod n3),
лежащее в интервале 0 < у < n1 • п2 • n3. По китайской теореме об остатках такое решение единственно, а так как М3 <n1 • n2 • п3, то у=М3. Само М можно найти, вычисляя кубический корень: М = .
Отметим, что выбор малой экспоненты расшифрования d также нежелателен в связи с возможностью определения d простым перебором. Известно также, что если d < , то экспоненту d легко найти, используя непрерывные дроби.