Interested Article - Криптоанализ RSA

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

Введение

На 2009 год система шифрования на основе RSA считается надёжной начиная с размера n {\displaystyle n} в 1024 бита.

Группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта RSA длиной 768 бит. По словам исследователей, после их работы в качестве надежной системы шифрования можно рассматривать только RSA-ключи длиной 1024 бита и более. Причём от шифрования ключом длиной в 1024 бит стоит отказаться в ближайшие три-четыре года.

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

На первый шаг (выбор пары полиномов степени 6 и 1) было потрачено около полугода вычислений на 80 процессорах, что составило около 3 % времени, потраченного на главный этап алгоритма (просеивание), который выполнялся на сотнях компьютеров в течение почти двух лет. Если интерполировать это время на работу одного процессора AMD Opteron 2,2 ГГц с 2 Гб памяти, то получилось бы порядка 1500 лет. Обработка данных после просеивания для следующего ресурсоёмкого шага (линейной алгебры) потребовалось несколько недель на малом количестве процессоров. Заключительный шаг после нахождения нетривиальных решений ОСЛУ занял не более 12 часов.

Решение ОСЛУ проводилось с помощью на нескольких раздельных кластерах и длилось чуть менее 4 месяцев. При этом размер разреженной матрицы составил 192 796 550х192 795 550 при наличии 27 795 115 920 ненулевых элементов (то есть в среднем 144 ненулевых элемента на строку). Для хранения матрицы на жёстком диске понадобилось около 105 гигабайт. В то же время понадобилось около 5 терабайт сжатых данных для построения данной матрицы.

В итоге группе удалось вычислить 232-цифровой ключ, открывающий доступ к зашифрованным данным.

Исследователи уверены, что используя их метод факторизации, взломать 1024-битный RSA-ключ будет возможно в течение следующего десятилетия [ когда? ] .

Зная разложение модуля n {\displaystyle n} на произведение двух простых чисел, противник может легко найти секретную экспоненту d {\displaystyle d} и тем самым взломать RSA. Однако на сегодняшний день самый быстрый алгоритм факторизации — решето обобщённого числового поля (General Number Field Sieve), скорость которого для 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} ,

не позволяет разложить большое целое за приемлемое время. Будем рассматривать возможные атаки на RSA, которые позволяют взломать эту систему, не используя прямого разложения модуля n на произведение двух простых чисел.

Элементарные атаки

Рассмотрим несколько атак, связанных с неправильным использованием алгоритма RSA.

Генерация простых чисел

На случайные простые числа p {\displaystyle p} и q {\displaystyle q} накладывается следующее дополнительное ограничение:

  • p {\displaystyle p} и q {\displaystyle q} не должны быть слишком близки друг к другу, иначе можно будет их найти, используя метод факторизации Ферма . Однако, если оба простых числа p {\displaystyle p} и q {\displaystyle q} были сгенерированы независимо, то это ограничение с огромной вероятностью автоматически выполняется.

Схема с общим модулем n

Начальные данные: Чтобы избежать генерирования различных модулей n = p q {\displaystyle n=p*q} для каждого пользователя, защищённый сервер использует единый n для шифрования всех сообщений. Сторона A {\displaystyle A} использует этот сервер для получения сообщения M {\displaystyle M}

Задача: противник хочет расшифровать сообщение стороны A {\displaystyle A} .

Казалось бы, шифротекст C = M e a mod n {\displaystyle C=M^{e_{a}}\mod n} , отправленный стороне A {\displaystyle A} , не может быть расшифрован стороной B {\displaystyle B} , если она не обладает секретным ключом d a {\displaystyle d_{a}} . Однако сторона B {\displaystyle B} может использовать свои экспоненты e b , d b {\displaystyle e_{b},d_{b}} , чтобы разложить модуль n {\displaystyle n} , и после этого, зная e a {\displaystyle e_{a}} , вычислить секретную экспоненту d a {\displaystyle d_{a}} .

