Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика / Лекция 6.doc
Скачиваний:
225
Добавлен:
09.06.2015
Размер:
1.67 Mб
Скачать

2.1 Шифр rsa

Первой и наиболее известной криптографической системой с открытым ключом была предложенная в 1978 году так называемая система RSA. Ее название происходит от первых букв фамилий авторов Rivest, Shamir и Aldeman, которые придумали ее во время совместных исследований в Массачусетском технологическом институте в 1977 году. Она основана на трудности разложения очень больших целых чисел на простые сомножители. Международная сеть электронного перечисления платежей SWIFT уже требует от банковских учреждений, пользующихся ее услугами, применения именно этой криптографической системы.

Алгоритм RSA работает следующим образом:

  • Отправитель выбирает два очень больших простых числа Р и Q и вычисляет их произведение N = PQ; N называется модулем.

  • Затем он выбирает число Е, удовлетворяющее условию: 1< Е < (Р - 1)*( Q - 1) и не имеющее общих делителей кроме 1 (взаимно простое) с числом (Р - 1)*(Q - 1).

  • Затем он вычисляет число D таким образом, что (Е*D - 1) делится на (Р - 1)*(Q – 1).

Е – открытый (public) показатель

D – секретный (private) показатель.

(N; Е) – открытый (public) ключ

(N; D). – секретный (private) ключ.

Делители (факторы) Р и Q можно либо уничтожить либо сохранить вместе с секретным (private) ключом.

Если бы существовали эффективные методы разложения на сомножители (факторинга), то, разложив N на сомножители (факторы) Р и Q, можно было бы получить секретный (private) ключ D. Таким образом надежность криптосистемы RSA основана на трудноразрешимой – практически неразрешимой – задаче разложения n на сомножители (то есть на невозможности факторинга N) так как в настоящее время эффективного способа поиска сомножителей не существует.

Ниже описывается использование системы RSA для шифрования информации и создания цифровых подписей (практическое применение немного отличается).

Шифрование. Предположим, Алиса хочет послать Бобу сообщение M. Алиса создает зашифрованный текст С, возводя сообщение M в степень Е по модулю N: C = MЕ mod N, где Е и N – открытый (public) ключ Боба. Затем Алиса посылает С (зашифрованный текст) Бобу. Чтобы расшифровать полученный текст, Боб возводит полученный зашифрованный текст C в степень D по модулю N:

M = СD mod N;

зависимость между Е и D гарантирует, что Боб вычислит M верно. Так как только Боб знает D, то только он имеет возможность расшифровать полученное сообщение.

Приведем простой пример на малых простых числах Р = 2 и Q = 5. В этом случае N =PQ= 10. Выберем открытый ключ шифрования Е (< N). Е должно быть взаимно простым с (Р - 1)*(Q – 1) = 4 = 22. Следовательно, E = 3, 7, или 9. Примем E = 3. Вычислим секретный ключ шифрования из условия: ED mod (P-1)(Q-1) = 1 или 3D mod 4 = 1. Возможные значения D, удовлетворяющие этому условию: D = 3 7 11 ... Пусть D = 3. Возьмём в качестве сообщения M (M < N) число 7. Тогда с помощью открытого ключа получим шифровку:

C = MЕ mod N = 73 mod 10 = 343 mod 10 = 3.

Получатель расшифровывает её с помощью секретного ключа:

M = СD mod N = 33 mod 10 = 27 mod 10 = 7.

Цифровая подпись. Предположим, Алиса хочет послать Бобу сообщение M , причем таким образом, чтобы Боб был уверен, что сообщение не было взломано и что автором сообщения действительно является Алиса. Алиса создает цифровую подпись S возводя M в степень D по модулю N:

S = MD mod N,

где D и N – частный ключ Алисы.

Она посылает M и S Бобу. Чтобы проверить подпись, Боб возводит S в степень Е и умножает на модуль N: M = SЕ mod N, где Е и N – открытый (public) ключ Алисы.

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

Как при шифровании и расшифровке, так и при создании и проверке подписи алгоритм RSA по существу состоит из возведения в степень, которое выполняется как ряд умножений.

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

Если k – количество битов в модуле, то в обычно используемых для RSA алгоритмах количество шагов необходимых для выполнения операции с открытым (public) ключом пропорционально второй степени k, количество шагов для операций секретного (private) ключа – третьей степени k, количество шагов для операции создания ключей – четвертой степени k.

Методы "быстрого умножения" – например, методы основанные на Быстром Преобразовании Фурье Fourier (FFT – Fast Fourier Transform) – выполняются меньшим количеством шагов; тем не менее они не получили широкого распространения из-за сложности программного обеспечения, а также потому, что с типичными размерами ключей они фактически работают медленнее. Однако производительность и эффективность приложений и оборудования реализующих алгоритм RSA быстро увеличиваются.

Алгоритм RSA намного медленнее чем DES и другие алгоритмы блокового шифрования. Программная реализация DES работает быстрее по крайней мере в 100 раз и от 1,000 до 10,000 – в аппаратной реализации (в зависимости от конкретного устройства).

Соседние файлы в папке Информатика