Atak meet-in-the-middle

Atak meet-in-the-middle to jeden z rodzajów ataków ze znanym tekstem jawnym. Napastnik musi znać fragmenty tekstu jawnego i odpowiadające im szyfrogramy. Za pomocą ataków tego typu można łamać szyfry, które używają dwóch lub więcej różnych kluczy do wielokrotnego szyfrowania za pomocą tego samego algorytmu. Przykładem takiego szyfrowania jest szyfr 3DES. Atak meet-in-the-middle został po raz pierwszy zademonstrowany przez kryptologów Diffie'go i Hellman'a przy okazji analizy algorytmu DES.

Szyfr, który może być celem ataku meet-in-the-middle, można zdefiniować jako parę dwóch algorytmów, szyfrującego i deszyfrującego. Każdy z nich składa się z dwóch prostych algorytmów:
    C = Eb(kb, Ea(ka, P))
    P = Da(ka, Db(kb, C))
gdzie:
  • C to szyfrogram (od ang. ciphertext),
  • P to tekst jawny (od ang. plaintext),
  • E to algorytm szyfrujący (od ang. encryption),
  • D to algorytm deszyfrujący (od ang. decryption),
  • ka i kb to dwa sekretne klucze.

Dla tak zdefiniowanego szyfru, można zapisać następujące równanie:
    Db(kb, C) = Ea(ka, P)
Gdzie C to znany napastnikowi szyfrogram odpowiadający znanej napastnikowi wiadomości P.

Pierwszy krok ataku polega na utworzeniu tabeli wszystkich możliwych wartości dla jednej ze stron równania. Można wyliczyć więc wszystkie możliwe szyfrogramy znanego tektu jawnego P, powstałe po zakodowaniu go przy użyciu pierwszego z sekretnych kluczy, czyli Ea(ka,P). Tablica będzie miała długość równą liczbie możliwych sekretnych kluczy. Dobrze jest potem posortować otrzymaną tablicę względem otrzymanych wartości szyfrogramów Ea(ka,P), w celu ułatwienia jej późniejszego przeszukiwania.

Drugim krokiem ataku jest wyliczanie wartości Db(kb,C) dla drugiej strony równania. Należy porównywać je z otrzymanymi wsześniej i przechowywanymi w tabeli wartościami wyliczonymi dla pierwszej strony równania. Atakujący szuka takiej pary sekretnych kluczy ka i kb, dla których znaleziona w tabeli wartość Ea(ka,P) i aktualnie wyliczona wartość Db(kb,C) są równe.

Schemat ataku meet-in-the-middle
Schemat ataku meet-in-the-middle

Atakowane mogą być również szyfry, dla których oba algorytmy szyfrujące E są różne (i używają kluczy o niekoniecznie takiej samej wartości). W takim wypadku, tablicę w pierwszym kroku tworzy się dla słabszego z dwóch algorytmów szyfrujących.

Złożoność obliczeniowa meet-in-the-middle

Atak meet-in-the-middle umożliwia dużo szybsze złamanie zabezpieczeń niż przy użyciu zwykłego ataku siłowego. Złożoności czasowa i obliczeniowa zależą od wielkości dwóch kluczy szyfrujących kakb. Można je przedstawić jako sumę dwóch iloczynów:

    2dł(ka) log(2dł(ka)) + 2dł(kb) log(2dł(ka))

Gdzie:
  • 2dł(ka) - tworzenie tabeli zawierającej wszystkie możliwe wartości Ea(ka,P),
  • log(2dł(ka)) - sortowanie tabeli zawierającej wszystkie wartości Ea(ka,P),
  • 2dł(kb) - obliczanie wszystich możliwych wartości Db(kb,C),
  • log(2dł(ka)) - przeszukiwanie posortowanej tabeli zawierającej wartości Ea(ka,P).

Jeśli długości kluczy kakb są równe i wynoszą dk, to złożoność obliczeniową ataku meet-in-the-middle można przedstawić jako O(2dk+1). Wykorzystanie pamięci wynosi natomiast O(2dk). Złożoność obliczeniowa zwykłego ataku siłowego jest dużo większa, wynosi bowiem O(2dk+dk). Z drugiej strony atak siłowy wykorzystuje jedynie O(1) pamięci.

Atak meet-in-the-middle 2D

Można rozważać sytuację, w której w procesie działania algorytmu szyfrującego da się wyodrębnić pewien stan przejściowy. Jeżeli wielkość tego stanu przejściowego jest mniejsza niż długość klucza, atakując go można zastosować tak zwany dwuwymiarowy atak meet-in-the-middle. We współczesnych szyfrach blokowych przypadek operowania na niewielkich blokach danych przy użyciu długiego klucza jest bardzo częsty.

Oznaczając stan przejściowy jako S można przedstawić złożony szyfr jako:
    C = E1(k1, E2(k2, P))
    P = D2(k2, D1(k1, C))
Gdzie wartości E2(k2,P) należą do zbioru zawierającego wszystkie możliwe wartości stanu przejściowego S.

Oba algorytmy szyfrujące E1E2 można łamać za pomocą dwuwymiarowego ataku meet-in-the-middle. Schemat ataku przedstawiony jest na poniższym rysunku:

Schemat dwuwymiarowego ataku meet-in-the-middle