Защита: для каждого пользователя должен использоваться свой модуль n {\displaystyle n} .

Атака на подпись RSA в схеме с нотариусом

Начальные данные: ( n , e ) {\displaystyle (n,e)} — открытый ключ нотариуса. Противник получает отказ при попытке подписания нотариусом сообщения M Z n {\displaystyle M\in \mathbb {Z} _{n}}

Задача: противник хочет получить подпись нотариуса на сообщении M Z n {\displaystyle M\in \mathbb {Z} _{n}} .

Противник выбирает произвольное r Z n {\displaystyle r\in \mathbb {Z} _{n}} , вычисляет M = r e M mod n {\displaystyle M'=r^{e}M\mod n} и отправляет это сообщение на подпись нотариусу.

Если нотариус подписывает это сообщение:

S = ( M ) d mod n {\displaystyle S'=(M')^{d}\mod n}

то противник, вычислив S = S / r mod n {\displaystyle S=S'/r\mod n} , получает подпись сообщения M {\displaystyle M} .

Действительно, S e = ( S ) e / r e = ( M ) e d / r e M / r e = M ( mod n ) {\displaystyle S^{e}=(S')^{e}/r^{e}=(M')^{ed}/r^{e}\equiv M'/r^{e}=M(\mod n)}

Защита: при подписи добавлять в сообщение некоторое случайное число (например, время).

Малые значения секретной экспоненты

Начальные данные: Чтобы увеличить скорость расшифрования (или создания цифровой подписи), было уменьшено число ненулевых битов двоичного представления секретной экспоненты d {\displaystyle d} (см.).

Задача: вычислить секретную экспоненту d {\displaystyle d} .

В 1990 году Михаэль Винер (Michael J. Wiener) показал, что в случае малого значения d {\displaystyle d} возможен взлом системы RSA, а именно:

Теорема Винера:

 Пусть     n = p q   {\displaystyle n=pq}  , где     q < p < 2 q   {\displaystyle q<p<2q}       d <   1 3    n   1 4      {\displaystyle d<{\frac {1}{3}}n^{\frac {1}{4}}}   Тогда, если известно     ( n , e )   {\displaystyle (n,e)}  , где     e d = 1  mod   φ ( n )   {\displaystyle ed=1\mod \varphi (n)}  , то существует эффективный способ вычислить     d   {\displaystyle d}  . 

Защита: Таким образом, если n {\displaystyle n} имеет размер 1024 бита, необходимо, чтобы d {\displaystyle d} был не менее 256 бит длиной.

Малые значения открытой экспоненты

Чтобы увеличить скорость шифрования и проверки цифровой подписи , используют малые значения открытой экспоненты e {\displaystyle e} . Наименьшее из них e = 3 {\displaystyle e=3} . Однако, чтобы повысить криптоустойчивость алгоритма RSA, рекомендовано использовать

e = 2 16 + 1 = 65537 {\displaystyle e=2^{16}+1=65537} .

Атака Хастада

Начальные условия: Сторона B {\displaystyle B} отсылает зашифрованное сообщение M {\displaystyle M} пользователям P 1 , P 2 , . . . P k {\displaystyle P_{1},P_{2},...P_{k}} . Каждый пользователь имеет свой открытый ключ ( n i , e i ) {\displaystyle (n_{i},e_{i})} , причём M < n i , i {\displaystyle M<n_{i},\forall i} . Сторона B {\displaystyle B} зашифровывает сообщение, используя поочерёдно открытый ключ каждого пользователя, и отсылает его соответствующему адресату. Противник прослушивает канал передачи и собирает k {\displaystyle k} переданных шифротекстов.

Задача: противник хочет восстановить сообщение M {\displaystyle M} .

Положим e i = 3 , i {\displaystyle e_{i}=3,\forall i} , тогда противник может восстановить M {\displaystyle M} если k 3 {\displaystyle k\geqslant 3} .

В общем случае, если все открытые экспоненты равны e {\displaystyle e} , противник может восстановить M {\displaystyle M} при k e {\displaystyle k\geqslant e} .

Рассмотрим простейшую защиту от этой атаки. Пусть сообщение M i {\displaystyle M_{i}} для каждого пользователя является некоторой фиксированной перестановкой исходного сообщения M {\displaystyle M} . К примеру,

M i = i 2 m + M {\displaystyle M_{i}=i2^{m}+M} — сообщение для i-го пользователя.

Хастад (Johan Hastad) показал, что даже в этом случае противник может восстановить сообщение M {\displaystyle M} при достаточном количестве пользователей.

Защита: Эта атака возможна только при малом значении открытой экспоненты e {\displaystyle e} , в этом случае криптостойкости системы RSA можно достигнуть, используя произвольную перестановку, а не фиксированную, пример которой был приведён выше.

Атака Франклина-Рейтера

Начальные условия :

Имеются два сообщения M 1 , M 2 Z n {\displaystyle M_{1},M_{2}\in \mathbb {Z} _{n}} , причём

M 1 = f ( M 2 ) mod n , {\displaystyle M_{1}=f(M_{2})\mod n,} где f Z n [ x ] {\displaystyle f\in \mathbb {Z} _{n}[x]} некоторый открытый многочлен.

Сторона A {\displaystyle A} с открытым ключом ( n , e ) {\displaystyle (n,e)} получает эти сообщения от стороны B {\displaystyle B} , которая просто зашифровывает сообщения M 1 , M 2 {\displaystyle M_{1},M_{2}} и передаёт полученные шифротексты C 1 , C 2 {\displaystyle C_{1},C_{2}} .

Задача: Противник, зная ( n , e , C 1 , C 2 , f ) {\displaystyle (n,e,C_{1},C_{2},f)} , хочет восстановить M 1 , M 2 {\displaystyle M_{1},M_{2}} .

Метью Франклин (Matthew K. Franklin) и Михаэль Рейтер (Michael K. Reiter) доказали, следующее утверждение:

Пусть 1)    ( n , e )   {\displaystyle (n,e)}   - открытый ключ системы RSA, причём     e = 3   {\displaystyle e=3}   2)     M  1     M  2      Z   n     {\displaystyle M_{1}\neq M_{2}\in \mathbb {Z} _{n}}   и      M  1   = f (  M  2   )  mod   N   {\displaystyle M_{1}=f(M_{2})\mod N}  , для некоторого линейного многочлена     f = a x + b    Z   n   [ x ]   {\displaystyle f=ax+b\in \mathbb {Z} _{n}[x]}  ,     b  0   {\displaystyle b\neq 0}   Тогда, зная     ( n , e ,  C  1   ,  C  2   , f )   {\displaystyle (n,e,C_{1},C_{2},f)}  , противник может восстановить      M  1   ,  M  2     {\displaystyle M_{1},M_{2}}   

