
- •Глава 36. Схемы шифрования rsa, Эль Гамаля, Полига-Хеллмана
- •Часть 5. Шифры с открытым ключом шифрования
- •Глава 36.
- •36.1. Основные понятия модулярной арифметики
- •Основные способы нахождения обратных величин a–1 1 (mod n).
- •36.2. Криптосистема шифрования данных rsa
- •X((Pх)) y (modQ).
- •36.3. Схема шифрования Эль Гамаля
- •36.4. Схема шифрования Полига-Хеллмана
- •Глава 37.
- •Глава 38.
- •38.1. Основные принципы построения протоколов идентификации и аутентификации
- •Доказательство проверяемого a:
- •38.3. Типовые схемы идентификации и аутентификации пользователя информационной системы
- •38.4. Особенности применения пароля для аутентификации пользователя
- •38.5. Взаимная проверка подлинности пользователей
- •38.6. Протоколы идентификации с нулевой передачей знаний
- •38.7. Упрощенный вариант схемы идентификации с нулевой передачей знаний. Протокол Фиата-Шамира
- •38.8. Параллельная схема идентификации с нулевой передачей знаний (с нулевым раскрытием)
- •38.9. Модифицированный протокол Фиата-Шамира
- •38.10. Схема идентификации Шнорра
- •38.11. Схема идентификации Гиллоу-Куискуотера
- •38.12. Способ проверки подлинности, где не требуется предъявлять секретный пароль
- •38.13. Проверка подлинности с помощью систем шифрования с открытым ключом
- •38.14. Биометрическая идентификация и аутентификация пользователя
- •Глава 39.
- •39.1. Основные понятия
- •39.4. Однонаправленные хэш-функции
- •Схемы безопасного хэширования, у которых длина хэш-значения равна длине блока
- •39.5. Отечественный стандарт хэш-функции
- •Глава 40.
- •40.1. Электронная цифровая подпись для аутентификации данных
- •40.2. Алгоритмы электронной цифровой подписи
- •40.3. Алгоритм цифровой подписи rsa
- •Обобщенная схема цифровой подписи rsa
- •40.4. Недостатки алгоритма цифровой подписи rsa
- •40.5. Алгоритм цифровой подписи Эль – Гамаля
- •40.6. Цифровая подпись Эль-Гамаля
- •40.7. Особенности протокола Эль-Гамаля
- •40.8. Алгоритм цифровой подписи dsa
- •40.10. Цифровые подписи с дополнительными функциональными свойствами
- •40.11. Алгоритм неоспоримой цифровой подписи д.Чома
- •40.12. Протокол подписи, позволяющий отправителю сообщения не предоставлять право получателю доказывать справедливость своей подписи
- •Глава 41.
- •41.1. Генерация ключей
- •41.2. Концепция иерархии ключей
- •41.3. Распределение ключей
- •41.4. Протокол аутентификации и распределения ключей для симметричных криптосистем
- •41.5. Протокол для асимметричных криптосистем с использованием сертификатов открытых ключей
- •41.6. Использование криптосистемы с открытым ключом для шифрования и передачи секретного ключа симметричной криптосистемы
- •Длины ключей для симметричных и асимметричных криптосистем при одинаковой их криптостойкости
- •41.7. Использование системы открытого распределения ключей Диффи-Хеллмана
- •41.8. Протокол skip управления криптоключами
- •Глава 42.
- •42.1. Основные понятия конечных полей
- •42.2. Криптографические протоколы. Протокол Диффи-Хеллмана
- •42.3. Протокол электронной цифровой подписи
36.2. Криптосистема шифрования данных rsa
Алгоритм RSA предложили в 1978 г. три автора: Р. Райвест (Rivest), А. Шамир (Shamir) и А. Адлеман (Adleman). Алгоритм получил свое название по первым буквам фамилий его авторов. Алгоритм RSA стал первым полноценным алгоритмом с открытым ключом, который может работать как в режиме шифрования данных, так и в режиме электронной цифровой подписи. Надежность алгоритма основывается на трудности факторизации больших чисел.
В криптосистеме RSA открытый ключ Ко, секретный ключ kс, сообщение М и криптограмма С принадлежат кольцу целых чисел Z/N по модулю N
Z/N = {0, 1, 2, ..., N–1},
где N= P∙Q, P и Q – случайные большие простые числа. Открытый ключ Ко выбирают случайным образом так, чтобы выполнялись условия:
1< Ко (N),
НОД (Ко, (N)) =1,
(N)=(P –1) (Q –1),
где (N) – функция Эйлера – количество положительных целых чисел в интервале от 1 до N взаимно простых с N.
В силу НОД (Ко, (N)) =1 однозначно, используя расширенный алгоритм Евклида, вычисляется секретный ключ kс, такой, что
kс Ко 1 (mod (N)).
Это
можно осуществить, так как получатель
В знает пару простых чисел (P,Q) и может
легко найти
(N). Открытый ключ Ко
используют
для шифрования данных, а секретный ключ
kс
– для расшифрования. Криптограмма С
определяется через пару (открытый ключ
Ко,
сообщение М) C =
(mod
N). В качестве алгоритма быстрого
вычисления значения C используют ряд
последовательных возведений в квадрат
целого M и умножений на M с приведением
по модулю N.
Обращение
функции C=(mod
N), то есть определение значения M по
известным значениям C, Кв
и N, практически не осуществимо при N
2
512.
Однако обратную задачу,
т.е. задачу расшифрования криптограммы
С, можно решить, используя пару (секретный
ключ kс,
криптограмма С) по следующей формуле
расшифрования: М =
(mod
N).
Проведем подробное обоснование справедливости этой формулы. Процесс расшифрования можно записать так:
=
M
(mod
N).
Величина (N) играет важную роль в теореме Эйлера, которая утверждает, что если НОД(x, N)=1, то x(N) 1 (mod N), или в несколько более общей форме
xn(N)+1 x (mod N).
Но как раз из kс∙Ко 1 (mod (N)) следует kс∙Ко = n∙ (N)+1 при некотором n. Поэтому для (М, N)=1 вытекает
=
М
n(N)+1=
M
(mod N).
При (М, N)≠1 следует воспользоваться следующим утверждением: если P и Q – большие простые числа, К0∙kc(mod(N)) = 1, то для любого х, 0 x<N, N=P∙Q:
(х)
(modN)
= x.
ДОКАЗАТЕЛЬСТВО. Пусть НОД(х,N) =1. Тогда
(х)
= х
= x
.
Поэтому по теореме Эйлера
(х)
(modN)
= (х(x
(modN)))(modN)=
(x1)(modN)
= x.
Если
НОД(х,N)
1, то или х=0(modN),
или НОД(х,N)
= P,
или НОД(х,N)
=Q.
Если
х
=0(modN),
то х=0(modN).
Пусть НОД(х,N)=P.
Тогда х=х
P,
где (х
,
N)
=1.
х=
x
=
Px
P
x
y(modP∙Q).
Так
как (х,
N)
=1, то x
=1
(modN).
Если
xP
x
P=y(mod(P∙Q)),
то x
P
x
P=PQc+y,
следовательно,
y=Py
.
Тогда x
P
x
y
(modQ).
Следовательно,
X((Pх)) y (modQ).
По
теореме Ферма z
1 (modQ).
Поэтому x
y
(modQ)
и
x=
xP(mod(PQ))
= y
(modN)
х
(modN),
что и требовалось доказать.
Открытый и шифрованный тексты эффективно вычисляются, если известны Ко и kc при помощи алгоритма быстрого возведения в степень. Если искать секретный ключ kc по известному открытому ключу Ко, то надо знать (N).
Таким образом, получатель В, который создает криптосистему, защищает два параметра: 1) секретный ключ kв и 2) пару чисел (P,Q), произведение которых дает значение модуля N. С другой стороны, получатель В открывает значение модуля N и открытый ключ Кв.
Противнику известны лишь значения Кв и N. Если бы он смог разложить число N на множители P и Q, то он узнал бы «потайной ход» – тройку чисел {P,Q,Кв}, вычислил значение функции Эйлера (N)=(P –1) (Q –1)
и определил значение секретного ключа kв.
Однако, как уже отмечалось, разложение очень большого N на множители вычислительно не осуществимо (при условии, что длины выбранных P и Q составляют не менее 100 десятичных знаков). Для обеспечения максимальной безопасности выбирают P и Q равной длины и хранят в секрете.
Процедуры шифрования и расшифрования в криптосистеме RSA. Предположим, что пользователь А хочет передать пользователю В сообщение в зашифрованном виде, используя криптосистему RSA. В таком случае пользователь А выступает в роли отправителя сообщения, а пользователь В – в роли получателя. Как отмечалось выше, криптосистему RSA должен сформировать получатель сообщения, т.е. пользователь В. Рассмотрим последовательность действий пользователя В и пользователя А.
1. Пользователь В выбирает два произвольных больших простых числа P и Q.
2. Пользователь В вычисляет значение модуля N = P∙Q.
3. Пользователь В вычисляет функцию Эйлера (N) = (P –1) (Q –1)
и выбирает случайным образом значение открытого ключа Кo с учетом выполнения условий: 1< Кo (N), НОД (Кo, (N)) =1.
4. Пользователь В вычисляет значение секретного ключа kc, используя расширенный алгоритм Евклида при решении сравнения kс Ко–1 (mod (N)).
5. Пользователь В пересылает пользователю А пару чисел (N, Кo) по незащищенному каналу.
Если пользователь А хочет передать пользователю В сообщение М, он выполняет следующие шаги.
6.
Пользователь А разбивает исходный
открытый текст М на блоки, каждый из
которых может быть представлен в виде
числа Мi
{0,
1, 2, ..., N –1}.
7.
Пользователь А шифрует текст, представленный
в виде последовательности чисел Мi
по формуле Ci=(mod
N) и отправляет криптограмму С1,
С2,
С3,
..., Ci,
... пользователю В.
8. Пользователь В расшифровывает принятую криптограмму С1, С2, С3, ..., Ci, ...,
используя
секретный ключ kc,
по формуле Мi
=
(mod
N).
В результате будет получена последовательность чисел Мi, которые представляют собой исходное сообщение М. Чтобы алгоритм RSA имел практическую ценность, необходимо иметь возможность без существенных затрат генерировать большие простые числа, уметь оперативно вычислять значения ключей Кo и kc.