Wstęp:

     IDEA jest algorytmem szyfrowania konwencjonalnego. Został on stworzony przez Xuejia Lai i Jamesa Masseya za Szwajcarskiego Federalnego Instytutu Technologii. IDEA jest jednym z wielu zaproponowanych algorytmów szyfrowania konwencjonalnego, które mają zastąpic DES. IDEA to szyfr blokowy stosujący 128-bitowy klucz do szyfrowania danych w blokach po 64 bity.

 

     Na skuteczność kryptograficzną IDEA mają wpływ następujące czynniki:

  • Długość bloków: powinna być ona na tyle duża, aby uniemożliwić skorzystanie z faktu, że częstotliwość powtarzania niektórych bloków jest większa niż innych. Za wartość wystarczająco skuteczną uważa się bloki o długości 64 bitów.
  • Długość klucza: co oczywiste im dłuższy klucz, tym większe bezpieczeństwo. Dla IDEA przyjmuje się 128 bitów jako wartość dostatecznie dużą, wykluczającą poszukiwanie klucza.
  • Mieszanie: Zależność tekstu zaszyfrowanego od tekstu jawnego i klucza powinna mieć skomplikowany charakter po to, by utrudnić określenie zależności między cechami statystycznymi tekstu jawnego i tekstu zaszyfrowanego.
  • Rozpraszanie: Oznacza to, że jeden bit tekstu jawnego wpływa na wiele bitów tekstu zaszyfrowanego, pozwala to na ukrycie struktury statystycznej tekstu jawnego. IDEA jest pod tym względem bardzo skuteczna.

Opis algorytmu:

Ogólny schemat IDEA przedstawia rysunek (kliknij, aby zobaczyć)

 

     Funkcja szyfrowania korzysta oczywiście z dwóch danych wejściowych, tekstu jawnego i klucza. Algorytm IDEA składa się z ośmiu etapów, czyli iteracji, po których następuje końcowe przekształcenie. Algorytm dzieli dane wejściowe na cztery 16-bitowe podbloki. Każda iteracja korzysta z czterech 16-bitowych podbloków i w jej wyniku też powstają cztery 16-bitowe podbloki. W wyniku przekształcenia końcowego otrzymujemy też takie cztery podbloki, które w wyniku łączenia dają 64-bitowy tekst zaszyfrowany. W każdej iteracji korzysta się z czterech 16-bitowych podkluczy, co daje w sumie 52 podklucze, które są generowane na podstawie pierwotnego 128-bitowego klucza.

 

Opis pojedynczej iteracji:
     Rysunek pojedynczej iteracji (kliknij, aby zobaczyć)

     Rysunek ten przedstawia właściwie iteracje pierwszą, ale wszystkie następne mają taką samą strukturę, tylko korzystają z innych danych wejściowych. Iteracja zaczyna się od przekształcenia, które za pomocą dodawania i mnożenia tworzy kombinację czterech wyjściowych podbloków i czterech podkluczy.Cztery bloki wynikowe są łączone w dwa bloki 16-bitowe za pomocą operacji XOR, które stanowią dane wejściowe dla struktury MA. Struktura ta używa także dwóch podkluczy i tworzy dwa bloki 16-bitowe. Na koniec z czterech bloków powstałych w wyniku pierwszego przekształcenia i dwóch powstałych dzięki strukturze MA, przy użyciu XOR generuje się cztery bloki - wynik tej iteracji.

 

Generowanie podkluczy:
     Pięćdziesiąt dwa 56-bitowe podklucze są generowane na podstawie 128-bitowego klucza szyfrującego. Generowanie to odbywa się następująco. Pierwsze osiem podkluczy wywodzi się bezpośrednio z klucza szyfrującego. Pierwszy jest równy pierwszym 16 bitom, drugi następnym 16 bitom itd. Następnie klucz poddaje się cyklicznemu przesunięciu w lewo o 25 bitów i tworzy następne osiem podkluczy. Procedurę tę powtarza się do momentu wygenerowania wszystkich 52 podkluczy.

 

Deszyfrowanie:

     Proces deszyfrowania jest niemalże identyczny jak szyfrowania. Deszyfrowanie odbywa się przez zastosowanie tego samego algorytmu jak przy szyfrowaniu, ale przy użyciu innego zestawu kluczy. Podklucze deszyfrujące powstają na podstawie 52 kluczy szyfrujących.

Rysunek przedstawiający procesy szyfrowania i deszyfrowania. Po lewej stronie jest pokazany procesz szyfrowania, a po prawej deszyfrowania.

 

Tryby pracy:

Możliwe są cztery tryby pracy:

  • Tryb elektronicznej książki kodowej (electronic codebook - ECB): Każdy 64-bitowy blok tekstu jawnego jest kodowany niezależnie przy użyciu tego samego klucza. Technika ta jest przydatna do szyfrowania niewielkich bloków danych. Na przykład można go zastosować do szyfrowania 128-bitowych kluczy IDEA.
  • Tryb wiązania bloków zaszyfrowanych (cipher błock chaining - CBC): Dane wejściowe algorytmu szyfrującego stanowią XOR następnych 64 bitów tekstu jawnego i poprzednich 64 bitów tekstu zaszyfrowanego. W rezultacie, jeżeli taki sam 64-bitowy blok tekstu jawnego pojawi się w strumieniu danych wejściowych więcej niż raz. Za każdym razem otrzymamy inny 64-bitowy blok tekstu zaszyfrowanego.
  • Tryb szyfrowania ze sprzężeniem zwrotnym (cipher feedback - CFB): Dane wejściowe przetwarza się w porcjach po J bitów. Poprzedni fragment tekstu zaszyfrowanego używa się jako danych wejściowych algorytmu szyfrującego, który na jego podstawie generuje pseudolosowy wynik. Wynik ten jest odejmowany symetrycznie od tekstu jawnego w celu otrzymania następnej jednostki tekstu zaszyfrowanego. Tryb ten jest przydatny do kodowania długich bloków.
  • Tryb sprzężenia zwrotnego wyjściowego (output feedback - OFB): Podobny do CFB z tą różnicą, że jako danych wejściowych dla algorytmu szyfrującego używa się poprzedniego wyniku pracy IDEA. Tryb ten przydaje się do przesyłania strumieniowego przez kanał o dużym poziomie zakłóceń.
 
 

home | back | top