W calu złamania szyfru za pomocą dwuwymiarowego ataku meet-in-the-middle należy wykonać następujące kroki:

  1. Obliczyć wszystkie możliwe wartości Ea1(ka1,P) (dla znanego P i wszystkich możliwych wartości klucza ka1), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy ka1. Tabela powinna być posortowana względem wyliczonych wartości Ea1(ka1,P).
  2. Obliczyć wszystkie możliwe wartości Db2(kb2,C) (dla znanego C opowiadającego P i wszystkich możliwych wartości klucza kb2), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kb2. Tabela powinna być posortowana względem wyliczonych wartości Db2(kb2,C).
  3. Dla każdej możliwej wartości stanu pośredniego S:
    1. Obliczyć wszystkie możliwe wartości Db1(kb1,S) (dla wszystkich możliwych wartości klucza kb1), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kb1. Tabela powinna być posortowana względem wyliczonych wartości Db1(kb1,S).
    2. Obliczyć wszystkie możliwe wartości Ea2(ka2,S) (dla wszystkich możliwych wartości klucza ka2), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy ka2. Tabela powinna być posortowana względem wyliczonych wartości Ea2(ka2,S).
    3. Porównać wartości w czterech utworzonych tabelach, poszukując równości Ea1(ka1,P) = Db1(kb1,S) (uzyska się w ten sposób parę kluczy (ka1,kb1)) oraz Ea2(ka2,S) = Db2(kb2,C) (para kluczy (ka2,kb2)). Wszystkie kombinacje tych dwóch par kluczy stanowią kandydatów na poszukiwany sekretny klucz całego szyfru. Należy wybrać właściwą kombinację par poprzez sprawdzenie uzyskanego klucza na innych znanych fragmentach tekstu jawnego i szyfrogramu.

Zwykle cztery wyodrębnione klucze ka1, kb1, ka2kb2 mają niektóre bity wspólne. Sposobem, który umożliwia kryptoanalizę w takim przypadku jest traktowanie każdego bitu oddzielnie i przyporządkowanie mu niezależnej zmiennej.

Atak meet-in-the-middle nD

Opisane postępowanie można uogólnić do przypadku, kiedy szyfr złożony jest dzielony na większą ilość prostszych szyfrów. W ogólnym przypadku należy założyć, że da się wyodrębnić n stanów przejściowych oraz n+1 algorytmów szyfrujących możliwych do złamania za pomocą metody meet-in-the-middle. Taka sytuacja jest przedstawiona na schemacie poniżej:

Schemat wielowymiarowego ataku meet-in-the-middle

W calu złamania szyfru za pomocą wielowymiarowego ataku meet-in-the-middle należy wykonać następujące kroki:

  1. Obliczyć wszystkie możliwe wartości Ea1(ka1,P) (dla znanego P i wszystkich możliwych wartości klucza ka1), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy ka1. Tabela powinna być posortowana względem wyliczonych wartości Ea1(ka1,P).
  2. Obliczyć wszystkie możliwe wartości Dbn+1(kbn+1,C) (dla znanego C opowiadającego P i wszystkich możliwych wartości klucza kbn+1), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kbn+1. Tabela powinna być posortowana względem wyliczonych wartości Dbn+1(kbn+1,C).
  3. Dla każdej możliwej wartości stanu pośredniego S1:
    1. Obliczyć wszystkie możliwe wartości Db1(kb1,S1) (dla wszystkich możliwych wartości klucza kb1), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kb1. Tabela powinna być posortowana względem wyliczonych wartości Db1(kb1,S1).
    2. Obliczyć wszystkie możliwe wartości Ea2(ka2,S1) (dla wszystkich możliwych wartości klucza ka2), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy ka2. Tabela powinna być posortowana względem wyliczonych wartości Ea2(ka2,S1).
    3. Dla każdej możliwej wartości stanu pośredniego S2:
      1. Obliczyć wszystkie możliwe wartości Db2(kb2,S2) (dla wszystkich możliwych wartości klucza kb2), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kb2. Tabela powinna być posortowana względem wyliczonych wartości Db2(kb2,S2).
      2. ...powtarzać analogiczne operacje aż do przejściowego stanu Sn...
      3. Dla każdej możliwej wartości stanu pośredniego Sn:
        1. Obliczyć wszystkie możliwe wartości Dbn(kbn,Sn) (dla wszystkich możliwych wartości klucza kbn), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kbn. Tabela powinna być posortowana względem wyliczonych wartości Dbn(kbn,Sn).
        2. Obliczyć wszystkie możliwe wartości Ean+1(kan+1,Sn) (dla wszystkich możliwych wartości klucza kan+1), a następnie umieścić je w tabeli razem z wartościami odpowiadających im kluczy kan+1. Tabela powinna być posortowana względem wyliczonych wartości Ean+1(kan+1,Sn).
        3. Przeanalizować wartości we wszystkich utworzonych tabelach, porównując odpowiednie wielkości EaiDbi. Wynikiem będzie pewna ilość kombinacji par odpowiadających sobie kluczy (kai,kbi). Należy wybrać właściwą kombinację par poprzez sprawdzenie uzyskanego klucza na innych znanych fragmentach tekstu jawnego i szyfrogramu.

Kolejność analizowania poszczególnych stanów przejściowych może być dowolnie wybrana. Z racji tego, że stany przejściowe mają mniejszą wielkość niż klucze szyfrujące, tworzone tabele zajmują mniej więcej tyle samo miejsca co tabele tworzone podczas zwykłego jednowymiarowego ataku meet-in-the-middle.