Это не официальный сайт wikipedia.org 01.01.2023

Атака Винера — Википедия

Атака Винера

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

Кратко о RSAПравить

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

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

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

История алгоритмаПравить

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

Малый закрытый ключПравить

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

Винер также представил некоторые контрмеры против его атаки. Два метода описаны ниже:[5]

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

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

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

Выбрать d   так, чтобы и d p = d mod ( p 1 )  , и d q = d mod ( q 1 )   были малы, но сам d   нет, то быстрое дешифрование сообщения C   может быть выполнено следующим образом:
  1. Сначала вычисляется M p = C d p mod p   и M q = C d q mod q  
  2. Используя китайскую теорему об остатках, чтобы вычислить уникальное значение M Z N  , которое удовлетворяет M = M p mod p   и M = M q mod q  . Результат M  удовлетворяет M = C d mod N   как и требовалось. Дело в том, что атака Винера здесь неприменима, потому что значение d mod φ ( N )   может быть большим.

Как работает атака ВинераПравить

Поскольку

e d = 1 ( mod lcm ( p 1 , q 1 ) ) )  ,

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

e d = K × lcm ( p 1 , q 1 ) + 1  .

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

e d = K G ( p 1 ) ( q 1 ) + 1  .

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

e d = k g ( p 1 ) ( q 1 ) + 1  .

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

e p q = k d g ( 1 δ )  , где δ = p + q 1 g k p q  .

В итоге, e p q   немного меньше, чем k d g  , причём первая дробь состоит целиком из публичной информации. Тем не менее, метод проверки такого предположения всё ещё необходим. Принимая во внимание, что e d > p q   последнее уравнение может быть записано как:

e d g = k ( p 1 ) ( q 1 ) + g  .

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

Теорема ВинераПравить

Пусть N = p q  , где q < p < 2 q  . Пусть d < 1 3 N 1 4  .

Имея N , e  , где e d = 1 mod φ ( N )  , взломщик может восстановить d  .[7]

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

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

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

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

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

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

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

| e N k d | = | e d k n N d | = | e d k φ ( N ) k N + k φ ( N ) N d |  
= | 1 k ( N φ ( N ) ) N d | | 3 k N N d | = 3 k N N N d = 3 k d N  

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

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

Так как k < d   и d < 1 3 N 1 4  , следовательно:

( 1 ) | e N k d | < 1 d N 1 4  

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

( 2 ) 1 2 d > 1 N 1 4  

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

| e N k d | < 3 k d N < 1 d 2 d = 1 2 d 2  

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

Следовательно, алгоритм в итоге найдёт такое k d  [9].

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

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

1. Разложить дробь e N   в непрерывную дробь [ a 1 , a 2 . . . ]  .
2. Для непрерывной дроби [ a 1 , a 2 . . . ]   найти множество всех возможных подходящих дробей k n d n  .
3. Исследовать подходящую дробь k n d n  :
3.1. Определить возможное значение φ ( N )  , вычислив f n = e d n 1 k n  .
3.2. Решив уравнение x 2 ( ( N f n ) + 1 ) x + N = 0  , получить пару корней ( p n , q n )  .
4. Если для пары корней ( p n , q n )   выполняется равенство N = p n q n  , то закрытая экспонента найдена d = d n  .
Если условие не выполняется или не удалось найти пару корней ( p n , q n )  , то необходимо исследовать следующую подходящую дробь k n + 1 d n + 1  , вернувшись к шагу 3.

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

Два данных примера [10] наглядно демонстрируют нахождение закрытой экспоненты 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 < 1 3 N 1 4 62.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 < 1 3 N 1 4 76.65224...  .

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

Сложность алгоритма определяется количеством подходящих дробей для непрерывной дроби числа e N  , что есть величина порядка O ( l o g ( n ) )  . То есть число d   восстанавливается за линейное время[11] от длины ключа.

СсылкиПравить

  1. 1 2 Rivest, 1978.
  2. Boneh, 1999, Introduction, p. 1.
  3. Coppersmith, 1996.
  4. Wiener, 1990.
  5. Wiener, 1990, Combatting the Continued Fraction Attack on RSA., p. 557.
  6. Render, 2007.
  7. Boneh, 1999.
  8. Khaled, 2006.
  9. Герман, 2012, Об уязвимости системы RSA. Малый секретный ключ., pp. 283-284.
  10. 1 2 Kedmi, 2016.
  11. Герман, 2012, Об уязвимости системы RSA. Малый секретный ключ., p. 284: «Количество же этих дробей есть величина порядка O(ln(n)), то есть число d восстанавливается за линейное время».

ЛитератураПравить