Интерполяционная атака Содержание Пример | Существование...


Криптографические атаки


криптографииблочных шифрахдифференциальный криптоанализлинейный криптоанализSHARKТомас ЯкобсенЛарс КнудсенS-Boxквадратичная функцияполиномрациональная функцияполем Галуаинтерполяции Лагранжаоткрытыe текстыключанепрерывную функциюитерацияконстантыобратную функциюSP-сетькодов Рида-Соломона




Интерполяционная атака — в криптографии тип криптоаналитической атаки в блочных шифрах.


Для взлома блочных шифров существовало 2 вида атак: дифференциальный криптоанализ и линейный криптоанализ. Со временем были представлены некоторые блочные шифры, на примере которых была доказана их безопасность от дифференциальных и линейных атак. Такими шифрами являлись шифры: KN-Cipher[en] и SHARK. Тем не менее, в конце 90-х годов Томас Якобсен и Ларс Кнудсен показали, что эти шифры легко взломать, введя новую атаку под названием интерполяционная атака.


В этой атаке, алгебраическая функция используется для представления S-Box. Это может быть простое квадратичная функция, полином или рациональная функция над полем Галуа. Еe коэффициенты могут быть определены с помощью стандартных методов интерполяции Лагранжа, с использованием известных открытых текстов как точек данных. Кроме того, выбранные открытыe тексты могут быть использованы для упрощения уравнений и оптимизировать атаку.
В простейшем варианте интерполяционная атака выражает зашифрованный текст в виде многочлена от текста. Если многочлен имеет относительно низкое число неизвестных коэффициентов, то с набором пар открытого текста / зашифрованного текста, полином может быть восстановлен. Зная полиномом восстановления, атакующий имеет представление о шифровании без точного знания секретного ключа. Интерполяционная атака невозможна, если использовать не непрерывную функцию.


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




Содержание






  • 1 Пример


  • 2 Существование


  • 3 Временная сложность


  • 4 Интерполяционная атака Meet-In-The-Middle (метод согласования)


    • 4.1 Временная сложность




  • 5 Ключ восстановления


    • 5.1 Временная сложность




  • 6 Использование


  • 7 Примечания


  • 8 Литература





Пример |


Пусть итерация шифрования задаётся как


ci=(ci−1⊕ki)3,{displaystyle c_{i}=(c_{i-1}oplus k_{i})^{3},}

Где c0{displaystyle c_{0}} — это открытый текст, ki∈K{displaystyle k_{i}in K} — секретный раундовый ключ, cr{displaystyle c_{r}} — зашифрованный текст для r{displaystyle r} — раундовой итерации шифрования.


Рассмотрим 2-раундовый шифр. Пусть x{displaystyle x} — сообщение иc{displaystyle c} — зашифрованный текст, тогда на выходе из 1-го раунда получаем


c1=(x+k1)3=(x2+k12)(x+k1)=x3+k12x+x2k1+k13,{displaystyle c_{1}=(x+k_{1})^{3}=(x^{2}+k_{1}^{2})(x+k_{1})=x^{3}+k_{1}^{2}x+x^{2}k_{1}+k_{1}^{3},}

А на выходе из 2-го раунда:



c2=c=(c1+k2)3=(x3+k12x+x2k1+k13+k2)3{displaystyle c_{2}=c=(c_{1}+k_{2})^{3}=(x^{3}+k_{1}^{2}x+x^{2}k_{1}+k_{1}^{3}+k_{2})^{3}}

=x9+x8k1+x6k2+x4k12k2+x3k22+x2(k1k22+k14k2)+x(k12k22+k18)+k13k22+k19+k23,{displaystyle =x^{9}+x^{8}k_{1}+x^{6}k_{2}+x^{4}k_{1}^{2}k_{2}+x^{3}k_{2}^{2}+x^{2}(k_{1}k_{2}^{2}+k_{1}^{4}k_{2})+x(k_{1}^{2}k_{2}^{2}+k_{1}^{8})+k_{1}^{3}k_{2}^{2}+k_{1}^{9}+k_{2}^{3},}


Зашифрованный текст в виде полинома открытого текста выходов


p(x)=a1x9+a2x8+a3x6+a4x4+a5x3+a6x2+a7x+a8,{displaystyle p(x)=a_{1}x^{9}+a_{2}x^{8}+a_{3}x^{6}+a_{4}x^{4}+a_{5}x^{3}+a_{6}x^{2}+a_{7}x+a_{8},}

где ai{displaystyle a_{i}} — ключ, зависящий от константы


