Алгоритм RSA
Алгоритм RSA стоит у истоков асимметричной криптографии. Он был
предложен тремя исседователями-математиками Рональдом Ривестом (R.Rivest)
, Ади Шамиром (A.Shamir) и Леонардом Адльманом (L.Adleman) в 1977-78
годах.
Первым этапом любого асимметричного алгоритма является создание
пары ключей : открытого и закрытого и распространение открытого
ключа "по всему миру". Для алгоритма RSA этап создания ключей состоит
из следующих операций:
- Выбираются два простых (!) числа p и q
- Вычисляется их произведение n(=p*q)
- Выбирается произвольное число e (e<n), такое, что НОД(e,(p-1)(q-1))=1,
то есть e должно быть взаимно простым с числом (p-1)(q-1).
- Методом Евклида решается в целых числах (!) уравнение e*d+(p-1)(q-1)*y=1.
Здесь неизвестными являются переменные d и y метод Евклида
как раз и находит множество пар (d,y), каждая из которых является
решением уравнения в целых числах.
- Два числа (e,n) публикуются как открытый ключ.
- Число d хранится в строжайшем секрете это и есть закрытый
ключ, который позволит читать все послания, зашифрованные с помощью
пары чисел (e,n).
Как же производится собственно шифрование с помощью этих чисел :
- Отправитель разбивает свое сообщение на блоки, равные k=[log2(n)]
бит, где квадратные скобки обозначают взятие целой части от дробного
числа.
- Подобный блок, как Вы знаете, может быть интерпретирован как
число из диапазона (0;2k-1). Для каждого такого числа
(назовем его mi) вычисляется выражение ci=((mi)e)mod
n. Блоки ci и есть зашифрованное сообщение Их можно
спокойно передавать по открытому каналу, поскольку.операция возведения
в степень по модулю простого числа, является необратимой математической
задачей. Обратная ей задача носит название "логарифмирование в
конечном поле" и является на несколько порядков более сложной
задачей. То есть даже если злоумышленник знает числа e и n, то
по ci прочесть исходные сообщения mi он
не может никак, кроме как полным перебором mi.
А вот на приемной стороне процесс дешифрования все же возможен,
и поможет нам в этом хранимое в секрете число d. Достаточно давно
была доказана теорема Эйлера, частный случай которой утвержает,
что если число n представимо в виде двух простых чисел p и q, то
для любого x имеет место равенство (x(p-1)(q-1))mod n
= 1. Для дешифрования RSA-сообщений воспользуемся этой формулой.
Возведем обе ее части в степень (-y) : (x(-y)(p-1)(q-1))mod
n = 1(-y) = 1. Теперь умножим обе ее части на x :
(x(-y)(p-1)(q-1)+1)mod n = 1*x = x.
А теперь вспомним как мы создавали открытый и закрытый ключи.
Мы подбирали с помощью алгоритма Евклида d такое, что e*d+(p-1)(q-1)*y=1,
то есть e*d=(-y)(p-1)(q-1)+1. А следовательно в последнем выражении
предыдущего абзаца мы можем заменить показатель степени на число
(e*d). Получаем (xe*d)mod n = x. То есть для того чтобы
прочесть сообщение ci=((mi)e)mod
n достаточно возвести его в степень d по модулю m : ((ci)d)mod
n = ((mi)e*d)mod n = mi.
На самом деле операции возведения в степень больших чисел достаточно
трудоемки для современных процессоров, даже если они производятся
по оптимизированным по времени алгоритмам. Поэтому обычно весь текст
сообщения кодируется обычным блочным шифром (намного более быстрым),
но с использованием ключа сеанса, а вот сам ключ сеанса шифруется
как раз асимметричным алгоритмом с помощью открытого ключа получателя
и помещается в начало файла.
Назад | Содержание
| Вперед
|