Теорема Копперсмита

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

Теорема Копперсмита (метод Копперсмита) — теорема, позволяющая эффективно найти все нули нормированных многочленов по определённому модулю.[1]

Теорема используется в основном для атак на криптосистему RSA. Этот метод является эффективным, если экспонента кодирования имеет достаточно малое значение, либо когда известна часть секретного ключа. Теорема также связана с LLL-алгоритмом.

Описание

Введение

Теорема предлагает алгоритм эффективного нахождения корней нормированного многочлена f по модулю N, которые меньше чем X=N1/d. Если X будет малым, то алгоритм будет работать быстрее. Преимущество теоремы это возможность находить малые корни многочлена по составному модулю N. Если же модуль — простое число, то нет смысла использовать теорему Копперсмита. Намного эффективнее будет использовать другие способы нахождения корней многочлена.[1]

Маленькая экспонента кодирования

Чтобы уменьшить время шифрования или проверки подписи, желательно использовать маленькое e (экспонента кодирования). Наименьшее возможное значение — 3, однако рекомендуется использовать e=216+1=65537 (для защиты от некоторых атак). При использовании значения 216+1 на проверку подписи требуется 17 умножений (eϕ(N), где ϕ(N) — порядок мультипликативной группы N, возможно около 1000). Атаки ориентированные на использование маленького e не всегда действенны.

Самые мощные атаки на маленькую экспоненту кодирования основываются на теореме Копперсмита, которая имеет много приложений, одно из которых атака Хастеда (Hasted).[2]

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

Предположим один отправитель отправляет одно и то же сообщение M в зашифрованном виде определённому количеству людей P1;P2;...;Pk, каждый из которых использует одну и ту же маленькую экспоненту кодирования e, скажем e=3, и различные пары Ni,e, причем M<Ni,i. Отправитель зашифровывает сообщение, используя поочередно открытый ключ каждого пользователя, и отсылает его соответствующему адресату. Тогда, если противник прослушает канал передачи и соберет k3 переданных шифротекстов, то он сможет восстановить сообщение M.

Доказательство

Предположим противник перехватил C1,C2 и C3, где Ci=M3modNi. Мы предполагаем, что N1,N2,N3 взаимно просты, иначе наибольший общий делитель отличный от единицы означал нахождение делителя одного из n. Применяя китайскую теорему об остатках к C1,C2 и C3 получим CN1,N2,N3, такое что CiCmodNi, которое имеет значение C=M3modN1N2N3. Однако, зная что M<Ni,i, получаем M3<N1N2N3. Поэтому C=M3, то есть противник может расшифровать сообщение M взяв корень кубический от C.

Для восстановления сообщения M с любым значением открытой экспоненты кодирования e, необходимо противнику перехватить ke шифротекстов.

Формулировка

Пусть N и f(x)[𝕩] нормированный многочлен степени d. Пусть X=N1dε, ε0. Тогда по паре N,f атакующий эффективно найдет все целые числа |x0|<|X|, удовлетворяющие f(x0)0modN. Время выполнения определяется выполнением LLL-алгоритма на решетке размерности O(ω), где ω=min{1ε,log2N}.[1]

Доказательство

Пусть m>1 натуральное число, которое мы определим позже. Определим

gi,k(x)=xi(f(x)/M)k

Мы используем в качестве основы для нашей решетки L полиномы gi,k(xX) для i=0,...,d1 и k=0,...,m1. Например, когда d=3 и m=3 мы получаем матрицу решетки, натянутую на строки:

[1XX2X3M1X4M1X5M1X6M2X7M2X8M2],

где «—» обозначает ненулевые недиагональные элементы, значение которых не влияет на определитель. Размер этой решетки равен ω=md, а её определитель считается так:

det(L)=Xω(ω1)/2Mω(m1)/2

Потребуем, чтобы det(L)<2ω(ω1)/4ωω/2. Отсюда следует

X<M(m1)/(ω1)21/2ω1/(ω1)

что можно упростить до

X<γωM1dε,

где ε=d1d(ω1) и 122γω<12 для всех ω. Если мы возьмем m, то получим ω а, следовательно, и ε0. В частности, если мы хотим решить X<M1dε0 для произвольного ε0, достаточно взять m=O(k/d), где k=min{1ε,log2N}. [3]

См. также

Примечания

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