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ń.
|