Алгоритм RSA предложили в 1978г. три автора Р. Райвест (Rivest), A. Шамир (Shamir) и А. Адлеман (Adieman). Алгоритм получил свое название по первым буквам фамилий его авторов. Алгоритм RSA стал первым полноценным алгоритмом с открытым ключом, который может работать как к режиме шифрования данных, так и в режиме электронной цифровой подписи.
Надежность алгоритма основывается на трудности факторизации больших чисел и трудности вычисления дискретных логарифмов.
В криптосистеме RSA открытый ключ , секретный ключ , сообщение М и криптограмма С принадлежат множеству целых чисел
={0,1,2,.....,N-1} | (7.5) |
где N - модуль:
N=PQ | (7.6) |
Здесь Р и Q-случайные большие простые числа. Для обеспечения максимальной безопасности выбирают Р и Q равной длины и хранят в секрете.
Множество с операциями сложения и умножения по модулю N образует арифметику по модулю N.
Открытый ключ Кв выбирают случайным образом так, чтобы, выполнялись условия:
, НОД | (7.7) |
(7.8) |
где - функция Эйлера
Функция Эйлера указывает количество положительных целых чисел в интервале от 1 до N, которые взаимно просты с N. Второе из указанных выше условий означает, что открытый ключ и функция Эйлера должны быть взаимно простыми.
Далее, используя расширенный алгоритм Евклида, вычисляют секретный ключ , такой, что
(7.9) |
или
Это можно осуществить, так как получатель В знает пару простых чисел (P,Q) и может легко найти , и N должны быть взаимно простыми.
Открытый ключ используют для шифрования данных, а секретный ключ - для расшифрования.
Преобразование шифрования определяет криптограмму С через пару (открытый ключ , сообщение М) в соответствии со следующей формулой:
(7.10) |
В качестве алгоритма быстрого вычисления значения С используют ряд последовательных возведений в квадрат целого М и умножений на М с приведением по модулю N.
Обращение функции , т.е. определение значения М по известным значениям С, и N, практически не осуществимо при .
Однако обратную задачу, т.е. задачу расшифрования криптограммы С, можно решить, используя пару (секретный ключ , криптограмма С) по следующей формуле:
(7.11) |
Процесс расшифрования можно записать так:
(7.12) |
Подставляя в (7.12) значения (7.10) и (7.11), получаем:
(7.13) |
Величина играет важную роль в теореме Эйлера, которая утверждает, что
(7.14) |
Сопоставляя выражения (7.13) и (7.14), получаем или, что то же самое,
Именно поэтому для вычисления секретного ключа используют соотношение (7.9).
Таким образом, если криптограмму возвести в степень , то в результате восстанавливается исходный открытый текст М, так как
Таким образом, получатель D, который создает криптосистему, защищает два параметра: секретный ключ и пару чисел (P,Q), произведение которых, дает значение модуля N. С другой стороны, получатель В открывает значение модуля N и открытый ключ .
Противнику известны лишь значения и N. Если бы он смог разложить число К на множители Р и Q, то он узнал бы "потайной ход" - тройку чисел {Р, Q, }, вычислил значение функции Эйлера =(P-1)(Q-1) и определил значение секретного ключа . Однако, разложение очень большого N на множители вычислительно не осуществимо (при условии, что длины выбранных Р и Q составляют не менее 100 десятичных знаков).
^ Процедуры шифрования и расшифрования в криптосистеме RSA
Предположим, что пользователь А хочет передать пользователю В сообщение в зашифрованном виде, используя криптосистему RSA. В таком случае пользователь А выступает в роли отправителя сообщения, а пользователь В - в роли получателя. Криптосистему RSA должен сформировать получатель сообщения, т.е. пользователь В. Последовательность действий пользователей В и А.
1. Пользователь В выбирает два произвольных больших простых числа Р и Q.
2. Пользователь В вычисляет значение модуля N=РQ.
3. Пользователь В вычисляет функцию Эйлера =(P-l)(Q-l) и выбирает случайным образом значение открытого ключа К, с учетом выполнения условий: , НОД
4. Пользователь В вычисляет значение секретного ключа , используя
5. расширенный алгоритм Евклида при решении сравнения .
6. Пользователь В пересылает пользователю А пару чисел (N, ) по
7. незащищенному каналу. Если пользователь А хочет передать пользователю В сообщение М, он выполняет следующие шаги.
8. Пользователь А разбивает исходный открытый текст М на блоки, каждый из которых может быть представлен в виде числа = 0,1,2,...,N-1.
9. Пользователь А шифрует текст, представленный в виде
10. последовательности чисел , по формуле и отправляет криптограмму C1 C2, C3,..., Ci,.., пользователю В.
11. Пользователь В расшифровывает принятую криптограмму C1, С2, Сз,...,Ci,...., используя секретный ключ Кв, по формуле .
В результате будет получена последовательность чисел , которые представляют собой исходное сообщение М. Чтобы алгоритм RSA имел практическую ценность, необходимо иметь возможность без существенных затрат генерировать большие простые числа, уметь оперативно вычислять значения ключей и .
^ Безопасность и быстродействие криптосистемы RSA.
Безопасность алгоритма RSA базируется на трудности решения задачи факторизации больших чисел, являющихся произведениями двух больших простых чисел.
Один из наиболее быстрых алгоритмов, известных в настоящее время, алгоритм NFS (Number Field Sieve) может выполнить факторизацию большого числа N (с числом десятичных разрядов больше 120) за число шагов, оцениваемых величиной 1/3 2/3 e2(ln n) (In (In n)).
Разработчикам криптоалгоритмов с открытым ключом на базе RSA приходится избегать применения чисел длиной менее 200 десятичных разрядов. Самые последние публикации предлагают применять для этого числа длиной не менее 250-300 десятичных разрядов.
Сделана попытка расчета оценок безопасных длин ключей асимметричных криптосистем на ближайшие 20 лет исходя из прогноза развития компьютеров и их вычислительной мощности, а также возможного совершенствования алгоритмов факторизации. Эти оценки (табл. 7.1) даны для трех групп пользователей (индивидуальных пользователей, корпораций и государственных организаций), в соответствии с различием требований к их информационной безопасности.
Криптосистемы RSA реализуются как аппаратным, так и программным путем. Для аппаратной реализации операций зашифрования и расшифрования RSA разработаны специальные процессоры. Эти процессоры, реализованные на сверхбольших интегральных схемах (СБИС), позволяют выполнять операции RSA, связанные с возведением больших чисел в колоссально большую степень по модулю N, за относительно короткое время. И все же аппаратная реализация RSA примерно в 1000 раз медленнее аппаратной реализации симметричного криптоалгоритма DES.
Программная реализация RSA примерно в 100 раз медленнее программной реализации DBS. Малое быстродействие криптосистем RSA ограничивает область их применения, но не перечеркивает их ценность.