RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.
Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других.
История
Идея асимметричной криптосистемы с открытым и закрытым ключом приписывается Уитфилду Диффи и Мартину Хеллману, которые опубликовали эту концепцию в 1976 году. Они также ввели цифровые подписи и попытались применить теорию чисел. В их формулировке использовался секретный ключ с общим доступом, созданный путем экспоненциализации некоторого числа по модулю простого числа. Однако они оставили открытой проблему реализации односторонней функции, возможно, потому что сложность факторизации в то время не была хорошо изучена.
Рон Ривест, Ади Шамир и Леонард Адлеман из Массачусетского технологического института в течение года предприняли несколько попыток создать одностороннюю функцию, которую было бы трудно инвертировать. Ривест и Шамир, будучи компьютерными учеными, предложили множество потенциальных функций, а Адлеман, будучи математиком, отвечал за поиск их слабых мест. Они опробовали множество подходов, включая "ранцевый" и "перестановочные полиномы". Какое-то время они думали, что то, чего они хотели достичь, невозможно из-за противоречивых требований. В апреле 1977 года они провели Песах в доме одного из студентов и выпили много манишевицкого вина, а затем вернулись к себе домой около полуночи. Ривест, не в силах заснуть, лег на диван с учебником математики и начал думать о своей односторонней функции. Остаток ночи он провел, формализуя свою идею, и к рассвету большая часть статьи была готова. Алгоритм теперь известен как RSA - инициалы их фамилий в том же порядке, что и в их статье.
Клиффорд Кокс, английский математик, работавший в британской разведывательной службе Government Communications Headquarters (GCHQ), описал эквивалентную систему во внутреннем документе в 1973 г. Однако, учитывая относительно дорогие компьютеры, необходимые для ее реализации в то время, она считалась в основном курьезом и, насколько известно, так и не была применена. Однако его открытие было раскрыто только в 1997 году из-за его сверхсекретного засекречивания.
В августе 1977 года в колонке «Математические игры» Мартина Гарднера в журнале Scientific American с разрешения Рональда Ривеста появилось первое описание криптосистемы RSA. Читателям также было предложено дешифровать английскую фразу, зашифрованную описанным алгоритмом:
В качестве открытых параметров системы были использованы числа n=1143816...6879541 (129 десятичных знаков, 425 бит, также известно как RSA-129) и e=9007. За расшифровку была обещана награда в 100 долларов США. По заявлению Ривеста, для факторизации числа потребовалось бы более 40 квадриллионов лет. Однако чуть более, чем через 15 лет, 3 сентября 1993 года было объявлено о запуске проекта распределённых вычислений с координацией через электронную почту по нахождению сомножителей числа RSA-129 и решению головоломки. На протяжении полугода более 600 добровольцев из 20 стран жертвовали процессорное время 1600 машин (три из которых были факс-машинами). В результате были найдены простые множители и расшифровано исходное сообщение, которое представляет собой фразу «THE MAGIC WORDS ARE SQUEAMISH OSSIFRAGE» («Волшебные слова — это брезгливый ягнятник»). Полученную награду победители пожертвовали в фонд свободного программного обеспечения.
После публикации Мартина Гарднера полное описание новой криптосистемы любой желающий мог получить, выслав по почте запрос Рональду Ривесту с приложенным конвертом с обратным адресом и марками на 35 центов. Полное описание новой криптосистемы было опубликовано в журнале «Communications of the ACM» в феврале 1978 года.
Заявка на патент была подана 14 декабря 1977 года, в качестве владельца был указан MIT. Патент 4405829 был выдан 20 сентября 1983 года, а 21 сентября 2000 года срок его действия истёк. Однако за пределами США у изобретателей патента на алгоритм не было, так как в большинстве стран его необходимо было получить до первой публикации.
В 1982 году Ривест, Шамир и Адлеман организовали компанию RSA Data Security (в настоящий момент — подразделение EMC). В 1989 году RSA, вместе с симметричным шифром DES, упоминается в RFC 1115, тем самым начиная использование алгоритма в зарождающейся сети Internet, а в 1990 году использовать алгоритм начинает министерство обороны США.
В ноябре 1993 года открыто публикуется версия 1.5 стандарта PKCS1, описывающего применение RSA для шифрования и создания электронной подписи. Последние версии стандарта также доступны в виде RFC (RFC 2313 — 1.5, 1993 год; RFC 2437 — 2.0, 1998 год; RFC 3447 — 2.1, 2002 год).
В декабре 1997 года была обнародована информация, согласно которой британский математик Клиффорд Кокс (Clifford Cocks), работавший в центре правительственной связи (GCHQ) Великобритании, описал криптосистему, аналогичную RSA в 1973 году.
Описание алгоритма
Введение
Криптографические системы с открытым ключом используют так называемые односторонние функции, которые обладают следующим свойством:
- если известно x {displaystyle x} , то f ( x ) {displaystyle f(x)} вычислить относительно просто;
- если известно y = f ( x ) {displaystyle y=f(x)} , то для вычисления x {displaystyle x} нет простого (эффективного) пути.
Под односторонностью понимается не математически доказанная однонаправленность, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства, за обозримый интервал времени.
В основу криптографической системы с открытым ключом RSA положена сложность задачи факторизации произведения двух больших простых чисел. Для шифрования используется операция возведения в степень по модулю большого числа. Для дешифрования (обратной операции) за разумное время необходимо уметь вычислять функцию Эйлера от данного большого числа, для чего необходимо знать разложение числа на простые множители.
В криптографической системе с открытым ключом каждый участник располагает как открытым ключом (англ. public key), так и закрытым ключом (англ. private key). В криптографической системе RSA каждый ключ состоит из пары целых чисел. Каждый участник создаёт свой открытый и закрытый ключ самостоятельно. Закрытый ключ каждый из них держит в секрете, а открытые ключи можно сообщать кому угодно или даже публиковать их. Открытый и закрытый ключи каждого участника обмена сообщениями в криптосистеме RSA образуют «согласованную пару» в том смысле, что они являются взаимно обратными, то есть:
∀ {displaystyle forall } допустимых пар открытого и закрытого ключей ( p , s ) {displaystyle (p,s)} ∃ {displaystyle exists } соответствующие функции шифрования E p ( x ) {displaystyle E_{p}(x)} и расшифрования D s ( x ) {displaystyle D_{s}(x)} такие, что ∀ {displaystyle forall } сообщения m ∈ M {displaystyle min M} , где M {displaystyle M} — множество допустимых сообщений, m = D s ( E p ( m ) ) = E p ( D s ( m ) ) . {displaystyle m=D_{s}(E_{p}(m))=E_{p}(D_{s}(m)).}Алгоритм создания открытого и секретного ключей
RSA-ключи генерируются следующим образом:
1) выбираются два различных случайных простых числа p {displaystyle p} и q {displaystyle q} заданного размера (например, 1024 бита каждое); 2) вычисляется их произведение n = p ⋅ q {displaystyle n=pcdot q} , которое называется модулем; 3) вычисляется значение функции Эйлера от числа n {displaystyle n} : φ ( n ) = ( p − 1 ) ⋅ ( q − 1 ) {displaystyle varphi (n)=(p-1)cdot (q-1)} ; 4) выбирается целое число e {displaystyle e} ( 1 < e < φ ( n ) {displaystyle 1<e<varphi (n)} ), взаимно простое со значением функции φ ( n ) {displaystyle varphi (n)} ; число e {displaystyle e} называется открытой экспонентой (англ. public exponent); обычно в качестве e {displaystyle e} берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например,простые из чисел Ферма: 17, 257 или 65537, так как в этом случае время, необходимое для шифрования с использованием
быстрого возведения в степень, будет меньше; слишком малые значения e {displaystyle e} , например 3, потенциально могут ослабить безопасность схемы RSA.; 5) вычисляется число d {displaystyle d} , мультипликативно обратное к числу e {displaystyle e} по модулю φ ( n ) {displaystyle varphi (n)} , то есть число, удовлетворяющее сравнению: d ⋅ e ≡ 1 ( mod φ ( n ) ) {displaystyle dcdot eequiv 1{pmod {varphi (n)}}} (число d {displaystyle d} называется секретной экспонентой; обычно оно вычисляется при помощи расширенного алгоритма Евклида); 6) пара ( e , n ) {displaystyle (e,n)} публикуется в качестве открытого ключа RSA (англ. RSA public key); 7) пара ( d , n ) {displaystyle (d,n)} играет роль закрытого ключа RSA (англ. RSA private key) и держится в секрете.
Шифрование и расшифрование
Предположим, Боб хочет послать Алисе сообщение m {displaystyle m} .
Сообщениями являются целые числа в интервале от 0 {displaystyle 0} до n − 1 {displaystyle n-1} , взаимно простые с n, т.е. m ∈ Z n , gcd ( m , n ) = 1 {displaystyle min mathbb {Z} _{n},gcd(m,n)=1} .
Данная схема на практике не используется по причине того, что она не является практически надёжной (semantically secured). Действительно, односторонняя функция E(m) является детерминированной — при одних и тех же значениях входных параметров (ключа и сообщения) выдаёт одинаковый результат. Это значит, что не выполняется необходимое условие практической (семантической) надёжности шифра.
Алгоритм шифрования сеансового ключа
Наиболее используемым в настоящее время[когда?] является смешанный алгоритм шифрования, в котором сначала шифруется сеансовый ключ, а потом уже с его помощью участники шифруют свои сообщения симметричными системами. После завершения сеанса сеансовый ключ, как правило, уничтожается.
Алгоритм шифрования сеансового ключа выглядит следующим образом:
В случае, когда сеансовый ключ больше, чем модуль n {displaystyle n} , сеансовый ключ разбивают на блоки нужной длины (в случае необходимости дополняют нулями) и шифруют каждый блок.
Корректность схемы RSA
Уравнения ( 1 ) {displaystyle (1)} и ( 2 ) {displaystyle (2)} , на которых основана схема RSA, определяют взаимно обратные преобразования множества Z n {displaystyle mathbb {Z} _{n}} ДоказательствоДействительно, для ∀ m ∈ Z n {displaystyle forall min mathbb {Z} _{n}}
D ( E ( m ) ) = E ( D ( m ) ) = m e d mod n {displaystyle Dleft({Eleft(m ight)} ight)=Eleft({Dleft(m ight)} ight)=m^{ed}mod n}Покажем, что:
∀ m ∈ Z n : m e d ≡ m mod p {displaystyle forall min mathbb {Z} _{n}:m^{ed}equiv mmod p} .Возможны два случая:
- m ≢ 0 mod p {displaystyle m ot equiv 0mod p} .
Поскольку числа e {displaystyle e} и d {displaystyle d} являются взаимно обратными относительно умножения по модулю φ ( n ) = ( p − 1 ) ( q − 1 ) {displaystyle varphi (n)=(p-1)(q-1)} , т.e
e d = 1 + k ( p − 1 ) ( q − 1 ) {displaystyle ed=1+k(p-1)(q-1)} для некоторого целого k {displaystyle k} ,тогда:
m e d ≡ m 1 + k ( p − 1 ) ( q − 1 ) ≡ mod p ≡ m ( m p − 1 ) k ( q − 1 ) ≡ mod p ≡ m ( 1 ) k ( q − 1 ) ≡ m mod p {displaystyle {egin{aligned}m^{ed}&equiv m^{1+kleft({p-1} ight)left({q-1} ight)}&equiv &mod p&equiv mleft({m^{p-1}} ight)^{kleft({q-1} ight)}&equiv &mod p&equiv mleft(1 ight)^{kleft({q-1} ight)}&equiv m&mod pend{aligned}}}где второе тождество следует из теоремы Ферма.
- Рассмотрим второй случай:
тогда
m e d ≡ 0 ≡ m mod p {displaystyle m^{ed}equiv 0equiv mmod p}Таким образом, при всех m {displaystyle m} выполняется равенство
m e d ≡ m mod p {displaystyle m^{ed}equiv mmod p}Аналогично можно показать, что:
∀ m ∈ Z n : m e d ≡ m mod q {displaystyle forall min mathbb {Z} _{n}:m^{ed}equiv mmod q} .Тогда, из китайской теоремы об остатках
∀ m ∈ Z n : m e d ≡ m mod n {displaystyle forall min mathbb {Z} _{n}:m^{ed}equiv mmod n}Пример
Цифровая подпись
Система RSA может использоваться не только для шифрования, но и для цифровой подписи.
Предположим, что Алисе (стороне A {displaystyle A} ) нужно отправить Бобу (стороне B {displaystyle B} ) сообщение m {displaystyle m} , подтверждённое электронной цифровой подписью.
Поскольку цифровая подпись обеспечивает как аутентификацию автора сообщения, так и подтверждение целостности содержимого подписанного сообщения, она служит аналогом подписи, сделанной от руки в конце рукописного документа.
Важное свойство цифровой подписи заключается в том, что её может проверить каждый, кто имеет доступ к открытому ключу её автора. Один из участников обмена сообщениями после проверки подлинности цифровой подписи может передать подписанное сообщение ещё кому-то, кто тоже в состоянии проверить эту подпись. Например, сторона A {displaystyle A} может переслать стороне B {displaystyle B} электронный чек. После того как сторона B {displaystyle B} проверит подпись стороны A {displaystyle A} на чеке, она может передать его в свой банк, служащие которого также имеют возможность проверить подпись и осуществить соответствующую денежную операцию.
Заметим, что подписанное сообщение m {displaystyle m} не зашифровано. Оно пересылается в исходном виде и его содержимое не защищено от нарушения конфиденциальности. Путём совместного применения представленных выше схем шифрования и цифровой подписи в системе RSA можно создавать сообщения, которые будут и зашифрованы, и содержать цифровую подпись. Для этого автор сначала должен добавить к сообщению свою цифровую подпись, а затем — зашифровать получившуюся в результате пару (состоящую из самого сообщения и подписи к нему) с помощью открытого ключа, принадлежащего получателю. Получатель расшифровывает полученное сообщение с помощью своего секретного ключа. Если проводить аналогию с пересылкой обычных бумажных документов, то этот процесс похож на то, как если бы автор документа поставил под ним свою печать, а затем положил его в бумажный конверт и запечатал, с тем чтобы конверт был распечатан только тем человеком, кому адресовано сообщение.
Скорость работы алгоритма RSA
Поскольку генерация ключей происходит значительно реже операций, реализующих шифрование, расшифрование, а также создание и проверку цифровой подписи, задача вычисления a = b c mod n {displaystyle a=b^{c}{mod {n}}} представляет основную вычислительную сложность. Эта задача может быть разрешена с помощью алгоритма быстрого возведения в степень. С использованием этого алгоритма для вычисления m e mod n {displaystyle m^{e}{mod {n}}} требуется O ( ln e ) {displaystyle Oleft(ln e ight)} операций умножения по модулю.
Подробнее- представим e {displaystyle e} в двоичной системе счисления:
- положим m 0 = m {displaystyle m_{0}=m} и затем для i = 1 , … , k {displaystyle i=1,dots ,k} вычислим
- найденное m k {displaystyle m_{k}} и будет искомым значением m e mod n {displaystyle m^{e}{mod {n}}}
Т. к. каждое вычисление на шаге 2 требует не более трёх умножений по модулю n {displaystyle n} и этот шаг выполняется k ≤ log 2 e {displaystyle kleq log _{2}e} раз, то сложность алгоритма может быть оценена величиной O ( ln e ) {displaystyle O(ln e)} .
Чтобы проанализировать время выполнения операций с открытым и закрытым ключами, предположим, что открытый ключ { e , n } {displaystyle left{e,n ight}} и закрытый ключ { d , n } {displaystyle left{d,n ight}} удовлетворяют соотношениям log 2 e = O ( 1 ) {displaystyle log _{2}e=O(1)} , log 2 d ≤ β {displaystyle log _{2}dleq eta } . Тогда в процессах их применения выполняется соответственно O ( 1 ) {displaystyle Oleft(1 ight)} и O ( β ) {displaystyle Oleft(eta ight)} умножений по модулю.
Таким образом время выполнения операций растёт с увеличением количества ненулевых битов в двоичном представлении открытой экспоненты e. Чтобы увеличить скорость шифрования, значение e часто выбирают равным 17, 257 или 65537 — простым числам, двоичное представление которых содержит лишь две единицы: 1710=100012, 25710=1000000012, 6553710=100000000000000012 (простые числа Ферма).
По эвристическим оценкам длина секретной экспоненты d {displaystyle d} , нетривиальным образом зависящей от открытой экспоненты e {displaystyle e} и модуля n {displaystyle n} , с большой вероятностью близка к длине n {displaystyle n} . Поэтому расшифрование данных идёт медленнее, чем шифрование, а проверка подписи – быстрее, чем её создание.
Алгоритм RSA намного медленнее, чем AES и другие алгоритмы, использующие симметричные блочные шифры.
Использование китайской теоремы об остатках для ускорения расшифрования
При расшифровании или подписывании сообщения в алгоритме RSA показатель вычисляемой степени будет довольно большим числом (порядка 1000 бит). Поэтому требуется алгоритм, сокращающий количество операций. Так как числа p {displaystyle p} и q {displaystyle q} в разложении N = p q {displaystyle N=pq} известны владельцу закрытого ключа, то можно вычислить:
m p = C d mod p = C d mod p − 1 mod p , {displaystyle m_{p}=C^{d}{mod {p}}=C^{d{mod {p-1}}}{mod {p}},} m q = C d mod q = C d mod q − 1 mod q . {displaystyle m_{q}=C^{d}{mod {q}}=C^{d{mod {q-1}}}{mod {q}}.}Поскольку p {displaystyle p} и q {displaystyle q} — числа порядка 2 512 , {displaystyle 2^{512},} на эти действия потребуется два возведения числа в 512-битовую степень по модулю 512-битового числа. Это существенно (для 1024 бит тестирование показало в 3 раза) быстрее, чем одно возведение в 1024-битовую степень по модулю 1024-битового числа. Далее осталось восстановить m {displaystyle m} по m p {displaystyle m_{p}} и m q , {displaystyle m_{q},} что можно сделать с помощью китайской теоремы об остатках.
Криптоанализ RSA
Стойкость алгоритма основывается на сложности вычисления обратной функции к функции шифрования
c = E ( m ) = m e mod n {displaystyle c=E(m)=m^{e}mod n} .Для вычисления m {displaystyle m} по известным c , e , n {displaystyle c,e,n} нужно найти такой d {displaystyle d} , чтобы
e ⋅ d ≡ 1 ( mod φ ( n ) ) , {displaystyle ecdot dequiv 1{pmod {varphi (n)}},}то есть найти обратный элемент к e {displaystyle e} в мультипликативной группе вычетов по модулю φ ( n ) . {displaystyle varphi (n).}
Вычисление обратного элемента по модулю не является сложной задачей, однако злоумышленнику неизвестно значение φ ( n ) {displaystyle varphi (n)} . Для вычисления функции Эйлера от известного числа n {displaystyle n} необходимо знать разложение этого числа на простые множители. Нахождение таких множителей и является сложной задачей, а знание этих множителей — «потайной дверцей» (англ. backdoor), которая используется для вычисления d {displaystyle d} владельцем ключа. Существует множество алгоритмов для нахождения простых сомножителей, так называемой факторизации, самый быстрый из которых на сегодняшний день — общий метод решета числового поля, скорость которого для k-битного целого числа составляет
exp ( ( c + o ( 1 ) ) k 1 3 log 2 3 k ) {displaystyle exp((c+o(1))k^{frac {1}{3}}log ^{frac {2}{3}}k)} для некоторого c < 2 {displaystyle c<2} .В 2010 году группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта RSA длиной 768 бит. Нахождение простых сомножителей осуществлялось общим методом решета числового поля. По словам исследователей, после их работы в качестве надежной системы шифрования можно рассматривать только RSA-ключи длиной 1024 бита и более. Причём от шифрования ключом длиной в 1024 бит стоит отказаться в ближайшие три-четыре года. С 31 декабря 2013 года браузеры Mozilla перестали поддерживать сертификаты удостоверяющих центров с ключами RSA меньше 2048 бит.
Кроме того, при неправильной или неоптимальной реализации или использовании алгоритма возможны специальные криптографические атаки, такие как атаки на схемы с малой секретной экспонентой или на схемы с общим выбранным значением модуля.
Атаки на алгоритм RSA
Атака Винера на RSA
В некоторых приложениях требуется ускорить процесс расшифровывания в алгоритме RSA. Поэтому выбирается небольшая расшифровывающая экспонента. В случае когда расшифровывающая экспонента d < N 1 4 {displaystyle d<N^{frac {1}{4}}} можно определить d {displaystyle d} за полиномиальное время с помощью атаки Винера, опирающейся на непрерывные дроби.
Подробнее По вещественному числу α ∈ R {displaystyle alpha in mathbb {R} } определим последовательности: α 0 = α , p 0 = q 0 = 1 , p 1 = a 0 a 1 + 1 , q 1 = a 1 , {displaystyle alpha _{0}=alpha ,p_{0}=q_{0}=1,p_{1}=a_{0}a_{1}+1,q_{1}=a_{1},}
α i = ⌊ α i ⌋ , α i + 1 = 1 α i − a i , {displaystyle alpha _{i}=lfloor alpha _{i}
floor ,alpha _{i+1}={frac {1}{alpha _{i}-a_{i}}},}
p i = a i p i − 1 + p i − 1 {displaystyle p_{i}=a_{i}p_{i-1}+p_{i-1}} при i ≥ 2 , {displaystyle igeq 2,}
Целые числа a 0 , a 1 , a 2 , . . . {displaystyle a_{0},a_{1},a_{2},...} называются непрерывной дробью, представляющей α , {displaystyle alpha ,} а рациональные числа p i q i − {displaystyle {frac {p_{i}}{q_{i}}}-} подходящими дробями. Каждая из подходящих дробей несократима, а скорость роста их знаменателей сравнима с показательной. Один из важных результатов теории непрерывных дробей:
| α − p q | ≤ 1 2 q 2 , {displaystyle left|alpha -{frac {p}{q}} ight|leq {frac {1}{2q^{2}}},}
то p q − {displaystyle {frac {p}{q}}-} одна из подходящих дробей в разложении α {displaystyle alpha } в непрерывную дробь.
Пусть у нас есть модуль N = p q , {displaystyle N=pq,} причём q < p < 2 q . {displaystyle q<p<2q.} Допустим нападающему известна шифрующая экспонента E, обладающая свойствомE d = 1 mod φ , {displaystyle Ed=1mod varphi ,}
где φ = φ ( N ) = ( p − 1 ) ( q − 1 ) . {displaystyle varphi =varphi (N)=(p-1)(q-1).} Будем также считать, что E < φ , {displaystyle E<varphi ,} поскольку это выполнено в большинстве приложений. Из предположений следует, что
E d − k φ = 1. {displaystyle Ed-kvarphi =1.}
Следовательно,
| E φ − k d | = 1 d φ . {displaystyle left|{frac {E}{varphi }}-{frac {k}{d}}
ight|={frac {1}{dvarphi }}.}
Отсюда видно, что E N − {displaystyle {frac {E}{N}}-} довольно хорошее приближение для k d . {displaystyle {frac {k}{d}}.} Действительно,
| E N − k d | = | E d − N k d N | = | E d − k φ − N k + k φ d N | = | 1 − k ( N − φ ) d N | ≤ | 3 k N 1 2 d N | = 3 k d N 1 2 . {displaystyle left|{frac {E}{N}}-{frac {k}{d}} ight|=left|{frac {Ed-Nk}{dN}} ight|=left|{frac {Ed-kvarphi -Nk+kvarphi }{dN}} ight|=left|{frac {1-k(N-varphi )}{dN}} ight|leq left|{frac {3kN^{frac {1}{2}}}{dN}} ight|={frac {3k}{dN^{frac {1}{2}}}}.}
Так как E < φ , {displaystyle E<varphi ,} очевидно , k < d . {displaystyle ,k<d.} Кроме того, так как предполагалось, что d < 1 4 N 1 4 . {displaystyle d<{frac {1}{4}}N^{frac {1}{4}}.} Значит,
| E N − k d | < 1 2 d 2 . {displaystyle left|{frac {E}{N}}-{frac {k}{d}} ight|<{frac {1}{2d^{2}}}.} Поскольку НОД ( k , d ) = 1 , {displaystyle (k,d)=1,} то k d − {displaystyle {frac {k}{d}}-} подходящая дробь в разложении дроби E N {displaystyle {frac {E}{N}}} в непрерывную. Таким образом, можно узнать расшифровывающую экспоненту, поочерёдно подставляя знаменатели подходящих дробей в выражение:
для некоторого случайного числа M . {displaystyle M.} Получив равенство, найдём d . {displaystyle d.} Общее число подходящих дробей, которое придётся проверить оценивается как O ( l n N ) . {displaystyle O(lnN).}
Обобщённая атака Винера
Атака Винера, описанная выше, возможна лишь в том случае, когда атакующему известно о неравенстве
где d {displaystyle d} — секретная экспонента, а N {displaystyle N} — модуль RSA. Боне и Дерфи, используя двумерный аналог Теоремы Копперсмита, смогли обобщить атаку Винера на случай, когда
Применение RSA
Система RSA используется для защиты программного обеспечения и в схемах цифровой подписи.
Также она используется в открытой системе шифрования PGP и иных системах шифрования (к примеру, DarkCryptTC и формат xdc) в сочетании с симметричными алгоритмами.
Из-за низкой скорости шифрования сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным сеансовым ключом (например, AES, IDEA, Serpent, Twofish), а с помощью RSA шифруют лишь этот ключ, таким образом реализуется гибридная криптосистема. Такой механизм имеет потенциальные уязвимости ввиду необходимости использовать криптографически стойкий генератор псевдослучайных чисел для формирования случайного сеансового ключа симметричного шифрования.