Русская Википедия:Атака Копперсмита

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

Атака Копперсмита описывает класс криптографических атак на открытый ключ криптосистемы RSA, основанный на методе Копперсмита. Особенность применения этого метода для атак RSA включает случаи, когда открытая экспонента мала или когда частично известен секретный ключ.

Основы RSA

Открытый ключ криптосистемы RSA это пара натуральных чисел <math>\left \langle N,e \right \rangle</math>, где <math>N</math> это произведение двух простых чисел <math>p</math> и <math>q</math>, а число <math>e</math> — открытая экспонента. Целое число <math>e</math> (<math>1<e<\phi(N)</math>, где <math>\phi(N)=(p-1)(q-1)</math> — функция Эйлера от числа <math>N</math>) взаимно простое со значением <math>\phi(N)</math>. Обычно в качество <math>e</math> берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например, простые числа Ферма 17, 257 или 65537.

Секретный ключ определяется через закрытую экспоненту <math>d</math>. Число <math>d</math> является мультипликативно обратным к числу <math>e</math> по модулю <math>\phi(N)</math>, то есть число, удовлетворяет соотношению:

<math>d\cdot e\equiv1\bmod \phi(N)</math>.

Пара <math>\left \langle N,e \right \rangle</math> публикуется в качестве открытого ключа RSA (Шаблон:Lang-en), а пара <math>\left \langle N,d \right \rangle</math> играет роль закрытого ключа RSA (Шаблон:Lang-en) и держится в секрете.

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

Формулировка[1]

Пусть <math>N\in\mathbb{Z}</math> и <math>f(x)\in\mathbb{Z[x]} -</math> нормированный многочлен степени <math>d</math>. Пусть <math>X=N^{\tfrac{1}{d} - \varepsilon}</math>, <math>\varepsilon \geqslant 0</math>. Тогда по паре <math>\left \langle N,f \right \rangle</math> атакующий эффективно найдет все целые числа <math>\left \vert x_{0} \right \vert<\left \vert X \right \vert</math>, удовлетворяющие <math>f(x_{0})\equiv 0 \bmod N</math>. Время выполнения определяется выполнением LLL-алгоритма на решетке размерности <math>O(\omega)</math>, где <math>\omega = \min\left \{ \tfrac{1}{\varepsilon},\log_{2}{N}\right \}</math>.[2]

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

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

<math>g_{i,k}(x)=x^i(f(x)/M)^k</math>

Мы используем в качестве основы для нашей решетки <math>L</math> полиномы <math>g_{i,k}(xX)</math> для <math>i=0,...,d-1</math> и <math>k=0,...,m-1</math>. Например, когда <math>d=3</math> и <math>m=3</math> мы получаем матрицу решетки, натянутую на строки:

<math>\begin{bmatrix} 1 \\ & X \\ & & X^2 \\ - & - & - & X^3M^{-1} \\ & - & - & - & X^4M^{-1} \\ & & - & - & - & X^5M^{-1} \\ - & - & - & - & - & - & X^6M^{-2} \\ & - & - & - & - & - & - & X^7M^{-2} \\ & & - & - & - & - & - & - & X^8M^{-2} \end{bmatrix}</math>,

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

<math>\det(L) = X^{\omega(\omega-1)/2}M^{-\omega(m-1)/2}</math>

Потребуем, чтобы <math>\det(L) < 2^{-\omega(\omega-1)/4}\omega^{-\omega/2}</math>. Отсюда следует

<math>X<M^{(m-1)/(\omega-1)}2^{-1/2}\omega^{-1/(\omega-1)}</math>

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

<math>X < \gamma_\omega\centerdot M^{\tfrac{1}{d}-\varepsilon}</math>,

где <math>\varepsilon=\tfrac{d-1}{d(\omega-1)}</math> и <math>\tfrac{1}{2\sqrt 2}\leqslant\gamma_\omega<\tfrac{1}{\sqrt 2}</math> для всех <math>\omega</math>. Если мы возьмем <math>m\rightarrow \infty</math>, то получим <math>\omega \rightarrow \infty</math> а, следовательно, и <math>\varepsilon \rightarrow 0</math>. В частности, если мы хотим решить <math>X < M^{\tfrac{1}{d}-\varepsilon_0}</math> для произвольного <math>\varepsilon_0</math>, достаточно взять <math>m=O(k/d)</math>, где <math>k = \min\left \{ \tfrac{1}{\varepsilon},\log_{2}{N}\right \}</math>. <math>\blacksquare</math>[3]

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

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

