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

Метод встречи посередине — Википедия

Метод встречи посередине

В криптоанализе методом встречи посередине или атакой «встречи посередине» (англ. meet-in-the-middle attack) называется класс атак на криптографические алгоритмы, асимптотически уменьшающих время полного перебора за счет принципа «разделяй и властвуй», а также увеличения объема требуемой памяти. Впервые данный метод был предложен Уитфилдом Диффи и Мартином Хеллманом в 1977 году[1].

Начальные условияПравить

Даны открытый (незашифрованный) и шифрованный тексты. Криптосистема состоит из h   циклов шифрования. Цикловые ключи независимы и не имеют общих битов. Ключ K   системы представляет собой сочетание из h  -цикловых ключей k 1 , k 2 . . . k h  . Задача состоит в нахождении ключа K  .

Решение простого случаяПравить

Простым примером является двойное последовательное шифрование блочным алгоритмом двумя различными ключами K 1   и K 2  . Процесс шифрования выглядит так:

s = E N C K 2 ( E N C K 1 ( p ) )  ,

где p   — это открытый текст, s   — шифротекст, а E N C K i ( )   — операция однократного шифрования ключом K i  . Соответственно, обратная операция — расшифрование — выглядит так:

p = E N C K 1 1 ( E N C K 2 1 ( s ) )  

На первый взгляд кажется, что применение двойного шифрования многократно увеличивает стойкость всей схемы, поскольку перебирать теперь нужно два ключа, а не один. В случае алгорима DES стойкость увеличивается с 2 56   до 2 112  . Однако это не так. Атакующий может составить две таблицы:

  1. Все значения m 1 = E N C K 1 ( p )   для всех возможных значений K 1  ,
  2. Все значения m 2 = E N C K 2 1 ( s )   для всех возможных значений K 2  .

Затем ему достаточно лишь найти совпадения в этих таблицах, то есть такие значения m 1   и m 2  , что E N C K 1 ( p ) = E N C K 2 1 ( s )  . Каждое совпадение соответствует набору ключей ( K 1 , K 2 )  , который удовлетворяет условию.

Для данной атаки потребовалось 2 57   операций шифрования-расшифрования (лишь в два раза больше, чем для перебора одного ключа) и 2 57   памяти. Дополнительные оптимизации — использование хеш-таблиц, вычисления только для половины ключей (для DES полный перебор, на самом деле, требует лишь 2 55   операций) — могут снизить эти требования. Главный результат атаки состоит в том, что последовательное шифрование двумя ключами увеличивает время перебора лишь в два раза.

Решение в общем видеПравить

Обозначим преобразование алгоритма как E k ( a ) = b  , где a   -открытый текст, а b   -шифротекст. Его можно представить как композицию E k 1 E k 2 . . . E k h ( a ) = b  , где E k i   — цикловое преобразование на ключе k i  . Каждый ключ k i   представляет собой двоичный вектор длины n  , а общий ключ системы — вектор длины n × h  .

Заполнение памятиПравить

Перебираются все значения k = ( k 1 , k 2 . . . k r )  , т.е первые r   цикловых ключей. На каждом таком ключе k   зашифровываем открытый текст a   — E k ( a ) = E k 1 E k 2 . . . E k r ( a ) = S   (то есть проходим r   циклов шифрования вместо h  ). Будем считать S   неким адресом памяти и по этому адресу запишем значение k  . Необходимо перебрать все значения k  .

Определение ключаПравить

Перебираются все возможные k = ( k r + 1 , k r + 2 . . . k h )  . На получаемых ключах расшифровывается шифротекст b   — E k 1 ( b ) = E k h 1 . . . E k r + 1 1 ( b ) = S   . Если по адресу S   не пусто, то достаем оттуда ключ k   и получаем кандидат в ключи ( k , k ) = k  .

Однако нужно заметить, что первый же полученный кандидат k   не обязательно является истинным ключом. Да, для данных a   и b   выполняется E k ( a ) = b  , но на других значениях открытого текста a   шифротекста b  , полученного из a   на истинном ключе, равенство может нарушаться. Все зависит от конкретных характеристик криптосистемы. Но иногда бывает достаточно получить такой «псевдоэквивалентный» ключ. В противном же случае после завершения процедур будет получено некое множество ключей k , k . . .  , среди которых находится истинный ключ.

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

Атака с разбиением ключевой последовательности на 3 частиПравить

В некоторых случаях бывает сложно разделить биты последовательности ключей на части, относящиеся к разным ключам. В таком случае применяют алгоритм 3-subset MITM attack[en], предложенный Богдановым и Ричбергером в 2011 году на основе обычного метода встречи посередине. Данный алгоритм применим, когда нет возможности разделить последовательности ключевых битов на две независимые части. Состоит из двух фаз: выделения и проверки ключей[2].

Фаза выделения ключейПравить

