Процедуры шифрования и расшифрования в криптосистеме RSA

В реальных системах алгоритм RSA реализуется следующим обра­зом. Предположим, что пользователь А хочет передать пользова­телю В сообщение в зашифрованном виде, используя криптосистему RSA. В таком случае пользователь А выступает в роли отправителя сообщения, а пользо­ватель В - в роли получателя. Криптосистему RSA должен сформировать по­лучатель сообщения, т.е. пользователь В, так как в этом случае не будет необходимости в передаче секретного ключа. Рассмотрим последователь­ность действий пользователя В и пользователя А.

Формирование критпосистемы (на строне получателя информа­ции) состоит в выборе параметров алгоритма и вычислении пары ключей:

1. Пользователь В выбирает два больших простых числа p и q. Это секретные параметры алгоритма, они хранятся в секрете на стороне получатателя.

2. Пользователь В вычисляет значение модуля n криптосистемы как результат умножения первых двух чисел:

n = р · q.

Это общедоступный параметр криптосистемы. Иногда его включают в открытый ключ.

3. Пользователь В, зная секретные параметры алгоритма p и q, вычисля­ет функцию Эйлера:

j (n)=(p-1)(q-1)

и выбирает случайным образом простое число e как значение открытого ключа Ко с учетом выполнения условий:

Ко < j (n) и НОД(Ко , j (n))=1.

4. Пользователь В вычисляет значение секретного ключа Кс = d при решении сра­внения

Кс º Ко -1 mod j (n).

Для вычисления обратного элемента в кольце Zj (n ) используют частный режим работы расширенного алгоритма Евклида для определения НОД. Это можно осуществить, так как получатель В знает пару простых чисел (p,q) и может легко найти j (n). Заметим, что Kc и n должны быть взаимно простыми.

(В принципе открытый и закрытый ключи можно поменять местами, главное, чтобы выполнялось соотношение e · d º1 mod j (n)).

5. Пользователь В пересылает пользователю А пару чисел { e,n } по незащищенному каналу.

Шифрование информации (на строне отправителя). Если пользователь А хочет передать пользователю В со­общение m, он выполняет следующие шаги.

6. Пользователь А разбивает исходный открытый текст m на блоки mi, i =1,…, N, каждый из которых может быть представлен в виде числа меньшего n

mi Î {0, 1, 2,..., n -1}.

7. Пользователь А шифрует текст, представленный в виде последо­вательности чисел mi с помощью ключа Ko = е по формуле

ci = mi е mod n

и отправляет криптограмму c1, …,ci. пользователю В.

Дешифрование информации (на строне получателя):

8. Пользователь В расшифровывает принятую криптограмму c1, ,ci, используя секретный ключ Кc = d, по формуле

mi = cid mod n.

В результате будет получена последовательность чисел, которые представляют собой исходное сообщение m.

Таким образом, когда получатель В, который создает криптоси­стему, он защищает следующие параметры:

1. секретный ключ Кс;

2. пару чисел (p, q);

Открытый ключ Ко и значение модуля n публикуются и доступны каждому, кто желает послать владельцу ключа сообщение, которое за­шиф­ровывается указанным алгоритмом. После шифрования сообще­ние невоз­можно раскрыть с помощью открытого ключа. Владелец же закрытого ключа без труда может расшифровать принятое сообщение. Противнику же длятого, чтобы определить значение секретного ключа Кc нужно су­меть разложить число n на множители р и q, чтобы узнать бы "потайной ход" и вычислить значение функ­ции Эйлера как j (n) = (p-1) (q-1).

Пример. Рассмотрим небольшой пример, иллюстрирующий применение алгоритма RSA. Зашифруем сообщение "САВ". Для простоты будем использовать маленькие числа (на практике применяются гораздо большие).

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

Определим n =3·11=33.

Найдем j (n) = (p -1)(q -1)= 2·10 = 20.

Выберем в качестве секретного ключа d произвольное число взаимно простое с j (n)=20, например, d =3.

Выберем открытый ключ е = 7. В качестве такого числа может быть взято любое число, для которого удовлетворяется соотношение

е · d mod j (n) = 7·3 mod 20 = 1.

9) Представим шифруемое сообщение как последовательность целых чи­сел с помощью отображения: А=1, В=2, С=3. Тогда сообщение прини­мает вид (3,1,2). Зашифруем сообщение с помощью ключа { е =7, n =33}:

ШТ1 = (37) mod 33 = 2187 mod 33 = 9,

ШТ2 = (17) mod 33 = 1 mod 33 = 1,

ШТ3 = (27) mod 33 = 128 mod 33 = 29.

10) Расшифруем полученное зашифрованное сообщение (9, 1, 29) на основе закрытого ключа { d =3, n =33}:

ИТ1 = (93) mod 33 = 729 mod 33 = 3,

ИТ2= (13) mod 33 = 1 mod 33 = 1,

ИТ3 = (293) mod 33 = 24389 mod 33 = 2.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: