Атака Винера

Материал из testwiki
Перейти к навигации Перейти к поиску

Атака Винера, названная в честь криптолога Майкла Дж. Винера, является типом криптографической атаки против алгоритма RSA. Атака использует метод непрерывной дроби, чтобы взломать систему при малом значении закрытой экспоненты d.

Кратко о RSA

Прежде чем начать описание того, как работает атака Винера, стоит ввести некоторые понятия, которые используются в RSAШаблон:Sfn. Более подробную информацию см. в основной статье о RSA.

Для шифрования сообщений по схеме RSA используется открытый ключ - пара чисел (e,N), для расшифрования - закрытый ключ (d,N). Числа e,d называются открытой и закрытой экспонентой соответственно, число N - модулем. Mодуль N=pq, где p и q - два простых числа. Связь между закрытой, открытой экспонентой и модулем задаётся, как ed=1modφ(N), где φ(N)=(p1)(q1) функция Эйлера.

Если по открытому ключу (e,N) за короткое время можно восстановить d, то ключ уязвим: получив информацию о закрытом ключе (d,N), у злоумышленников появляется возможность расшифровать сообщение.

История алгоритма

Криптосистема RSA был изобретена Рональдом Ривестом, Ади Шамир и Леонардом Адлеманом и впервые опубликован в 1977 годуШаблон:Sfn. С момента публикации статьи криптосистема RSA была исследована на уязвимости многими исследователями.Шаблон:Sfn Большая часть таких атак используют потенциально опасные реализации алгоритма и пользуются явными условиями на какой-либо недочёт в алгоритме: общий модуль, малый открытый ключ, малый закрытый ключШаблон:Sfn. Так алгоритм атаки крипотографической атаки на алгоритм RSA с малым закрытым ключом был предложен криптологом Майклом Дж. Винером в статье, впервые опубликованной в 1990 году.Шаблон:Sfn Теорема Винера утверждает о том, что если выполняется условие малости ключа, то закрытый ключ может быть найден за линейное время.

Малый закрытый ключ

В криптосистеме RSA Боб может использовать меньшее значение d, а не большое случайное число, чтобы улучшить производительность расшифровки RSA. Однако атака Винера показывает, что выбор небольшого значения для d приведет к небезопасному шифрованию, в котором злоумышленник может восстановить всю секретную информацию, то есть взломать систему RSA. Этот взлом основан на теореме Винера, которая справедлива при малых значениях d. Винер доказал, что злоумышленник может эффективно найти d, когда d<13N14.

Винер также представил некоторые контрмеры против его атаки. Два метода описаны ниже:Шаблон:Sfn

1. Выбор большого открытого ключа :

Заменить e на e, где e=e+kφ(N) для некоторого большого k. Когда e достаточно велик, то есть e>N32, то атака Винера неприменима независимо от того, насколько мал d.

2. Используя китайскую теорему об остатках:

Выбрать d так, чтобы и dp=dmod(p1), и dq=dmod(q1) были малы, но сам d нет, то быстрое дешифрование сообщения C может быть выполнено следующим образом:
  1. Сначала вычисляется Mp=Cdpmodp и Mq=Cdqmodq
  2. Используя китайскую теорему об остатках, чтобы вычислить уникальное значение M, которое удовлетворяет M=Mpmodp и M=Mqmodq. Результат Mудовлетворяет M=CdmodN как и требовалось. Дело в том, что атака Винера здесь неприменима, потому что значение dmodφ(N) может быть большим.

Шаблон:См. также

Как работает атака Винера

Поскольку

ed=1(modlcm(p1,q1))),

то существует целое K такое, что:

ed=K×lcm(p1,q1)+1.

Стоит определить G=gcd(p1,q1) и подставить в предыдущее уравнение:

ed=KG(p1)(q1)+1.

Если обозначить k=Kgcd(K,G) и g=Ggcd(K,G), то подстановка в предыдущее уравнение даст:

ed=kg(p1)(q1)+1.

Разделив обе части уравнения на dpq, выходит что:

epq=kdg(1δ), где δ=p+q1gkpq.

В итоге, epq немного меньше, чем kdg, причём первая дробь состоит целиком из публичной информации. Тем не менее, метод проверки такого предположения всё ещё необходим. Принимая во внимание, что ed>pq последнее уравнение может быть записано как:

edg=k(p1)(q1)+g.