Защита: при e > 3 {\displaystyle e>3} время взлома системы RSA пропорционально e 2 {\displaystyle e^{2}} , поэтому данная атака может быть использована только при малых значениях открытой экспоненты.

Атака по частично известной секретной экспоненте

Начальные условия :

Противник знает часть двоичного представления секретной экспоненты d {\displaystyle d} .

Задача: восстановить d {\displaystyle d} .

Оказывается, что:

Пусть ( n , d ) {\displaystyle (n,d)} — секретный ключ системы RSA, где n = p q {\displaystyle n=pq} имеет размер η {\displaystyle \eta } битов.
Тогда, зная η / 4 {\displaystyle \eta /4} младших битов числа d {\displaystyle d} , противник может восстановить d {\displaystyle d} за время, пропорциональное e log 2 e {\displaystyle e\log _{2}e}

Возможность взлома системы RSA в случае, когда открытая экспонента e {\displaystyle e} мала, так же очевидна из следующих рассуждений:

из определения e {\displaystyle e} и d {\displaystyle d} :
e d k φ ( n ) = e d k ( n p q + 1 ) = 1 {\displaystyle ed-k\varphi (n)=ed-k(n-p-q+1)=1}
Поскольку d < φ ( n ) {\displaystyle d<\varphi (n)} , то очевидно 0 < k e {\displaystyle 0<k\leqslant e} .
При заданном k {\displaystyle k} противник может легко вычислить
d ^ = b ( k n + 1 ) / e c {\displaystyle {\hat {d}}={\mathcal {b}}(kn+1)/e{\mathcal {c}}}
Тогда при q < p < 2 q {\displaystyle q<p<2q}
| d ^ d | k ( p + q ) / e 3 k n / e < 3 n {\displaystyle |{\hat {d}}-d|\leqslant k(p+q)/e\leqslant 3k{\sqrt {n}}/e<3{\sqrt {n}}}
Таким образом, d ^ {\displaystyle {\hat {d}}} является хорошим приближением при d {\displaystyle d} .
Поскольку возможны только e {\displaystyle e} различных значений k {\displaystyle k} , противник может построить ряд, содержащий e {\displaystyle e} членов, для которого двоичное представление одного из его элементов совпадает со старшей половиной двоичного представления секретной экспоненты d {\displaystyle d} .