Если мы будем использовать столько пар открытый текста / зашифрованный текст сколько неизвестных коэффициентов в многочлене p(x){displaystyle p(x)}, то мы сможем построить многочлен. Это можно сделать, например, путём интерполяции Лагранжа. Когда неизвестные коэффициенты станут определены, мы будем иметь представление шифрования p(x){displaystyle p(x)}, без знания секретного ключа K{displaystyle K}.



Существование |


Пусть в блочном шифре m{displaystyle m} битов, то есть 2m{displaystyle 2^{m}} возможных открытых текстов, следовательно, 2m{displaystyle 2^{m}} различных пар отношения открытого текста к зашифрованному тексту p/c{displaystyle p/c}. Пусть имеется n{displaystyle n} неизвестных коэффициентов в p(x){displaystyle p(x)}. С нас требуются так много пар p/c{displaystyle p/c}, какое количество неизвестных коэффициентов в многочлене. Т. о. интерполяционная атака существует только при n≤2m{displaystyle nleq 2^{m}}.



Временная сложность |


Предположим, что время для построения полинома p(x){displaystyle p(x)} с помощью пар p/c{displaystyle p/c} мало, по сравнению с временем, которое необходимо для того, чтобы зашифровать открытые тексты. Пусть имеется n{displaystyle n} неизвестных коэффициентов в p(x){displaystyle p(x)}. Тогда трудоемкость для данной атаки равна n{displaystyle n}, требуется n{displaystyle n} известных отличий от пар p/c{displaystyle p/c}.



Интерполяционная атака Meet-In-The-Middle (метод согласования) |


Зачастую именно этот метод является эффективным. Как он работает?


Пусть есть r{displaystyle r} раундовый шифр с длиной блока m{displaystyle m}, пусть z{displaystyle z} — выход шифра после s{displaystyle s} раундов s<r{displaystyle s<r}. Мы выразим значение z{displaystyle z} в виде полинома открытого текста x{displaystyle x}, и как многочлен зашифрованного текста c{displaystyle c}. Пусть g(x)∈GF(2m)[x]{displaystyle g(x)in GF(2^{m})[x]} выражает z{displaystyle z} через x{displaystyle x}, и пусть h(c)∈GF(2m)[c]{displaystyle h(c)in GF(2^{m})[c]} выражает z{displaystyle z} через c{displaystyle c}. Полином g(x){displaystyle g(x)} мы получим вычисляя вперед и не используя повторных формул шифра до раунда, включая s{displaystyle s}. Полином h(c){displaystyle h(c)} мы получим вычисляя назад и используя повторную формулу шифра до s+1{displaystyle s+1} раунда.


Таким образом получается, что


g(x)=h(c),{displaystyle g(x)=h(c),}

и если оба многочлена g{displaystyle g} и h{displaystyle h} с небольшим количеством коэффициентов, то мы можем решить уравнение для неизвестных коэффициентов.



Временная сложность |


Предположим, что g(x){displaystyle g(x)} может быть выражено через коэффициенты p{displaystyle p}, и h(c){displaystyle h(c)} может быть выражено через коэффициенты q{displaystyle q}. Тогда нам нужно было бы p+q{displaystyle p+q} известных отличий p/c{displaystyle p/c} пар, чтобы решить уравнение, путём установки его в качестве матричного уравнения. Однако, это матричное уравнение разрешимо с точностью до умножения и сложения. Таким образом, чтобы убедиться, что мы получаем единственное и ненулевое решение, мы устанавливаем коэффициент, соответствующий высшей степени равным 1, и постоянный член равным нулю. Поэтому требуется p+q−2{displaystyle p+q-2} известных отличия пары p/c{displaystyle p/c} . Так временная сложность за эту атаку p+q−2{displaystyle p+q-2}.
Подход Meet-In-The-Middle обычно имеет меньшее количество коэффициентов чем обычный метод. Это делает этот метод более эффективным, так как нам требуется меньшее количество пар p/c{displaystyle p/c}.



Ключ восстановления |


Мы можем также использовать интерполяционную атаку, чтобы восстановить секретный ключ K{displaystyle K}.
Если убрать последний раунд r{displaystyle r} — раундового повторного шифра длиной блока m{displaystyle m}, выход шифра становится y~=cr−1{displaystyle {tilde {y}}=c_{r-1}}. Получается шифр со сниженной сложностью шифрования. Идея состоит в том, чтобы сделать предположение на последнем kr{displaystyle k_{r}} раундового ключа мы можем расшифровать один раунд, чтобы получить выход y~{displaystyle {tilde {y}}} приведённого шифра. Тогда, чтобы проверить предположение, нужно использовать интерполяционную атаку на сниженный шифр либо обычным способом, либо с помощью метода Meet-In-The-Middle.