Используя простые алгебраические операции и тождества, можно установить точность такого предположения.Шаблон:Sfn

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

Пусть N=pq, где q<p<2q. Пусть d<13N14.

Имея N,e, где ed=1modφ(N), взломщик может восстановить d.Шаблон:Sfn

Доказательство теоремы Винера

Доказательство построено на приближениях с использованием непрерывных дробей.Шаблон:Sfn

Поскольку ed=1modφ(N), то существует 𝑘 при котором edkφ(N)=1. Следовательно:

|eφ(N)kd|=1dφ(N).

Значит, kd - это приближение eφ(N). Несмотря на то что взломщик не знает φ(N), он может использовать N чтобы его приблизить. Действительно, поскольку:

φ(N)=Npq+1 and p+q1<3N, мы имеем: |p+q1|<3N и |N+1φ(N)1|<3N

Используя N вместо φ(N), получим:

|eNkd|=|edknNd|=|edkφ(N)kN+kφ(N)Nd|
=|1k(Nφ(N))Nd||3kNNd|=3kNNNd=3kdN

Теперь, kφ(N)=ed1<ed, значит kφ(N)<ed. Поскольку e<φ(N), значит kφ(N)<ed<φ(N)d, и в итоге получается:

kφ(N)<φ(N)d
где k<d

Так как k<d и d<13N14, следовательно:

(1)|eNkd|<1dN14

Поскольку d<13N14,2d<3d, то 2d<3d<N14, и исходя из этого 2d<N14, значит:

(2)12d>1N14

Из (1) и (2), можно заключить, что:

|eNkd|<3kdN<1d2d=12d2

Смысл теоремы заключается в том, что если условие выше удовлетворено, то kd появляется среди подходящих дробей для непрерывной дроби числа eN.

Следовательно, алгоритм в итоге найдёт такое kdШаблон:Sfn.

Описание алгоритма

Рассматривается открытый RSA ключ (e,N), по которому необходимо определить закрытую экспоненту d. Если известно, что d<13N14, то это возможно сделать по следующему алгоритму Шаблон:Sfn:

1. Разложить дробь eN в непрерывную дробь [a1,a2...].
2. Для непрерывной дроби [a1,a2...] найти множество всех возможных подходящих дробей kndn.
3. Исследовать подходящую дробь kndn:
3.1. Определить возможное значение φ(N), вычислив fn=edn1kn.
3.2. Решив уравнение x2((Nfn)+1)x+N=0, получить пару корней (pn,qn).
4. Если для пары корней (pn,qn) выполняется равенство N=pnqn, то закрытая экспонента найдена d=dn.
Если условие не выполняется или не удалось найти пару корней (pn,qn), то необходимо исследовать следующую подходящую дробь kn+1dn+1, вернувшись к шагу 3.

Пример работы алгоритма

Два данных примера Шаблон:Sfn наглядно демонстрируют нахождение закрытой экспоненты d, если известен открытый ключ RSA (e,N).

Для открытого ключа RSA (e,N)=(1073780833,1220275921):

Таблица: нахождение закрытой экспоненты d
e/N = [0, 1, 7, 3, 31, 5, 2, 12, 1, 28, 13, 2, 1, 2, 3]
n kn / dn phin pn qn pn qn
0 0/1 - - - -
1 1/1 1073780832 - - -
2 7/8 1227178094 - - -
3 22/25 1220205492 30763 39667 1220275921

Получается, что d=25. В этом примере можно заметить, что условие малости выполняется d<13N1462.30074....

Для открытого ключа RSA (e,N)=(1779399043,2796304957):

Таблица: нахождение закрытой экспоненты d
e/N = [0, 1, 1, 1, 2, 1, 340, 2, 1, 1, 3, 2, 3, 1, 21, 188]
n kn / dn fn pn qn pn qn
0 0/1 - - - -
1 1/1 1779399042 - - -
2 1/2 3558798085 - - -
3 2/3 2669098564 - - -
4 5/8 2847038468 - - -
5 7/11 2796198496 47129 59333 2796304957

Получается, что d=11. В этом примере так же можно заметить, что условие малости выполняется d<13N1476.65224....

Сложность алгоритма

Сложность алгоритма определяется количеством подходящих дробей для непрерывной дроби числа eN, что есть величина порядка O(log(n)). То есть число d восстанавливается за линейное времяШаблон:Sfn от длины ключа.

Ссылки

Шаблон:Примечания

Литература