Zaawansowany standard szyfrowania
Popularniejszym i szeroko przyjętym symetrycznym algorytmem szyfrowania, z którym można się spotkać w dzisiejszych czasach, jest Advanced Encryption Standard (AES). Jest on co najmniej sześć razy szybszy niż potrójny DES.
Zastąpienie DES było potrzebne, ponieważ rozmiar klucza był zbyt mały. Wraz z rosnącą mocą obliczeniową uznano, że jest on podatny na atak wyczerpującego wyszukiwania kluczy. Potrójny DES został zaprojektowany, aby przezwyciężyć tę wadę, ale okazał się powolny.
Właściwości AES są następujące –
- Symetryczny szyfr blokowy z kluczem symetrycznym
- 128-bitowe dane, 128/192/256-bitowe klucze
- Solidniejszy i szybszy niż Triple-DES
- Podajemy pełną specyfikację i szczegóły projektu
- Program możliwy do zaimplementowania w C i Javie
Operacja AES
AES jest szyfrem iteracyjnym, a nie Feistela. Jest on oparty na „sieci substytucji-permutacji”. Składa się on z serii powiązanych ze sobą operacji, z których niektóre polegają na zastępowaniu danych wejściowych określonymi danymi wyjściowymi (substytucje), a inne na tasowaniu bitów (permutacje).
Co ciekawe, AES wykonuje wszystkie swoje obliczenia na bajtach, a nie na bitach. Stąd, AES traktuje 128 bitów bloku tekstu jawnego jako 16 bajtów. Te 16 bajtów jest ułożone w czterech kolumnach i czterech wierszach do przetworzenia jako macierz –
W przeciwieństwie do DES, liczba rund w AES jest zmienna i zależy od długości klucza. AES używa 10 rund dla kluczy 128-bitowych, 12 rund dla kluczy 192-bitowych i 14 rund dla kluczy 256-bitowych. Każda z tych rund używa innego 128-bitowego klucza, który jest obliczany na podstawie oryginalnego klucza AES.
Schemat struktury AES jest przedstawiony na poniższym rysunku –
Proces szyfrowania
Tutaj ograniczamy się do opisu typowej rundy szyfrowania AES. Każda runda składa się z czterech podprocesów. Proces pierwszej rundy jest przedstawiony poniżej –
Zastępowanie bajtów (SubBytes)
16 bajtów wejściowych jest zastępowanych przez sprawdzenie stałej tablicy (S-box) podanej w projekcie. Rezultatem jest macierz składająca się z czterech wierszy i czterech kolumn.
Przesunięcia
Każdy z czterech wierszy macierzy jest przesuwany w lewo. Wszystkie wpisy, które „odpadną” są ponownie wstawiane po prawej stronie wiersza. Przesunięcie odbywa się w następujący sposób –
-
Pierwszy rząd nie jest przesuwany.
-
Drugi rząd jest przesuwany o jedną (bajtową) pozycję w lewo.
-
Trzeci rząd jest przesuwany o dwie pozycje w lewo.
-
Czwarty rząd jest przesuwany o trzy pozycje w lewo.
-
Wynikiem jest nowa macierz składająca się z tych samych 16 bajtów, ale przesuniętych względem siebie.
MixColumns
Każda kolumna składająca się z czterech bajtów jest teraz przekształcana przy użyciu specjalnej funkcji matematycznej. Funkcja ta przyjmuje jako dane wejściowe cztery bajty z jednej kolumny i wyprowadza cztery zupełnie nowe bajty, które zastępują oryginalną kolumnę. Wynikiem jest kolejna nowa macierz składająca się z 16 nowych bajtów. Należy zauważyć, że ten krok nie jest wykonywany w ostatniej rundzie.
Addroundkey
16 bajtów macierzy jest teraz traktowanych jako 128 bitów i jest XORowane ze 128 bitami okrągłego klucza. Jeśli jest to ostatnia runda, to wyjściem jest szyfrogram. W przeciwnym razie, wynikowe 128 bitów jest interpretowane jako 16 bajtów i rozpoczynamy kolejną podobną rundę.
Proces deszyfrowania
Proces deszyfrowania szyfrogramu AES jest podobny do procesu szyfrowania w odwrotnej kolejności. Każda runda składa się z czterech procesów wykonywanych w odwrotnej kolejności –
- Dodaj klucz rundy
- Mieszaj kolumny
- Przesuń wiersze
- Zastępowanie bajtów
Ponieważ podprocesy w każdej rundzie przebiegają w odwrotny sposób, w przeciwieństwie do szyfru Feistela, algorytmy szyfrowania i deszyfrowania muszą być oddzielnie zaimplementowane, chociaż są bardzo blisko powiązane.
Analiza AES
W dzisiejszej kryptografii, AES jest szeroko przyjęty i wspierany zarówno w sprzęcie jak i oprogramowaniu. Do tej pory nie odkryto żadnych praktycznych ataków kryptoanalitycznych na AES. Dodatkowo, AES posiada wbudowaną elastyczność długości klucza, co pozwala w pewnym stopniu „zabezpieczyć się na przyszłość” przed postępem w zakresie zdolności do wyczerpującego przeszukiwania klucza.
Jednakże, podobnie jak w przypadku DES, bezpieczeństwo AES jest zapewnione tylko wtedy, gdy jest on poprawnie zaimplementowany i stosowane jest dobre zarządzanie kluczami.