Алгоритм RSA предложили в 1978 г. три автора: Р.Райвест (Rivest), А.Шамир (Shamir) и А.Адлеман (Adleman). Алгоритм получил свое название по первым буквам фамилий его авторов. Алгоритм RSA стал первым полноценным алгоритмом с открытым ключом, который может работать как в режиме шифрования данных, так и в режиме электронной цифровой подписи.
Надежность алгоритма основывается на трудности факторизации больших чисел и трудности вычисления дискретных логарифмов.
В криптосистеме RSA открытый ключ Кв, секретный ключ kв, сообщение М и криптограмма С принадлежат множеству це-лых чисел
ZN = {0, 1, 2,..., N –1}, (4.5)
где N – модуль:
N = P*Q. (4.6)
Здесь P и Q – случайные большие простые числа. Для обеспечения максимальной безопасности выбирают P и Q равной длины и хранят в секрете.
Множество ZN с операциями сложения и умножения по модулю N образует арифметику по модулю N.
Открытый ключ Кв выбирают случайным образом так, чтобы выполнялись условия:
1< Кв £ j (N), НОД (Кв, j (N)) =1, (4.7)
j (N)=(P –1) (Q –1), (4.8)
где j (N) – функция Эйлера.
Функция Эйлера j (N) указывает количество положительных целых чисел в интервале от 1 до N, которые взаимно проcты с N.
Второе из указанных выше условий означает, что открытый ключ Кв и функция Эйлера j (N) должны быть взаимно простыми.
Далее, используя расширенный алгоритм Евклида, вычисляют секретный ключ kв, такой, что
kв * Кв º 1 (mod j (N)) (4.9)
или
kв = Кв–1 (mod (P –1)(Q –1)).
Это можно осуществить, так как получатель В знает пару простых чисел (P,Q) и может легко найти j (N). Заметим, что kв и N должны быть взаимно простыми.
Открытый ключ Кв используют для шифрования данных, а секретный ключ kв – для расшифрования.
Преобразование шифрования определяет криптограмму С через пару (открытый ключ Кв, сообщение М) в соответствии со следующей формулой:
C = (M) = EВ (M) = (mod N). (4.10)
В качестве алгоритма быстрого вычисления значения C используют ряд последовательных возведений в квадрат целого M и умножений на M с приведением по модулю N.
Обращение функции C = (mod N), т.е. определение значения M по известным значениям C, Кв и N, практически не осуществимо при N» 2 512.
Однако обратную задачу, т.е. задачу расшифрования криптограммы С, можно решить, используя пару (секретный ключ kв, криптограмма С) по следующей формуле:
М = (С) = DВ (C) = (mod N). (4.11)
Процесс расшифрования можно записать так:
DВ(EВ (М)) = М. (4.12)
Подставляя в (4.12) значения (4.10) и (4.11), получаем:
= М (mod N)
или
= M (mod N). (4.13)
Величина j (N) играет важную роль в теореме Эйлера, которая утверждает, что если НОД (x, N) =1, то
xj(N) º 1 (mod N),
или в несколько более общей форме
xn×j(N)+1 º x (mod N). (4.14)
Сопоставляя выражения (4.13) и (4.14), получаем
Кв * kв = n * j (N) +1
или, что то же самое,
Кв * kв º1 (mod j (N)).
Именно поэтому для вычисления секретного ключа kв используют соотношение (4.9).
Таким образом, если криптограмму
C = (mod N)
возвести в степень kв, то в результате восстанавливается исходный открытый текст М, так как
= = Mn×j(N)+1 º M (mod N).
Таким образом, получатель В, который создает криптосистему, защищает два параметра: 1) секретный ключ kв и 2) пару чисел (P,Q), произведение которых дает значение модуля N. С другой стороны, получатель В открывает значение модуля N и открытый ключ Кв.
Противнику известны лишь значения Кв и N. Если бы он смог разложить число N на множители P и Q, то он узнал бы "потайной ход" – тройку чисел {P,Q,Кв}, вычислил значение функции Эйлера
j (N) = (P –1) (Q –1)
и определил значение секретного ключа kв.
Однако, как уже отмечалось, разложение очень большого N на множители вычислительно не осуществимо (при условии, что длины выбранных P и Q составляют не менее 100 десятичных знаков).