Обычным способом мы выражаем вывод y~{displaystyle {tilde {y}}} приведённого шифра в виде полинома открытого текста x{displaystyle x}. Получается многочлен p(x)∈GF(2m)[x]{displaystyle p(x)in GF(2^{m})[x]}. Тогда, если мы можем выразить p(x){displaystyle p(x)} с n{displaystyle n} коэффициентами, тогда с помощью n{displaystyle n} известными различиями пары p/c{displaystyle p/c}, мы можем построить многочлен. Чтобы проверить догадку на последнем раунде ключа, надо проверить с одной дополнительной парой p/c{displaystyle p/c}, если он считает, что


p(x)=y~.{displaystyle p(x)={tilde {y}}.}

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


Методом Meet-In-The-Middle мы выражаем выход z{displaystyle z} из раунда s<r{displaystyle s<r} в виде полинома открытого текста x{displaystyle x} и в виде полинома выхода пониженного шифра y~{displaystyle {tilde {y}}}. Пусть многочлены будут выражены через p{displaystyle p} и q{displaystyle q} коэффициенты, соответственно. Тогда с q+p−2{displaystyle q+p-2} известным различием пар p/c{displaystyle p/c} мы можем найти коэффициенты. Чтобы проверить догадку на последнем раунде ключа, проверяем с одной дополнительной парой p/c{displaystyle p/c} , если равенство


g(x)=h(y~).{displaystyle g(x)=h({tilde {y}}).}

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


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



Временная сложность |


Когда имеется секретный ключ длины m{displaystyle m}, тогда существует 2m{displaystyle 2^{m}} различных ключей. Вероятность того, что выбранный наугад ключ окажется правильным, составляет 1/2m{displaystyle 1/2^{m}}. Следовательно, в среднем нужно сделать 1/2⋅2m{displaystyle 1/2cdot 2^{m}} предположений прежде, чем найдется правильный ключ.
Т.о. обычный метод имеет временную сложность в среднем 2m−1(n+1){displaystyle 2^{m-1}(n+1)} и требует n+1{displaystyle n+1} известных различных пар c/p{displaystyle c/p}, а метод Meet-In-The-Middle имеет сложность 2m−1(p+q−1){displaystyle 2^{m-1}(p+q-1)} и требует p+q−1{displaystyle p+q-1} известных различных пар c/p{displaystyle c/p}.



Использование |


Атака Meet-in-the-Middle может быть использована в варианте для атаки S-блоков, которые используют обратную функцию, потому что с m{displaystyle m}-битной S-блоком, S:f(x)=x−1=x2m−2{displaystyle S:f(x)=x^{-1}=x^{2^{m}-2}} в GF(2m){displaystyle GF(2^{m})}.
Блочный шифр SHARK использует SP-сеть с S-блоками S:f(x)=x−1{displaystyle S:f(x)=x^{-1}}. Шифр устойчив к дифференциальному и линейному криптоанализу после небольшого количества раундов. Однако он был сломан в 1996 году Томасом Якобсен и Ларс Кнудсен, которые использовали интерполяционную атаку. Обозначим через SHARK(n,m,r){displaystyle (n,m,r)} версию SHARK с размером блока nm{displaystyle nm} бит с помощью n{displaystyle n} параллельных m{displaystyle m}-битных S-блоков с количеством раундов r{displaystyle r}. Якобсен и Кнудсен обнаружили, что существуют интерполяционная атака на АКУЛА (8,8,4){displaystyle (8,8,4)} (64-битный блок шифрования), используя около 221{displaystyle 2^{21}} выбранных открытых текстов и интерполяционная атака на АКУЛА (8,16,7){displaystyle (8,16,7)} (128-битный блочный шифр), используя около 261{displaystyle 2^{61}} выбранных открытых текстов.


Также Томас Якобсен представил вероятностный вариант интерполяционной атаки с использованием алгоритма Мадху Судана для улучшения декодирования кодов Рида-Соломона. Эта атака может работать, даже если алгебраическое отношение между открытыми текстами и шифротекстами имеет лишь часть значений.



Примечания |





Литература |



  • Thomas Jakobsen, Lars Knudsen. The Interpolation Attack on Block Ciphers. — Springer-Verlag, January 1997. — С. 28–40. — ISBN 3-540-63247-6.

  • E.Biham and A.Shamir. Differential Cryptanalysis of DES-like Cryptosystems. — 1991. — ISBN 3-89649-079-6.




Popular posts from this blog

Щит и меч (фильм) Содержание Названия серий | Сюжет |...

is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

Meter-Bus Содержание Параметры шины | Стандартизация |...