Защита: увеличение открытой экспоненты e {\displaystyle e} .

Атака с помощью квантового компьютера

С помощью квантового компьютера , если он будет построен, можно будет взломать RSA, так как квантовый алгоритм Шора позволяет осуществить факторизацию больших чисел за достаточно короткое время. Разложив модуль n на простые множители (это можно сделать за время O ( log 2 n log 3 ( log n ) ) {\displaystyle {\textstyle {O(\log ^{2}n\log ^{3}(\log n))}}} , используя O (log n ) логических Q-битов ), можно будет вычислить секретный показатель d.

Атаки, связанные с реализацией системы RSA

Атака по времени выполнения

Начальные условия:

Рассмотрим смарт-карту , микропроцессор которой подписывает сообщения, используя встроенный секретный ключ RSA.

Задача: противник хочет получить секретную экспоненту d {\displaystyle d} .

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

Противник получает подписи смарт-карты для большого числа произвольных сообщений M 1 , M 2 , , M k Z n {\displaystyle M_{1},M_{2},\dots ,M_{k}\in \mathbb {Z} _{n}} , и измеряет время генерации их подписей T i {\displaystyle T_{i}} .

В ходе атаки значение секретной экспоненты d {\displaystyle d} восстанавливается побитно, начиная с младшего бита:

  • d {\displaystyle d} нечётное, поэтому d 0 = 1 {\displaystyle d_{0}=1} .
  • если d 1 = 1 {\displaystyle d_{1}=1} то микропроцессору смарт-карты необходимо произвести три умножения по модулю n {\displaystyle n} , в отличие от двух, необходимых при d 1 = 0 {\displaystyle d_{1}=0} (см. алгоритм быстрого возведения в степень ). Обозначим t i {\displaystyle t_{i}} — время вычислений процессора для сообщения M i {\displaystyle M_{i}} .
Кохер показал, что когда d 1 = 1 {\displaystyle d_{1}=1} два ансамбля f t i g {\displaystyle {\mathcal {f}}t_{i}{\mathcal {g}}} и f T i g {\displaystyle {\mathcal {f}}T_{i}{\mathcal {g}}} коррелируют . Однако в случае d 1 = 0 {\displaystyle d_{1}=0} они независимы. Таким образом, прибегая к корреляционному анализу , противник может определить d 1 {\displaystyle d_{1}} .
  • аналогично можно определить d 2 , d 3 , {\displaystyle d_{2},d_{3},\dots } .

