RSA: различия между версиями
[непроверенная версия] | [непроверенная версия] |
KOLANICH (обсуждение | вклад) Нет описания правки |
м удаление коммерческой ссылки из выходных данных литературы |
||
Строка 132: | Строка 132: | ||
|заглавие = '''Современная криптография: теория и практика''' |
|заглавие = '''Современная криптография: теория и практика''' |
||
|оригинал = Modern Cryptography: Theory and Practice |
|оригинал = Modern Cryptography: Theory and Practice |
||
|ссылка = |
|ссылка = |
||
|место = М. |
|место = М. |
||
|издательство = [[Вильямс (издательство)|«Вильямс»]] |
|издательство = [[Вильямс (издательство)|«Вильямс»]] |
||
Строка 143: | Строка 143: | ||
|заглавие = '''Практическая криптография''' |
|заглавие = '''Практическая криптография''' |
||
|оригинал = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems |
|оригинал = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems |
||
|ссылка = |
|ссылка = |
||
|издание = |
|издание = |
||
|место = М. |
|место = М. |
Версия от 17:19, 24 января 2008
RSA — криптографический алгоритм с открытым ключом.
RSA стал первым алгоритмом такого типа, пригодным и для шифрования и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений.
История
Описание RSA было опубликовано в 1977 году Рональдом Райвестом (Ronald Linn Rivest), Ади Шамиром (Adi Shamir) и Леонардом Адлеманом (Leonard Adleman) из Массачусетского Технологического Института (MIT).
Британский математик Клиффорд Кокс (Clifford Cocks), работавший в центре правительственной связи (GCHQ) Великобритании, описал аналогичную систему в 1973 году во внутренних документах центра, но эта работа не была раскрыта до 1977 года и Райвест, Шамир и Адлеман разработали RSA независимо от работы Кокса.
В 1983 году MIT был выдан патент 4405829 США, срок действия которого истёк 21 сентября 2000 года.
Описание алгоритма
Безопасность алгоритма RSA основана на трудности задачи разложения на множители. Алгоритм использует два ключа — открытый (public) и секретный (private), вместе открытый и соответствующий ему секретный ключи образуют пару ключей (keypair). Открытый ключ не требуется сохранять в тайне, он используется для зашифрования данных. Если сообщение было зашифровано открытым ключом, то расшифровать его можно только соответствующим секретным ключом.
Генерация ключей
Для того, чтобы сгенерировать пару ключей выполняются следующие действия:
- Выбираются два больших простых числа и
- Вычисляется их произведение
- Вычисляется Функция Эйлера
- Выбирается целое такое, что и взаимно простое с
- С помощью расширенного алгоритма Евклида находится число такое, что это значит, что при некотором целом .
Число называется модулем, а числа и — открытой и секретной экспонентами, соответственно. Пара чисел является открытой частью ключа, а — секретной. Числа и после генерации пары ключей могут быть уничтожены, но ни в коем случае не должны быть раскрыты.
Зашифрование и расшифрование
Для того, чтобы зашифровать сообщение вычисляется
- .
Число и используется в качестве шифртекста. Для расшифрования нужно вычислить
- .
Нетрудно убедиться, что при расшифровании мы восстановим исходное сообщение:
Из условия
следует, что
- для некоторого целого , следовательно
Согласно теореме Эйлера:
- ,
поэтому
Пример
Сгенерируем пару ключей. Выберем два простых числа
Вычислим модуль
Вычислим функцию Эйлера
Положим открытый показатель равным 3
С помощью расширенного алгоритма Евклида вычислим секретный показатель
Заметьте, что
Пара чисел (3, 9173503) образует открытую часть ключа, а число 6111579 является секретным ключом.
Зашифруем с помощью открытого ключа число :
Шифртекстом является число 4051753.
Для расшифрования вычисляем
в результате получаем исходное сообщение.
Цифровая подпись
RSA может использоваться не только для шифрования, но и для цифровой подписи. Подпись сообщения вычисляется с использованием секретного ключа по формуле:
Для проверки правильности подписи нужно убедиться, что выполняется равенство
Некоторые особенности алгоритма
Генерация простых чисел
Для нахождения двух больших простых чисел и , при генерации ключа, обычно используются вероятностные тесты чисел на простоту, которые позволяют быстро выявить и отбросить составные числа.
Для генерации и необходимо использовать криптографически надёжный генератор истинно случайных чисел. У нарушителя не должно быть возможности получить какую-либо информацию о значениях этих чисел.
и не должны быть слишком близки друг к другу, иначе можно будет их найти используя метод факторизации Ферма. Кроме того, необходимо выбирать «сильные» простые числа, чтобы нельзя было воспользоваться p-1 алгоритмом Полларда.
Дополнение сообщений
При практическом использовании необходимо некоторым образом дополнять сообщения. Отсутствие дополнений может привести к некоторым проблемам:
- значения и дадут при зашифровании шифртексты 0 и 1 при любых значениях и .
- при малом значении открытого показателя (, например) возможна ситуация, когда окажется, что . Тогда , и нарушитель легко сможет восстановить исходное сообщение вычислив корень степени из .
- поскольку RSA является детерминированным алгоритмом, т.е. не использует случайных значений в процессе работы, то нарушитель может использовать атаку с выбранным открытым текстом.
Для решения перечисленных проблем сообщения дополняются перед каждым зашифрованием некоторым случайным значением — солью. Дополнение выполняется таким образом, чтобы гарантировать, что , и . Кроме того, поскольку сообщение дополняется случайными данными, то зашифровывая один и тот же открытый текст мы каждый раз будем получать другое значение шифртекста, что делает атаку с выбранным открытым текстом невозможной.
Выбор значения открытого показателя
RSA работает значительно медленнее симметричных алгоритмов. Для повышения скорости шифрования открытый показатель выбирается небольшим, обычно 3, 17 или 65537. Эти числа в двоичном виде содержат только по две единицы, что уменьшает число необходимых операций умножения при возведении в степень. Например, для возведения числа в степень 17 нужно выполнить только 5 операций умножения:
Выбор малого значения открытого показателя может приводить к раскрытию сообщения, если оно отправляется сразу нескольким получателям, но эта проблема решается за счёт дополнения сообщений.
Выбор значения секретного показателя
Значение секретного показателя должно быть достаточно большим. В 1990 году Михаэль Винер (Michael J. Wiener) показал, что если и , то имеется эффективный способ вычислить по и . Однако, если значение выбирается небольшим, то оказывается достаточно большим и проблемы не возникает.
Длина ключа
Число n должно иметь размер не меньше 512 бит. На 2006 год система шифрования на основе RSA считается надёжной, начиная с размера N в 1024 бита.
Применение RSA
Система RSA используется для защиты программного обеспечения и в схемах цифровой подписи. Также она используется в открытой системе шифрования PGP.
Из-за низкой скорости шифрования (около 30 кбит/с при 512 битном ключе на процессоре 2 ГГц), сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным ключом (сеансовый ключ), а с помощью RSA шифруют лишь этот ключ.
Ссылки
- Справочное описание
- Menezes, Oorschot, Vanstone, Scott: Handbook of Applied Cryptography (бесплатно, в формате PDF)
Литература
- Menezes, Alfred; van Oorschot, Paul C.; Vanstone, Scott A. Handbook of Applied Cryptography. — CRC Press, October 1996. ISBN 0-8493-8523-7
- Венбо Мао. Современная криптография: теория и практика = Modern Cryptography: Theory and Practice. — М.: «Вильямс», 2005. — С. 768. — ISBN 0-13-066943-1.
- Нильс Фергюсон, Брюс Шнайер. Практическая криптография = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems. — М.: «Диалектика», 2004. — С. 432. — ISBN 0-471-22357-3.
- Шнайер, Брюс. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си — М.: Издательство ТРИУМФ, 2002 — 816с.:ил. ISBN 5-89392-055-4