Wstęp:
Standard DES został stworzony przez
inżynierów IBM, jako udoskonalona wersja projektu LUCIFER powstałego
w późnych latach 60. LUCIFER, był szyfrem blokowy, który pracował
na blokach 64-bitowych z kluczem 128-bitowym.W wyniku przeprowadzonych
prac powstała udoskonalona wersja LUCIFERA, bardziej odporna na
kryptoanalizę, za to z kluczem zmniejszonym do 56 bitów. W roku
1977 został on zaakceptowany przez Narodowy Instytut Standardów
i Technologii jako Data Encryption Standard. DES od samego początku
był mocno krytykowany, głównie z powodu 56-bitowego klucza, ale
także z powodu tzw. S-bloków, czyli elementów struktury wewnętrznej,
który były tajne.
Opis algorytmu:
Ogólny schemat szyfrowania za pomocą
DES jest przedstawiony na rysunku
(kliknij, aby zobaczyć).
Funkcja szyfrowania przyjmuje dwa
rodzaje danych wejściowych: tekst jawny oraz klucz. Tekst jawny
w przypadku DES musi być 64-bitowy, a klucz jest 56-bitowy.
Przetwarzanie tekstu jawnego na postać zaszyfrowaną obejmuje 3
fazy. Najpierw następuje permutacja wstępna IP, która przestawia
bity, tworząc permutowane dane wejściowe. Następnie jest faza
16 iteracji tej samej funkcji, w której skład wchodzą funkcje
permutacyjne i podstawiające. Wynik ostatniej iteracji składa
się z 64 bitów, stanowiących funkcję wejściowego tekstu jawnego.
Oraz klucza. Lewa i prawa strona zostają zamienione, tworząc wynik
wstępny. Zostaje on poddany permutacji IP-1, która
jest odwrotnością permutacji wstępnej. Wynikiem tych wszystkich
działań jest 64-bitowy tekst zaszyfrowany.
Na prawej połowie schematu pokazany
jest sposób wykorzystania 56-bitowego klucza. Podlega on wstępnie
permutacji. A na każdą z 16 iteracji tworzy się podklucz (Ki)
na drodze kombinacji cyklicznego przesunięcia w lewo i permutacji.
Funkcja permutacji jest identyczna dla każdej iteracji, jednak
dzięki przesunięciu bitów klucza za każdym razem powstaje inny
podklucz.
Opis permutacji wstępnej:
Permutację wstępną i jej odwrotność
definiuje się przez tabele przedstawione tutaj
(kliknij, aby zobaczyć).
Funkcje te są odwrotne względem siebie
Pojedyncza iteracja:
Istota algorytmu polega na tym,
że 64-bitowe dane wejściowe po permutacji przechodzą 16 iteracji,
dając po każdej iteracji 64-bitową wartość pośrednią. Każdą 64-bitową
wartość pośrednią traktujemy jako oddzielne 32-bitowe części (lewa
i prawa). Proces przetwarzania podczas każdej iteracji możemy
w skrócie przedstawić w następującej postaci:
Li=Ri-1
Ri=Li-1
f(Ri-1, Ki),
gdzie oznacza
funkcję XOR.
Wynik iteracji Li jest równy danym wejściowym tej iteracji
Ri-1. A wynik Ri jest różnicą symetryczną
XOR Li-1 i funkcji f od Ri-1 i Ki.
Funkcję f pokazano na rysunku.
Rysunek obrazujący pojedynczą iterację
algorytmu DES.
Na stronie tej zostanie pominięty opis S-bloków, ze względu
na charakter tej witryny, która ma na celu pokazać ogólną zasadę
działania algorytmów kryptograficznych.
Tworzenie klucza:
Klucz 56-bitowy podlega permutacji
(permutowany wybór 1) - zobacz
tabelę, zanim zostanie użyty jako dane wejściowe algorytmu.
Następnie tak powstały 56-bitowy klucz jest traktowany jako dwa
28-bitowe bloki. Bloki te podczas każdej iteracji zostają poddane
oddzielnie cyklicznemu przesunięciu w lewo i jeden lub dwa bity
- zobacz tabelę. Te
przesunięte wartości służą jako dane wejściowe dla tabeli permutowany
wybór 2, w wyniku którego powstaje 48-bitów danych, które
służą jako wejściowe dla funkcji f(Ri-1,Ki).
Odszyfrowywanie przy użyciu DES:
Proces odszyfrowywania jest identyczny
jak szyfrowanie, a różni się tylko kolejnością kluczy użytych
w tym procesie. Mianowicie podczas odszyfrowywania używamy jako
danych wejściowych tekstu zaszyfrowanego i tych samych kluczy
co przy szyfrowaniu lecz w odwrotnej kolejności, czyli K16
podczas pierwszej iteracji K15 podczas drugiej i tak
dalej.
Porównanie procesu szyfrowania i deszyfrowania przedstawia rysunek.
Tryby pracy DES:
- Tryb elektronicznej książki kodowej (ECB) - każdy 64-bitowy
blok tekstu jawnego jest kodowany niezależnie z zastosowaniem
tego samego klucza. Stosuje się do transmisji pojedynczych wartości.
- Tryb wiązania bloków zaszyfrowanych (CBC) - Dane wejściowe
algorytmu szyfrującego stanowią XOR następnych 64-bitów tekstu
jawnego i poprzednich 64-bitów tekstu zaszyfrowanego. Stosuje
się do transmisji blokowej i uwierzytelniania.
- Tryb szyfrowania ze sprzężeniem zwrotnym (CFB) - Dane wejściowe
są przetwarzane po J bitów za jednym razem. Poprzedzający tekst
zaszyfrowany jest używany jako dane wejściowe dla algorytmu
szyfrującego, który produkuje pseudolosowe dane wyjściowe, które
odejmuje się symetrycznie od tekstu jawnego dla stworzenia następnej
jednostki tekstu zaszyfrowanego. Stosuje się do transmisji strumieniowej
i uwierzytelniania.
- Tryb sprzężenia zwrotnego wyjściowego (OFB) - Podobny do CFB,
z wyjątkiem faktu, że danymi wejściowymi algorytmu szyfrującego
jest poprzedni wynik działania DES. Zastosowanie, to transmisja
strumieniowa przez kanał narażony na zakłócenia (na przykład
drogą satelitarną).
Potrójny DES
Algorytm DES od samego początku
był krytykowany ze względu na wielkość klucza jak i użycie S-bloków.
Właśnie z tego pierwszego powodu, ze względu na możliwość ataków
metoda brutalną, była potrzeba wynalezienia alternatywnego sposobu
szyfrowania. Jednym z rozwiązań jest IDEA omówiona na odrębne
stronie jak również wielokrotne zastosowanie tego samego algorytmu
i użycie wielu kluczy. Najprostszą formą szyfrowania wielokrotnego
jest szyfrowanie w dwóch etapach. Jednak przedstawiony tutaj zostanie
potrójny DES (3DES), ze względu na jego powszechne zastosowanie.
Oczywiste byłoby zastosowanie trzech
etapów szyfrowania z trzema różnymi kluczami. Takie rozwiązanie
mimo swoich zalet (niemożność złamania) posiada również wady.
Wymaga bowiem klucza 168-bitowego, co jest rozmiarem nieporęcznym.
Dlatego alternatywą jest zastosowanie trzech etapów szyfrowania
z dwoma kluczami. Funkcja taka przebiega według sekwencji szyfrowanie-deszyfrowanie-szyfrowanie.
Przykład można zobaczyć na rysunku.
Deszyfrowanie w drugim etapie nie
ma znaczenia kryptograficznego. Jedyną korzyścią z niego jest
to, że pozwala użytkownikom potrójnego DES deszyfrować dane zaszyfrowane
przez pojedynczego DES-a. Potrójny DES jest dobrą alternatywą
dla DES.
|