Вначале данной фазы шифр делится на 2 подшифра f   и g  , как и в общем случае атаки, однако допуская возможное использование некоторых битов одного подшифра в другом. Так, если b = E k ( a )  , то E k ( ) = f ( g ( ) )  ; при этом биты ключа k  , использующиеся в f   обозначим k f  , а в g   — k g  . Тогда ключевую последовательность можно разделить на 3 части:

  1. A 0   — пересечение множеств k f   и k g  ,
  2. A 1   — ключевые биты, которые есть только в k f  ,
  3. A 2   — ключевые биты, которые есть только в k g  .

Далее проводится атака методом встречи посередине по следующему алгоритму:

  • Для каждого элемента из A 0  
  1. Вычислить промежуточное значение i = f ( k f , a )  , где a   — открытый текст, а k f   — некоторые ключевые биты из A 0   и A 1  , то есть i   — результат промежуточного шифрования открытого текста на ключе k f  .
  2. Вычислить промежуточное значение j = g 1 ( k g , b )  , где b   — закрытый текст, а k g   — некоторые ключевые биты из A 0   и A 2  , то есть j   — результат промежуточного расшифровывания закрытого текста на ключе k g  .
  3. Сравнить i   и j  . В случае совпадения получаем кандидата в ключи.

Фаза проверки ключейПравить

Для проверки ключей полученные кандидаты проверяют на нескольких парах известных открытых-закрытых текстов. Обычно для проверки требуется не очень большое количество таких пар текстов[2].

ПримерПравить

В качестве примера приведем атаку на семейство шифров KTANTAN[3], которая позволила сократить вычислительную сложность получения ключа с 2 80   (атака полным перебором) до 2 75 , 170  [1].

Подготовка атакиПравить

Каждый из 254 раундов шифрования с использованием KTANTAN использует 2 случайных бита ключа из 80-битного набора. Это делает сложность алгоритма зависимой только от количества раундов. Приступая к атаке, авторы заметили следующие особенности:

  • В раундах с 1 по 111 не были использованы следующие биты ключа: k 32 , k 39 , k 44 , k 61 , k 66 , k 75  .
  • В раундах со 131 по 254 не были использованы следующие биты ключа: k 3 , k 20 , k 41 , k 47 , k 63 , k 74  .

Это позволило разделить биты ключа на следующие группы:

  1. A 0   — общие биты ключа: те 68 бит, не упомянутые выше.
  2. A 1   — биты, используемые только в первом блоке раундов (с 1 по 111),
  3. A 2   — биты, используемые только во втором блоке раундов (со 131 по 254).

Первая фаза: выделение ключейПравить

Возникала проблема вычисления описанных выше значений i   и j  , так как в рассмотрении отсутствуют раунды со 112 по 130, однако тогда было проведено частичное сравнение[en]: авторы атаки заметили совпадение 8 бит в i   и j  , проверив их обычной атакой методом встречи посередине на 127 раунде. В связи с этим в данной фазе сравнивались значения именно этих 8 бит в подшифрах i   и j  . Это увеличило количество кандидатов в ключи, но не сложность вычислений.

Вторая фаза: проверка ключейПравить

Для проверки кандидатов в ключи алгоритма KTANTAN32 потребовалось в среднем еще две пары открытого-закрытого текстов для выделения ключа.

РезультатыПравить

  • KTANTAN32: вычислительная сложность подбора ключа сократилась до 2 75 , 170   с использованием трех пар открытого-закрытого текста.
  • KTANTAN48: вычислительная сложность подбора ключа сократилась до 2 75 , 044   с использованием двух пар открытого-закрытого текста.
  • KTANTAN64: вычислительная сложность подбора ключа сократилась до 2 75 , 584   с использованием двух пар открытого-закрытого текста.

Тем не менее, это не лучшая атака на семейство шифров KTANTAN. В 2011 году была совершена атака[4], сокращающая вычислительную сложность алгоритма до 2 72 , 9   с использованием четырех пар открытого-закрытого текста.

Атака по полному двудольному графуПравить

Атака по полному двудольному графу применяется для увеличения количества попыток атаки посредника с помощью построения полного двудольного графа. Предложена Диффи и Хеллманом в 1977 году.

Многомерный алгоритмПравить

Многомерный алгоритм метода встречи посередине применяется при использовании большого количества циклов шифрования разными ключами на блочных шифрах. Вместо обычной «встречи посередине» в данном алгоритме используется разделение криптотекста несколькими промежуточными точками[5].

Предполагается, что атакуемый текст зашифрован некоторое количество раз блочным шифром:

C = E N C k n ( E N C k n 1 ( . . . ( E N C k 1 ( P ) ) . . . ) )   P = D E C k 1 ( D E C k 2 ( . . . ( D E C k n ( C ) ) . . . ) )  

АлгоритмПравить

  • Вычисляется:
s C 1 = E N C f 1 ( k f 1 , P )    k f 1 K  
s C 1   сохраняется вместе с k 1   d H 1  .
s C n + 1 = D E C b n + 1 ( k b n + 1 , C )    k b n + 1 K  
s C n + 1   сохраняется вместе с k b n + 1   d H b n + 1  .
  • Для каждого возможного промежуточного состояния s 1   вычисляется:
s C 1 = D E C b 1 ( k b 1 , s 1 )    k b 1 K  
при каждом совпадении s C 1   с элементом из H 1   в T 1   сохраняются k b 1   и k f 1  .
s C 2 = E N C f 2 ( k f 2 , s 1 )    k f 2 K  
s C 2   сохраняется вместе с k f 2   в H 2  .
  • Для каждого возможного промежуточного состояния s 2   вычисляется:
s C 2 = D E C b 2 ( k b 2 , s 2 )    k b 2 K  
при каждом совпадении s C 2   с элементом из H 2   проверяется совпадение с T 1  , после чего в T 2   сохраняются k b 2   и k f 2  .
s C 3 = E N C f 3 ( k f 3 , s 2 )    k f 3 K  
s C 3   сохраняется вместе с k f 3   в H 3  .
  • Для каждого возможного промежуточного состояния s n   вычисляется:
s C n = D E C b n ( k b n , s n )    k b n K   и при каждом совпадении s C n   с элементом из H n   проверяется совпадение с T n 1  , после чего в T n   сохраняются k b n   и k f n  .
s C n + 1 = E N C f n + 1 ( k f n + 1 , s n )    k f n + 1 K   и при каждом совпадении s C n + 1   с H n + 1  , проверяется совпадение с T n  

Далее найденная последовательность кандидатов тестируется на иной паре открытого-закрытого текста для подтверждения истинности ключей. Следует заметить рекурсивность в алгоритме: подбор ключей для состояния s j   происходит на основе результатов для состояния s j 1  . Это вносит элемент экспоненциальной сложности в данный алгоритм[5].

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

Временная сложность данной атаки составляет 2 | k f 1 | + 2 | k b n + 1 | + 2 | s 1 | ( 2 | k b 1 | + 2 | k f 2 | + 2 | s 2 | ( 2 | k b 2 | + 2 | k f 3 | + . . . ) )  

Говоря об использовании памяти, легко заметить что с увеличением i   на каждый T i   накладывается все больше ограничений, что уменьшает количество записываемых в него кандидатов. Это означает, что T 2 , T 3 , . . . , T n   значительно меньше T 1  .

Верхняя граница объема используемой памяти:

2 | k f 1 | + 2 | k b n + 1 | + 2 | k | | s + n | + . . .  
где k   — общая длина ключа.

Сложность использования данных зависит от вероятности «прохождения» ложного ключа. Эта вероятность равна 1 / 2 l  , где l   — длина первого промежуточного состояния, которая чаще всего равна размеру блока. Учитывая количество кандидатов в ключи после первой фазы, сложность равна 2 | k | | l |  .

В итоге получаем 2 | k | 2 b  , где | b |   — размер блока.

Каждый раз, когда последовательность кандидатов в ключи тестируется на новой паре открытого-закрытого текста, количество успешно проходящих проверку ключей умножается на вероятность прохождения ключа, которая равна 1 / 2 | b |  .

Часть атаки полным перебором (проверка ключей но новых парах открытого-закрытого текстов) имеет временную сложность 2 | k | b + 2 | k | 2 b + 2 | k | 3 b + . . .  , в которой, очевидно, последующие слагаемые все быстрее стремятся к нулю.

В итоге, сложность данных по аналогичным суждениям ограничена приблизительно | k | / n   парами открытого-закрытого ключа.

ПримечанияПравить

  1. 1 2 Diffie, Whitfield; Hellman, Martin E. Exhaustive Cryptanalysis of the NBS Data Encryption Standard (англ.) // Computer : journal. — 1977. — June (vol. 10, no. 6). — P. 74—84. — doi:10.1109/C-M.1977.217750. Архивировано 14 мая 2009 года.
  2. 1 2 Andrey Bogdanov and Christian Rechberger. «A 3-Subset Meet-in-the-Middle Attack: Cryptanalysis of the Lightweight Block Cipher KTANTAN» Архивная копия от 7 ноября 2018 на Wayback Machine
  3. Christophe De Cannière, Orr Dunkelman, Miroslav Knežević. «KATAN & KTANTAN — A Family of Small and Efficient Hardware-Oriented Block Ciphers» Архивная копия от 20 апреля 2018 на Wayback Machine
  4. Lei Wei, Christian Rechberger, Jian Guo, Hongjun Wu, Huaxiong Wang, and San Ling. «Improved Meet-in-the-Middle Cryptanalysis of KTANTAN» Архивная копия от 7 ноября 2018 на Wayback Machine
  5. 1 2 3 Zhu, Bo; Guang Gong. MD-MITM Attack and Its Applications to GOST, KTANTAN and Hummingbird-2 (англ.) // eCrypt : journal. — 2011.

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