Предположим один отправитель отправляет одно и то же сообщение <math>M</math> в зашифрованном виде определённому количеству людей <math>P_1;P_2;...;P_k</math>, каждый из которых использует одну и ту же маленькую экспоненту кодирования <math display="inline">e</math>, скажем <math>e=3</math>, и различные пары <math>\left \langle N_i,e \right \rangle</math>, причем <math>M<N_i, \forall i</math>. Отправитель зашифровывает сообщение, используя поочередно открытый ключ каждого пользователя, и отсылает его соответствующему адресату. Тогда, если противник прослушает канал передачи и соберет <math>k\geqslant3</math> переданных шифротекстов, то он сможет восстановить сообщение <math>M</math>.

Доказательство[4]

<math>\Box</math> Предположим противник перехватил <math>C_1,C_2</math> и <math>C_3</math>, где <math>C_i = M^3\bmod N_i</math>. Мы предполагаем, что <math>N_1,N_2,N_3</math> взаимно просты, иначе наибольший общий делитель отличный от единицы означал нахождение делителя одного из <math>n</math>. Применяя китайскую теорему об остатках к <math>C_1,C_2</math> и <math>C_3</math> получим <math>C\in \mathbb{Z}_{N_1,N_2,N_3}</math>, такое что <math>C_i\equiv C\bmod N_i</math>, которое имеет значение <math>C = M^3\bmod N_1 N_2 N_3</math>. Однако, зная что <math>M<N_i,\forall i</math>, получаем <math>M^3<N_1 N_2 N_3</math>. Поэтому <math>C= M^3</math>, то есть противник может расшифровать сообщение <math>M</math> взяв корень кубический от <math>C</math>.

Для восстановления сообщения <math>M</math> с любым значением открытой экспоненты кодирования <math display="inline">e</math>, необходимо противнику перехватить <math>k\geqslant e</math> шифротекстов. <math>\blacksquare</math>

Атака Копперсмита

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

Предположим <math>\left \langle N,e \right \rangle</math> открытый ключ RSA, где <math>N</math> длины <math>n</math>-бит. Возьмем множество <math>m=\lfloor n/e^2\rfloor</math>. Пусть <math>M\in\mathbb{Z}_N</math> сообщение длины не более <math>n-m</math> бит. Определим <math>M_1=2^mM+r_1</math> и <math>M_2=2^mM+r_2</math>, где <math>r_1</math> и <math>r_2</math> различные целые числа, причем <math>0\leqslant r_1</math> и <math>r_2\leqslant 2^m</math>.Если противник получит <math>\left \langle N,e \right \rangle</math> и шифры <math>C_1,C_2</math> от <math>M_1,M_2</math>(но не получит <math>r_1</math> или <math>r_2</math>), то он сможет эффективно восстановить сообщение <math>M</math>.

Доказательство[2]

<math>\Box</math> Определим <math>g_1(x,y)=x^e-C_1</math> и <math>g_1(x,y)=(x+y)^e-C_2</math>. Мы знаем, что когда <math>y=r_2-r_1</math>, эти полиномы имеют <math>M_1</math> в качестве общего корня. Другими словами <math>\Delta=r_2-r_1</math> это корень «результирующей» <math>h(y)=\mathrm{res}_x(g_1,g_2)\in \mathbb{Z}_N[y]</math>. Степень <math>h</math> чаще всего <math>e^2</math>. Более того, <math>|\Delta|<2^m <N^{1/e^2}</math>. Следовательно, <math>\Delta</math> это малый корень <math>h</math> по модулю <math>N</math>, и противник может эффективно найти его, используя теорему Копперсмита. Как только <math>\Delta</math> известна, может быть использована атака Франклина-Рейтера, чтобы покрыть <math>M_2</math>, следовательно, и <math>M</math>. <math>\blacksquare</math>

Примечания

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