Главная
Новости
Строительство
Ремонт
Дизайн и интерьер
Полезные советы




24.03.2023


28.02.2023


29.12.2022


29.12.2022


23.12.2022


25.11.2022





Яндекс.Метрика





KHAZAD

14.04.2022

KHAZAD — в криптографии симметричный блочный шифр, разработанный двумя криптографами: бельгийцем Винсентом Рэйменом (автор шифра Rijndael) и бразильцем Пауло Баррето. В алгоритме используются блоки данных размером 64 бита (8 байт) и ключи размером 128 бит. KHAZAD был представлен на европейском конкурсе криптографических примитивов NESSIE в 2000 году, где в модифицированной (tweaked) форме стал одним из алгоритмов-финалистов (но не победителем).

Предшественником алгоритма KHAZAD считается разработанный в 1995 г. Винсентом Рэйменом и Йоаном Дайменом шифр SHARK. Авторы KHAZAD утверждают, что в основе алгоритма лежит стратегия разработки криптографически стойких алгоритмов шифрования (Wide-Trail strategy), предложенная Йоаном Дайменом.

Алгоритм KHAZAD имеет консервативные параметры и создан для замены существующих шифров с 64 битным блоком, таких как IDEA и DES, обеспечивая более высокий уровень безопасности при высокой скорости выполнения.

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

Описание шифра

KHAZAD — итеративный блочный шифр с размером блока 64 бита и 128-битным ключом. Входной блок данных представляется в виде строки из 8 байт.

S-блок и матрица перемешивания выбраны таким образом, который гарантирует, что шифрование и расшифрование — одна и та же операция (инволюция), за исключением раундовых подключей.

KHAZAD, как и алгоритм AES (Rijndael), принадлежит к семейству блочных шифров, произошедших от шифра SHARK.

Данное дерево описано в книге «The Block Cipher Companion», авторы Lars R. Knudsen, Matthew J.B. Robshaw

Основные отличия от SHARK представлены в таблице:

Первоначальный вариант шифра KHAZAD (названный KHAZAD-0) сейчас является устаревшим. Текущий (финальный) вид шифра был модифицирован («tweaked»), чтобы адаптировать его под аппаратную реализацию. В этой форме KHAZAD и был признан финалистом NESSIE. Модификация не затронула базовую структуру шифра. В нём S-блок, который первоначально генерировался полностью случайно (без чёткого определения какой-либо внутренней структуры), заменен на рекурсивную структуру: новый блок замены 8x8 составлен из маленьких псевдослучайно генерируемых 4x4 мини-блоков (P- и Q-блоки).

Структура алгоритма

Структура алгоритма шифрования

Применением к ключу K {displaystyle K} процедуры расширения ключа получают набор раундовых ключей k 0 . . . k 8 {displaystyle k_{0}...k_{8}} .

Алгоритм включает 8 раундов, каждый из которых состоит из 3 этапов:

  • нелинейное преобразование γ {displaystyle gamma }
  • линейное преобразование θ {displaystyle heta }
  • добавление раундового ключа σ {displaystyle sigma }

Перед первым раундом выполняется отбеливание — σ ( k 0 ) {displaystyle sigma (k_{0})} . Операция θ {displaystyle heta } не выполняется в последнем раунде.

В операторном виде алгоритм записывается следующим образом:

Шифрование: ( σ [ k 8 ] ∘ γ ) ∘ ( σ [ k 7 ] ∘ θ ∘ γ ) ∘ . . . ∘ ( σ [ k 1 ] ∘ θ ∘ γ ) ∘ σ [ k 0 ] {displaystyle (sigma [k_{8}]circ gamma )circ (sigma [k_{7}]circ heta circ gamma )circ ...circ (sigma [k_{1}]circ heta circ gamma )circ sigma [k_{0}]}

Расшифрование: ( σ [ k 0 ] ∘ γ ) ∘ ( σ [ θ ( k 1 ) ] ∘ θ ∘ γ ) ∘ . . . ∘ ( σ [ θ ( k 7 ) ] ∘ θ ∘ γ ) ∘ σ [ k 8 ] {displaystyle (sigma [k_{0}]circ gamma )circ (sigma [ heta (k_{1})]circ heta circ gamma )circ ...circ (sigma [ heta (k_{7})]circ heta circ gamma )circ sigma [k_{8}]}

Набор раундовых ключей k 0 . . . k 8 {displaystyle k_{0}...k_{8}} получают путём применения к ключу шифрования K {displaystyle K} процедуры расширения ключа.

Структура раунда

Раундовое преобразование можно записать так: ρ [ k ] = σ [ k ] ∘ θ ∘ γ {displaystyle ho [k]=sigma [k]circ heta circ gamma } .

Нелинейное преобразование γ {displaystyle gamma }

