RSA
RSA (буквенная аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.
Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других.[1]
Содержание |
[править] История
Опубликованная в ноябре 1976 года статья Уитфилда Диффи и Мартина Хеллмана «Новые направления в криптографии» (англ. «New Directions in Cryptography»)[2] перевернула представление о криптографических системах, заложив основы криптографии с открытым ключом. Разработанный впоследствии алгоритм Диффи — Хеллмана позволял двум сторонам получить общий секретный ключ, используя незащищенный канал связи. Однако этот алгоритм не решал проблему аутентификации. Без дополнительных средств пользователи не могли быть уверены, с кем именно они сгенерировали общий секретный ключ.
Изучив эту статью, трое учёных Рональд Ривест (англ. Ronald Linn Rivest), Ади Шамир (англ. Adi Shamir) и Леонард Адлеман (англ. Leonard Adleman) из Массачусетского Технологического Института (MIT) приступили к поискам математической функции, которая бы позволяла реализовать сформулированную Уитфилдом Диффи и Мартином Хеллманом модель криптографической системы с открытым ключом. После работы над более чем 40 возможными вариантами, им удалось найти алгоритм, основанный на различии в том, насколько легко находить большие простые числа и насколько сложно раскладывать на множители произведение двух больших простых чисел, получивший впоследствии название RSA. Система была названа по первым буквам фамилий её создателей.
В августе 1977 года в колонке «Математические игры» Мартина Гарднера в журнале Scientific American, с разрешения Рональда Ривеста[3] появилось первое описание криптосистемы RSA.[4] Читателям также было предложено расшифровать английскую фразу, зашифрованную описанным алгоритмом:
- 9686
- 1477
- 8829
- 7431
- 0816
- 3569
- 8962
- 1829
- 9613
- 1409
- 0575
- 9874
- 2982
- 3147
- 8013
- 9451
- 7546
- 2225
- 9991
- 6951
- 2514
- 6622
- 3919
- 5781
- 2206
- 4355
- 1245
- 2093
- 5708
- 8839
- 9055
- 5154
В качестве открытых параметров системы были использованы числа n=1143816...6879543 (129 десятичных знаков, 425 бит, также известно как RSA-129) и e=9007. За расшифровку была обещана награда в 100 долларов США. По заявлению Ривеста, для факторизации числа потребовалось бы более 40 квадриллионов лет.[5][1] Однако чуть более чем через 15 лет, 3 сентября 1993 года было объявлено о старте проекта распределённых вычислений с координацией через электронную почту по нахождению сомножителей числа RSA-129 и решению головоломки. На протяжении полугода более 600 добровольцев из 20 стран жертвовали процессорное время 1600 машин (две из которых были факс-машинами). В результате были найдены простые множители и расшифровано исходное сообщение, которое представляет собой фразу «THE MAGIC WORDS ARE SQUEAMISH OSSIFRAGE» («Волшебные слова — это брезгливый ягнятник»).[6][7] Полученную награду победители пожертвовали в фонд свободного программного обеспечения.
После публикации Мартина Гарднера полное описание новой криптосистемы любой желающий мог получить, выслав по почте запрос Рональду Ривесту, с приложенным конвертом с обратным адресом и марками на 35 центов.[4] Полное описание новой криптосистемы было опубликовано в журнале «Communications of the ACM» в феврале 1978 года.[8]
Заявка на патент была подана 14 декабря 1977 года, в качестве владельца был указан MIT. Патент 4405829 был выдан 20 сентября 1983 года, а 21 сентября 2000 года срок его действия истёк.[9]. Однако за пределами США у изобретателей патента на алгоритм не было, так как в большинстве стран его необходимо было получить до первой публикации.[10]
В 1982 году Ривест, Шамир и Адлеман организовали компанию RSA Data Security (в настоящий момент — подразделение EMC Corporation). В 1989 году RSA, вместе с симметричным шифром DES, упоминается в RFC 1115, тем самым начиная использование алгоритма в зарождающейся сети Internet[11], а в 1990 году использовать алгоритм начинает министерство обороны США.[12]
В ноябре 1993 года открыто публикуется версия 1.5 стандарта PKCS#1, описывающего применение RSA для шифрования и создания электронной подписи. Последние версии стандарта также доступны в виде RFC (RFC 2313 — 1.5, 1993 год; RFC 2437 — 2.0, 1998 год; RFC 3447 — 2.1, 2002 год).
В декабре 1997 года была обнародована информация, согласно которой британский математик Клиффорд Кокс (Clifford Cocks), работавший в центре правительственной связи (GCHQ) Великобритании, описал криптосистему аналогичную RSA в 1973 году.[13]
[править] Описание алгоритма
[править] Введение
Криптографические системы с открытым ключом используют так называемые односторонние функции, которые обладают следующим свойством:
- Если известно
, то
вычислить относительно просто - Если известно
, то для вычисления
нет простого (эффективного) пути.
Под односторонностью понимается не теоретическая однонаправленность, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства, за обозримый интервал времени.
В основу криптографической системы с открытым ключом RSA положена сложность задачи факторизации произведения двух больших простых чисел. Для шифрования используется операция возведения в степень по модулю большого числа. Для дешифрования за разумное время (обратной операции) необходимо уметь вычислять функцию Эйлера от данного большого числа, для чего необходимо знать разложения числа на простые множители.
В криптографической системе с открытым ключом каждый участник располагает как открытым ключом (англ. public key), так и закрытым ключом (англ. private key). В криптографической системе RSA каждый ключ состоит из пары целых чисел. Каждый участник создаёт свой открытый и закрытый ключ самостоятельно. Закрытый ключ каждый из них держит в секрете, а открытые ключи можно сообщать кому угодно или даже публиковать их. Открытый и закрытый ключи каждого участника обмена сообщениями в криптосистеме RSA образуют «согласованную пару» в том смысле, что они являются взаимно обратными, т.е.:
сообщения
, где
— множество допустимых сообщений.
допустимых открытого и закрытого ключей
и
соответствующие функции шифрования
и расшифрования
, такие что
[править] Алгоритм создания открытого и секретного ключей
RSA-ключи генерируются следующим образом:[14]
- Выбираются два различных случайных простых числа
и
заданного размера (например, 1024 бита каждое). - Вычисляется их произведение
, которое называется модулем. - Вычисляется значение функции Эйлера от числа
:
- Выбирается целое число
(
), взаимно простое со значением функции
. Обычно в качестве
берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например, простые числа Ферма 17, 257 или 65537.
- Число
называется открытой экспонентой (англ. public exponent) - Время, необходимое для шифрования с использованием быстрого возведения в степень, пропорционально числу единичных бит в
. - Слишком малые значения
, например 3, потенциально могут ослабить безопасность схемы RSA.[15]
- Число
- Вычисляется число
, мультипликативно обратное к числу
по модулю
, то есть число, удовлетворяющее условию:
.
- Число
называется секретной экспонентой. Обычно, оно вычисляется при помощи расширенного алгоритма Евклида.
- Пара
публикуется в качестве открытого ключа RSA (англ. RSA public key). - Пара
играет роль закрытого ключа RSA (англ. RSA private key) и держится в секрете.
[править] Шифрование и расшифрование
Предположим, Боб хочет послать Алисе сообщение
.
Сообщениями являются целые числа в интервале от
до
, т.е
.
|
Алгоритм:[14]
|
Алгоритм:
|
[править] Корректность схемы RSA
- Уравнения
и
, на которых основана схема RSA, определяют взаимно обратные преобразования множества 
Действительно, для 
Покажем, что:
.
Возможны два случая:
.
Поскольку числа
и
являются взаимно обратными относительно умножения по модулю
, т.e
для некоторого целого
,
тогда:
где второе тождество следует из теоремы Ферма.
- Рассмотрим второй случай:
,
тогда
Таким образом, при всех
выполняется равенство
Аналогично можно показать, что:
.
Тогда, из китайской теоремы об остатках
[править] Пример
| Этап | Описание операции | Результат операции |
|---|---|---|
| Генерация ключей | Выбрать два простых числа |
|
| Вычислить модуль |
|
|
| Вычислить функцию Эйлера |
|
|
| Выбрать открытую экспоненту |
|
|
| Вычислить секретную экспоненту |
|
|
| Опубликовать открытый ключ |
|
|
| Сохранить закрытый ключ |
|
|
| Шифрование | Выбрать текст для зашифровки |
|
| Вычислить шифротекст |
|
|
| Расшифрование | Вычислить исходное сообщение |
|
[править] Цифровая подпись
Система RSA может использоваться не только для шифрования, но и для цифровой подписи.
Предположим, что Алисе (стороне
) нужно отправить Бобу (стороне
) сообщение
, подтверждённое электронной цифровой подписью.
|
Алгоритм:
|
Алгоритм:
|
Поскольку цифровая подпись обеспечивает как аутентификацию автора сообщения, так и подтверждение целостности содержимого подписанного сообщения, она служит аналогом подписи, сделанной от руки в конце рукописного документа.
Важное свойство цифровой подписи заключается в том, что её может проверить каждый, кто имеет доступ к открытому ключу её автора. Один из участников обмена сообщениями после проверки подлинности цифровой подписи может передать подписанное сообщение ещё кому-то, кто тоже в состоянии проверить эту подпись. Например, сторона
может переслать стороне
электронный чек. После того как сторона
проверит подпись стороны
на чеке, она может передать его в свой банк, служащие которого также имеют возможность проверить подпись и осуществить соответствующую денежную операцию.
Заметим, что подписанное сообщение
не зашифровано. Оно пересылается в исходном виде и его содержимое не защищено от нарушения конфиденциальности. Путём совместного применения представленных выше схем шифрования и цифровой подписи в системе RSA можно создавать сообщения, которые будут и зашифрованы, и содержать цифровую подпись. Для этого автор сначала должен добавить к сообщению свою цифровую подпись, а затем — зашифровать получившуюся в результате пару (состоящую из самого сообщения и подписи к нему) с помощью открытого ключа принадлежащего получателю. Получатель расшифровывает полученное сообщение с помощью своего секретного ключа. Если проводить аналогию с пересылкой обычных бумажных документов, то этот процесс похож на то, как если бы автор документа поставил под ним свою печать, а затем положил его в бумажный конверт и запечатал, с тем чтобы конверт был распечатан только тем человеком, кому адресовано сообщение.
[править] Скорость работы алгоритма RSA
Поскольку генерация ключей происходит значительно реже операций, реализующих шифрование, расшифрование, а также создание и проверку цифровой подписи, задача вычисления
представляет основную вычислительную сложность. Эта задача может быть разрешена с помощью алгоритма быстрого возведения в степень. С использованием этого алгоритма для вычисления
требуется
операций умножения по модулю.
- представим
в двоичной системе счисления:
-
, где
- положим
и затем для
вычислим
- найденное
и будет искомым значением 
Т. к. каждое вычисление на шаге 2 требует не более трёх умножений по модулю
и этот шаг выполняется
раз, то сложность алгоритма может быть оценена величиной
.
Чтобы проанализировать время выполнения операций с открытым и закрытым ключами, предположим, что открытый ключ
и закрытый ключ
удовлетворяют соотношениям
,
. Тогда в процессах их применения выполняется соответственно
и
умножений по модулю.
Таким образом время выполнения операций растёт с увеличением количества ненулевых битов в двоичном представлении открытой экспоненты e. Чтобы увеличить скорость шифрования, значение e часто выбирают равным 17, 257 или 65537 — простым числам, двоичное представление которых содержит лишь две единицы: 1710=100012, 25710=1000000012, 6553710=100000000000000012 (простые числа Ферма).
По эвристическим оценкам длина секретной экспоненты
, нетривиальным образом зависящей от открытой экспоненты
и модуля
, с большой вероятностью близка к длине
. Поэтому расшифрование данных идёт медленнее чем шифрование, а проверка подписи быстрее чем её создание.
Алгоритм RSA намного медленнее чем AES и другие алгоритмы блочного шифрования.
[править] Криптоанализ RSA[16]
Стойкость алгоритма основывается на сложности вычисления обратной функции к функции шифрования
.
Для вычисления
по известным
нужно найти такой
, чтобы
то есть
Вычисление обратного элемента по модулю не является сложной задачей, однако злоумышленнику неизвестно значение
. Для вычисления функции Эйлера от известного числа
необходимо знать разложение этого числа на простые множители. Нахождение таких множителей и является сложной задачей, а знание этих множителей — «потайной дверцей» (англ. backdoor), которая используется для вычисления
владельцем ключа. Существует множество алгоритмов для нахождения простых сомножителей, так называемой факторизации, самый быстрый из которых на сегодняшний день — общий метод решета числового поля, скорость которого для k-битного целого числа составляет
для некоторого
.
В 2010 году группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта RSA длиной 768 бит. Нахождение простых сомножителей осуществлялось общим методом решета числового поля.[17] По словам исследователей, после их работы в качестве надежной системы шифрования можно рассматривать только RSA-ключи длиной 1024 бита и более. Причём от шифрования ключом длиной в 1024 бит стоит отказаться в ближайшие три-четыре года.[18]
Кроме того, при неправильной или неоптимальной реализации или использовании алгоритма возможны специальные криптографические атаки, такие как атаки на схемы с малой секретной экспонентой или на схемы с общим выбранным значением модуля.
[править] Применение RSA
Система RSA используется для защиты программного обеспечения и в схемах цифровой подписи.
Также она используется в открытой системе шифрования PGP и иных системах шифрования (к примеру, DarkCryptTC и формат xdc) в сочетании с симметричными алгоритмами.
Из-за низкой скорости шифрования (около 30 кбит/с при 512 битном ключе на процессоре 2 ГГц), сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным ключом (сеансовый ключ), а с помощью RSA шифруют лишь этот ключ, таким образом реализуется гибридная криптосистема. Такой механизм имеет потенциальные уязвимости ввиду необходимости использовать криптостойкий генератор случайных чисел для формирования случайного сеансового ключа симметричного шифрования и эффективно противостоящий атакам симметричный криптоалгоритм (в данное время широкое применение находят AES, IDEA, Serpent, Twofish).
[править] Примечания
- ↑ 1 2 Bakhtiari M., Maarof M.A. Serious Security Weakness in RSA Cryptosystem // IJCSI International Journal of Computer Science. — January 2012. — В. 1, № 3. — Т. 9. — ISSN 1694-0814.
- ↑ Whitfield Diffie, Martin E. Hellman New Directions in Cryptography (англ.) // IEEE Transactions on Information Theory. — Nov. 1976. — Т. IT-22. — С. 644–654.
- ↑ The Editors A Quarter Century of Recreational Mathematics, by Martin Gardner (англ.). Scientific American. Проверено 3 марта 2012.: «Ronald L. Rivest of the Massachusetts Institute of Technology allowed me to be the first to reveal—in the August 1977 column—the „publickey“ cipher system that he co-invented»
- ↑ 1 2 Martin Gardner Mathematical Games: A new kind of cipher that would take millions of years to break (англ.) // Scientific American. — 1977.
- ↑ Bruce Schneier Factoring - State of the Art and Predictions (англ.) (12 February 1995). Проверено 3 марта 2012.
- ↑ Donald T. Davis A Discussion of RSA-129 Activity (англ.) (25 November 2003). Проверено 3 марта 2012.
- ↑ Чмора А.Л. 4.6.4. Силовая атака на основе распределенных вычислений // Современная прикладная криптография. — 2002. — 2000 экз. — ISBN 5-85438-046-3
- ↑ 1 2 Rivest et al., 1978
- ↑ Ronald L. Rivest et al. Cryptographic Communications System and Method
- ↑ Adam Back PGP Timeline (англ.). Проверено 3 марта 2012.
- ↑ J. Linn Privacy Enhancement for Internet Electronic Mail: Part III -- Algorithms, Modes, and Identifiers (англ.) (August 1989). Проверено 18 марта 2012.
- ↑ RSA Security Inc. Company history. (англ.). FundingUniverse. Проверено 18 марта 2012.
- ↑ C. C. Cocks A note on «non-secret encryption». (англ.) 20 ноября 1973.
- ↑ 1 2 3 A. Menezes, P. van Oorschot, S. Vanstone. 8.2. RSA public-key encryption // Handbook of Applied Cryptography. — CRC-Press, 1996. — 816 p. — (Discrete Mathematics and Its Applications). — ISBN 0-8493-8523-7
- ↑ Boneh, Dan (1999). «Twenty Years of attacks on the RSA Cryptosystem». Notices of the American Mathematical Society (AMS) 46 (2): 203–213.
- ↑ Ян С. Й. Криптоанализ RSA. — М.-Ижевск: НИЦ «Регулярная и хаотическая динамика», Ижевский институт компьютерных исследований, 2011. — 312 с.
- ↑ Анонс факторизации RSA-768 (англ.)
- ↑ Факторизация RSA-768 (англ.)
[править] Литература
- Rivest R. L., Shamir A., Adleman L. A method for obtaining digital signatures and public-key cryptosystems (англ.) // Communications of the ACM. — New York, NY, USA: ACM, 1978. — Т. 21. — № 2, Feb. 1978. — С. 120—126. — ISSN 0001-0782. — DOI:10.1.1.40.5588
- A. Menezes, P. van Oorschot, S. Vanstone. Handbook of Applied Cryptography. — CRC-Press, 1996. — 816 p. — (Discrete Mathematics and Its Applications). — ISBN 0-8493-8523-7
- Венбо Мао Современная криптография. Теория и практика = Modern Cryptography: Theory and Practice. — М.: Вильямс, 2005. — 768 с. — 2 000 экз. — ISBN 5-8459-0847-7, ISBN 0-13-066943-1
- Нильс Фергюсон, Брюс Шнайер Практическая криптография = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems. — М.: «Диалектика», 2004. — 432 с. — 3 000 экз. — ISBN 5-8459-0733-0, ISBN 0-4712-2357-3
- Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4
| Асимметричные шифры | |
|---|---|
| RSA • DSA • DSS • NTRUEncrypt • Схема Эль-Гамаля • Криптосистема Меркля-Хеллмана • Схема Шнорра • Эллиптическая криптография • ГОСТ Р 34.10-2001 • ДСТУ 4145-2002 |
, то
вычислить относительно просто
, то для вычисления
сообщения
, где
— множество допустимых сообщений.
и
соответствующие функции шифрования
и расшифрования
, такие что


и
заданного размера (например, 1024
, которое называется модулем.
),
.
Алисы



и
, на которых основана схема RSA, определяют 

.
.
для некоторого целого
,
,

.
,










с помощью своего секретного ключа 
, состоящую из сообщения и подписи.

, где
и затем для
вычислим
и будет искомым значением 
.

для некоторого
.