Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асимметричные криптоалгоритмы.doc
Скачиваний:
17
Добавлен:
08.09.2019
Размер:
133.12 Кб
Скачать

1.1Алгоритм rsa

Алгоритм RSA стоит у истоков асимметричной криптографии. Он был предложен тремя исседователями-математиками Рональдом Ривестом (R.Rivest), Ади Шамиром (A.Shamir) и Леонардом Адльманом (L.Adleman) в 1977-1978 годах. [7]

Безопасность RSA основана на трудности разложения на множители больших чисел. Открытый и закрытый ключи являются функциями двух больших (100-200 разрядов) простых чисел. Предполагается, что восстановление открытого текста по шифртексту и открытому ключу эквивалентно разложению на множители двух больших чисел.

Первым этапом любого асимметричного алгоритма является создание пары ключей: открытого и закрытого и распространение открытого ключа «по всему миру».

Для генерации двух ключей используются два больших случайных простых числа p и q. Для максимальной безопасности выбирайте p и q равной длины. Рассчитывается произведение n = p*q

Затем случайным образом выбирается ключ шифрования е такой, что е и (p-1)(q-1) являются взаимно простыми числами.

Наконец расширенный алгоритм Эвклида используется для вычисления ключа дешифрования d, такого что

e*d (mod (p-1)(q-1)) = 1.

Другими словами

d = e-1mod (p-1)(q-1).

Заметим, что d и n также взаимно простые числа. Числа е и n – это открытый ключ, а число d – закрытый. Два простых числа p и q больше не нужны. Они должны быть отброшены, но не должны быть раскрыты.

Как же производится собственно шифрование с помощью этих чисел?

Отправитель разбивает свое сообщение на блоки, меньшие n (для двоичных данных выбирается самая большая степень числа 2, меньшая n).

Формула шифрования выглядит так

ci=((mi)e)mod n.

Блоки ci и есть зашифрованное сообщение Их можно спокойно передавать по открытому каналу, поскольку операция возведения в степень по модулю простого числа, является необратимой математической задачей. Обратная ей задача носит название «логарифмирование в конечном поле» и является на несколько порядков более сложной задачей. То есть даже если злоумышленник знает числа e и n, то по ci прочесть исходные сообщения mi он не может никак, кроме как полным перебором mi.

А вот на приемной стороне процесс дешифрования все же возможен, и поможет нам в этом хранимое в секрете число d.

Для расшифровки сообщения возьмите каждый зашифрованный блок ci и вычислите

mi = ((ci)d)mod n.

Достаточно давно была доказана теорема Эйлера, частный случай которой утверждает, что если число n представимо в виде двух простых чисел p и q, то для любого x имеет место равенство (x(p-1)(q-1))mod n = 1, следовательно

(ci)d = (mie)d = mied = mi mi k(p-1)(q-1) = mi*1 = mi все (mod n), то формула восстанавливает сообщение.

На самом деле операции возведения в степень больших чисел достаточно трудоемки для современных процессоров, даже если они производятся по оптимизированным по времени алгоритмам. Поэтому обычно весь текст сообщения кодируется обычным блочным шифром (намного более быстрым), но с использованием ключа сеанса, а вот сам ключ сеанса шифруется как раз асимметричным алгоритмом с помощью открытого ключа получателя и помещается в начало файла.

Пример Зашифруем сообщение “ШИФР”. Для простоты будем использовать маленькие числа (на практике применяются гораздо большие).

  1. Выберем p=3 и q=17.

  2. Определим n=3*17=51

  3. Найдем (p-1)(q-1)=2*16=32.

  4. Выберем числа е и d из уравнения e*d (mod(p-1)(q-1)) = 1. Это означает, что d*e = 1 + k(p-1)*(q-1). При k=1 числами e и d могут быть 11 и 3. Действительно, 11*3 = 1+32.

  5. Представим шифруемое сообщение как последовательность целых чисел с помощью отображения: Ш25, И9, Ф21, Р17. Тогда сообщение принимает вид (25, 9, 17).

  6. Зашифруем сообщение с помощью ключа {3, 51}.

ШТ1 = (253) (mod 51) = 15625 (mod 51) = 19,

ШТ2 = (93) (mod 51) = 729 (mod 51) = 15,

ШТ3 = (213) (mod 51) = 9261 (mod 51) = 30,

ШТ4 = (173) (mod 51) = 4913 (mod 51) = 17.

Расшифруем полученное зашифрованное сообщение (19, 15, 30, 17) на основе закрытого ключа {11, 51}:

ИТ1 = (1911) (mod 51) = 116490258898219 (mod 51) = 25,

ИТ2 = (1511) (mod 51) = 8649755859375 (mod 51) = 9,

ИТ3 = (3011) (mod 51) = 17714700000000000 (mod 51) = 21,

ИТ4 = (1711) (mod 51) = 34271896307633 (mod 51) = 17.