В каждом раунде входной блок разбивается на 8 байт, которые независимо подвергаются нелинейному преобразованию (замене), то есть параллельно проходят через одинаковые S-блоки (каждый S-блок — 8x8 бит, то есть 8 бит на входе и 8 бит на выходе). Блоки замены в оригинальном и модифицированном (tweaked) шифре различаются. Блок замены подобран таким образом, чтобы нелинейное преобразование было инволюционным, то есть γ = γ − 1 {displaystyle gamma =gamma ^{-1}} или γ ( γ ( x ) ) = x {displaystyle gamma (gamma (x))=x} .

Линейное преобразование θ {displaystyle heta }

8-байтная строка данных умножается побайтно на фиксированную матрицу H {displaystyle H} размера 8 х 8, причём умножение байт производится в поле Галуа G F ( 2 8 ) {displaystyle mathbb {GF} (2^{8})} с неприводимым полиномом x 8 + x 4 + x 3 + x 2 + 1 {displaystyle x^{8}+x^{4}+x^{3}+x^{2}+1} (0x11D).

θ ( x ) = x × H {displaystyle heta (x)=x imes H}

В вышеупомянутом поле Галуа матрица H {displaystyle H} является симметричной ( a i j = a j i {displaystyle a_{ij}=a_{ji}} , H = H T {displaystyle H=H^{T}} ) и ортогональной ( H − 1 = H T {displaystyle H^{-1}=H^{T}} ). То есть H − 1 = H {displaystyle H^{-1}=H} и преобразование, задаваемое этой матрицей является инволюцией: θ ( θ ( x ) ) = x × H × H = x × H × H − 1 = x × E = x { extstyle heta ( heta (x))=x imes H imes H=x imes H imes H^{-1}=x imes E=x} , где E {displaystyle E} — единичная матрица

Наложение раундового ключа σ [ k i ] {displaystyle sigma [k_{i}]}

Над 64-битным блоком данных и 64-битным раундовым ключом выполняется побитовая операция XOR.

Расширение ключа

128-битный (16-байтный) ключ K {displaystyle K} разбивается на 2 равные части:

  • k − 1 {displaystyle k_{-1}} — старшие 8 байт (с 15-го по 8-й)
  • k − 2 {displaystyle k_{-2}} — младшие 8 байт (с 7-го по 0-й)

Ключи k 0 . . . k 8 {displaystyle k_{0}...k_{8}} вычисляются по схеме Фейстеля:

k i = f ( C i , k i − 1 ) ⊕ k i − 2 {displaystyle k_{i}=f(C_{i},k_{i-1})oplus k_{i-2}}

Здесь:

f ( x , y ) {displaystyle f(x,y)} — функция раунда алгоритма с входным блоком x {displaystyle x} и ключом y {displaystyle y} .

C i {displaystyle C_{i}} — 64-битная константа, j {displaystyle j} -й байт которой C i j = S ( 8 i + j ) {displaystyle C_{i}^{j}=S(8i+j)} .

Структура нелинейного преобразования и модификация шифра

Оригинальный шифр

В первоначальном варианте шифра (KHAZAD-0) табличная замена представлялась классическим S-блоком и описывалась следующей матрицей:

Данная таблица полностью эквивалентна используемой в алгоритме Anubis (ещё один алгоритм, разработанный и представленный на конкурс NESSIE теми же авторами).

Принцип выбора S-блока

Любая булева функция f : G F ( 2 ) n → G F ( 2 ) {displaystyle f:GF(2)^{n} ightarrow GF(2)} может быть представлена в виде полинома Жегалкина (алгебраическая нормальная форма). Нелинейным порядком функции f {displaystyle f} называется порядок полинома Жегалкина, то есть максимальный из порядков его членов.

Если α ∈ G F ( 2 ) n {displaystyle alpha in GF(2)^{n}} , введем функцию l α = ⨁ i = 0 n − 1 α i ⋅ x i {displaystyle l_{alpha }=igoplus _{i=0}^{n-1}alpha _{i}cdot x_{i}} , l α : G F ( 2 ) n → G F ( 2 ) {displaystyle l_{alpha }:GF(2)^{n} ightarrow GF(2)}

Блок замены — это отображение G F ( 2 n ) → G F ( 2 n ) {displaystyle GF(2^{n}) ightarrow GF(2^{n})} . Также, на него можно смотреть как на отображение G F ( 2 ) n → G F ( 2 ) n {displaystyle GF(2)^{n} ightarrow GF(2)^{n}} .

S [ x ] = ( s 0 ( x ) , . . . , s n − 1 ( x ) ) {displaystyle S[x]=(s_{0}(x),...,s_{n-1}(x))} , где s i : G F ( 2 ) n → G F ( 2 ) , 0 ⩽ i ⩽ n − 1 {displaystyle s_{i}:GF(2)^{n} ightarrow GF(2),0leqslant ileqslant n-1}