Заметим, что в случае малой открытой экспоненты e {\displaystyle e} может быть применена . В этом случае достаточно восстановить половину бит секретной экспоненты d {\displaystyle d} .

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

Атака при сбое аппаратной реализации RSA

Начальные условия:

Рассмотрим смарт-карту , микропроцессор которой подписывает сообщения, используя встроенный секретный ключ RSA. Микропроцессор карты использует китайскую теорему об остатках в целях ускорения процедуры подписи. Противник пытается вызвать сбой в вычислениях микропроцессора.

Задача: противник хочет вычислить модуль n {\displaystyle n} .

Использование китайской теоремы об остатках, увеличивает скорость создания цифровой подписи.

Действительно, вычислив
σ p = M d p mod p {\displaystyle \sigma _{p}=M^{d_{p}}\mod p} , где d p = d mod ( p 1 ) ( a ) {\displaystyle d_{p}=d\mod (p-1)~~~~(a)}
σ q = M d q mod q {\displaystyle \sigma _{q}=M^{d_{q}}\mod q} , где d q = d mod ( q 1 ) ( b ) {\displaystyle d_{q}=d\mod (q-1)~~~~(b)}
можно получить подпись
σ = T 1 σ p + T 2 σ q ( mod n ) {\displaystyle \sigma =T_{1}\sigma _{p}+T_{2}\sigma _{q}({\bmod {n}})} , где T 1 = f 1 mod p , 0 mod q g {\displaystyle T_{1}={\mathcal {f}}1\mod p,0\mod q{\mathcal {g}}}
T 2 = f 0 mod p , 1 mod q g {\displaystyle T_{2}={\mathcal {f}}0\mod p,1\mod q{\mathcal {g}}}
Очевидно вычисления ( a ) , ( b ) {\displaystyle (a),(b)} гораздо быстрее возведения в степень по модулю n {\displaystyle n} .

Пусть действия противника вызвали сбой, повлёкший за собой дефект одного бита подписи. Тогда по крайней мере одна из σ p {\displaystyle \sigma _{p}} или σ q {\displaystyle \sigma _{q}} вычислена неправильно. Положим, дефект содержится в σ q ^ {\displaystyle {\hat {\sigma _{q}}}} .

В этом случае

σ e ^ M mod n {\displaystyle {\hat {\sigma ^{e}}}\neq M\mod n}
σ e ^ M mod q {\displaystyle {\hat {\sigma ^{e}}}\neq M\mod q}

однако

σ e ^ = M mod p {\displaystyle {\hat {\sigma ^{e}}}=M\mod p}

Таким образом противник может найти разложение n {\displaystyle n} ,как результат поиска НОД ( n , σ e ^ m ) {\displaystyle (n,{\hat {\sigma _{e}}}-m)} .

Защита:

  • при подписи добавлять в сообщение некоторое случайное число(например, время).
  • проверять подпись перед тем как её отправить.

Уязвимость в процессорах AMD

В 2021 году, группа исследователей, включающая Грацский технический университет , технологический институт Джорджии и некоммерческий исследовательский центр «Lamarr Security Research», используя уязвимость SMT в процессорах AMD с архитектурами Zen , Zen 2 и Zen 3 , смогла «взломать» ключ шифрования RSA -4096 .

Примечания

  1. Ян С. Й. Криптоанализ RSA. — М.-Ижевск: НИЦ «Регулярная и хаотическая динамика», Ижевский институт компьютерных исследований, 2011. — 312 с.
  2. от 13 апреля 2014 на Wayback Machine (англ.)
  3. от 13 декабря 2012 на Wayback Machine (англ.)
  4. PDF
  5. Anton Shilov. (англ.) . Tom’s Hardware (11 августа 2022). Дата обращения: 12 августа 2022.
  6. Владимир Фетисов. (рус.) . 3DNews (11 августа 2022). Дата обращения: 12 августа 2022. 11 августа 2022 года.

Same as Криптоанализ RSA