Нелинейный порядок S-блока S {displaystyle S} — ν s {displaystyle u _{s}} — минимальный нелинейный порядок среди всех линейных комбинаций компонентов S {displaystyle S} : ν s ≡ min α ∈ G F ( 2 ) n ν ( l α ∘ S ) {displaystyle u _{s}equiv min _{alpha in GF(2)^{n}} u (l_{alpha }circ S)}

δ {displaystyle delta } -параметр S-блока: δ S ≡ 2 − n ⋅ max a ≠ 0 , b { c ∈ G F ( 2 n ) ∣ S [ c ⊕ a ] ⊕ S [ c ] = b } {displaystyle delta _{S}equiv 2^{-n}cdot max _{a eq 0,b}{cin GF(2^{n})mid S[coplus a]oplus S[c]=b}} , значение 2 n ⋅ δ {displaystyle 2^{n}cdot delta } называется дифференциальной равномерностью S {displaystyle S}

Корреляция двух булевых функций c ( f , g ) ≡ 2 1 − n ⋅ { x ∣ f ( x ) = g ( x ) } − 1 {displaystyle c(f,g)equiv 2^{1-n}cdot {xmid f(x)=g(x)}-1}

λ {displaystyle lambda } -параметр S-блока: λ S ≡ max ( i , j ) ≠ ( 0 , 0 ) | c ( l i , l j ∘ S ) | {displaystyle lambda _{S}equiv max _{(i,j) eq (0,0)}leftvert c(l_{i},l_{j}circ S) ightvert }

В шифре KHAZAD-0 используется псевдорандомно сгенерированный S-блок, удовлетворяющий следующим требованиям:

  • должен быть инволюцией
  • δ {displaystyle delta } -параметр не должен превышать значение 8 × 2 − 8 {displaystyle 8 imes 2^{-8}}
  • λ {displaystyle lambda } -параметр не должен превышать значение 16 × 2 − 6 {displaystyle 16 imes 2^{-6}}
  • нелинейный порядок ν {displaystyle u } должен быть максимальным, а именно, равным 7

Модифицированный шифр

Пользуясь возможностью незначительного изменения алгоритма в течение первого раунда конкурса, авторы Khazad также внесли изменения в свой алгоритм. В новом варианте спецификации алгоритма исходный алгоритм Khazad назван Khazad-0, а название Khazad присвоено модифицированному алгоритму. (Панасенко С. П. «Алгоритмы шифрования. Специальный справочник»)

В модифицированной версии шифра S-блок 8x8 изменён и представлен рекурсивной структурой, состоящей из мини-блоков P и Q, каждый из которых является маленьким блоком замены с 4 битами на входе и выходе (4x4).

Рекурсивная структура блока замены в модифицированном шифре KHAZAD:

Данная структура P- и Q-миниблоков эквивалентна S-блоку со следующей таблицей замены:

Из таблиц легко заметить, что как в первоначальном варианте, так и в модифицированном S-блоки являются инволюционными, то есть S ( S ( x ) ) = x {displaystyle S(S(x))=x} .

Безопасность

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

Это подразумевает, помимо прочего, следующее:

  • наиболее эффективной атакой на нахождение ключа для шифра KHAZAD является полный перебор.
  • получение из данных пар открытый текст — шифротекст, информации о других таких парах не может быть осуществлено более эффективно, чем нахождение ключа методом полного перебора.
  • ожидаемая сложность поиска ключа методом полного перебора зависит от битовой длины ключа и равна 2 127 {displaystyle 2^{127}} применительно к шифру KHAZAD.

Такой большой запас надежности закладывался в шифр с учётом всех известных атак.

Существуют атаки лишь на усеченный вариант шифра с 5 раундами (Frédéric Muller, 2003).

Как видно, никаких сколько-нибудь серьезных проблем с криптостойкостью алгоритма Khazad обнаружено не было, что отмечено и экспертами конкурса NESSIE. Кроме того, экспертами отмечена весьма высокая скорость шифрования данного алгоритма. Khazad был признан перспективным алгоритмом, весьма интересным для дальнейшего изучения, но не стал одним из победителей конкурса из-за подозрений экспертов, что структура алгоритма может содержать скрытые уязвимости, которые могут быть обнаружены в будущем.

— Панасенко С. П. "Алгоритмы шифрования. Специальный справочник"

Доступность

Шифр KHAZAD не был (и никогда не будет) запатентован. Он может использоваться бесплатно для любых целей.

Оригинальный текст (англ.)[показатьскрыть] KHAZAD is not (and will never be) patented. It may be used free of charge for any purpose.

Название

Шифр назван в честь Кхазад-дума (Khazad-dûm) или Мории — огромного подземного королевства гномов в Мглистых горах Средиземья из трилогии Дж. Р. Р. Толкиена «Властелин колец».


Имя:*
E-Mail:
Комментарий: