AES (Advanced Encryption Standard) to symetryczny szyfr blokowy. Przetwarza dane w blokach po 128 bitów, używając klucza o długości 128, 192 albo 256 bitów. Szyfrowanie nie polega na jednej operacji, lecz na wielokrotnym mieszaniu danych w rundach, dzięki czemu odtworzenie treści bez klucza jest praktycznie niewykonalne.
Czym jest AES?
AES jest standardem szyfrowania symetrycznego, czyli takim, w którym ten sam tajny klucz służy do szyfrowania i odszyfrowywania danych. Standard został opracowany na bazie algorytmu Rijndael i przyjęty przez NIST jako następca przestarzałego już DES.
Algorytm może używać klucza 128-, 192- lub 256-bitowego, ale zawsze operuje na blokach o rozmiarze 128 bitów. AES nie jest tym samym co RSA. RSA należy do kryptografii asymetrycznej i wykorzystuje parę kluczy, natomiast AES jest szybszy i służy przede wszystkim do ochrony dużych ilości danych.
Jak AES organizuje dane przed szyfrowaniem?
Przed rozpoczęciem obliczeń dane są dzielone na bloki po 128 bitów, czyli 16 bajtów. Każdy blok zostaje ułożony w macierzy 4 × 4 bajty, nazywanej stanem (state). Sposób rozmieszczenia bajtów w tej macierzy ma znaczenie dla kolejnych operacji.
Można wyobrazić sobie stan jako układankę z 16 pól. AES nie tylko zamienia zawartość poszczególnych pól, ale także przesuwa całe wiersze i miesza bajty w kolumnach. Dzięki temu zmiana jednego bitu wejścia wpływa na dużą część wyniku.
Najpierw z głównego klucza tworzony jest zestaw kluczy rundy. Ten proces nazywa się rozszerzaniem klucza lub harmonogramem klucza (Key Schedule). Dla każdego bloku AES wykonuje następnie początkową operację XOR z pierwszym kluczem rundy, a potem przechodzi przez kolejne rundy szyfrujące.

Jak przebiega runda szyfrująca AES?
Liczba rund zależy od długości klucza. Dłuższy klucz nie zmienia rozmiaru bloku, lecz powoduje wykonanie większej liczby powtórzeń.
| Długość klucza | Liczba rund | Liczba kluczy rundy |
|---|---|---|
| 128 bitów | 10 | 11 |
| 192 bity | 12 | 13 |
| 256 bitów | 14 | 15 |
W rundach od pierwszej do przedostatniej dane przechodzą przez cztery podstawowe transformacje:
- SubBytes – każdy bajt jest zastępowany innym bajtem według tablicy S-Box. Operacja wprowadza nieliniowość, przez co zależność między tekstem jawnym, kluczem i szyfrogramem staje się trudna do przeanalizowania.
- ShiftRows – wiersze macierzy stanu są cyklicznie przesuwane w lewo. Pierwszy wiersz pozostaje bez zmian, drugi przesuwa się o jedną pozycję, trzeci o dwie, a czwarty o trzy.
- MixColumns – bajty w każdej kolumnie są łączone za pomocą odwracalnej transformacji matematycznej. Ten etap rozprowadza wpływ pojedynczych bajtów na całą kolumnę.
- AddRoundKey – wynik jest łączony z kluczem danej rundy za pomocą operacji XOR.
Ostatnia runda różni się od pozostałych jednym szczegółem: pomija operację MixColumns. Przed właściwymi rundami wykonywane jest jeszcze początkowe AddRoundKey, dlatego dla AES-128 powstaje łącznie 11 kluczy rundy, mimo że sam algorytm ma 10 rund.
S-Box nie jest zwykłą tabelą losowych podstawień. Jego konstrukcja zapewnia nieliniowość przekształcenia, a pozostałe operacje zwiększają rozproszenie danych. W efekcie nawet niewielka zmiana tekstu jawnego lub klucza prowadzi do znacznie innego szyfrogramu.

Jak wygląda odszyfrowywanie?
Odszyfrowywanie wykorzystuje ten sam główny klucz, ale stosuje operacje odwrotne i używa kluczy rundy w odwrotnej kolejności. Zamiast SubBytes stosuje się odwrotne podstawienie, zamiast ShiftRows – przesunięcie w prawo, a zamiast MixColumns – transformację odwrotną.
Każda z tych operacji została zaprojektowana tak, aby można było jednoznacznie odtworzyć stan z poprzedniego etapu. Sam szyfrogram nie zawiera jednak informacji pozwalającej obliczyć tajny klucz. Bez niego odwrócenie całego procesu wymagałoby sprawdzenia ogromnej liczby możliwości.
Dlaczego AES jest bezpieczny?
Najprostszy atak na AES polegałby na sprawdzeniu wszystkich możliwych kluczy. Dla AES-128 jest ich 2128, dla AES-192 – 2192, a dla AES-256 – 2256. Są to tak duże przestrzenie kluczy, że atak brute-force na poprawnie zaimplementowany AES jest obecnie praktycznie niewykonalny.
AES-256 oferuje większy margines bezpieczeństwa niż AES-128, ponieważ ma dłuższy klucz i wykonuje 14 zamiast 10 rund. Zwykle oznacza też nieco większy koszt obliczeniowy, choć na współczesnym sprzęcie różnica często nie ma istotnego znaczenia dla użytkownika. AES-128 również pozostaje bardzo silnym wariantem, dlatego wybór długości klucza powinien wynikać z wymagań systemu i polityki bezpieczeństwa.
Znaczenie ma nie tylko sam algorytm, lecz także jego implementacja. Błędy w zarządzaniu kluczami, przewidywalne hasła, wycieki z pamięci lub ataki boczne mogą osłabić cały system. Współczesne procesory często obsługują AES-NI, czyli instrukcje sprzętowe przyspieszające obliczenia AES i ograniczające część wycieków związanych z czasem wykonywania operacji.
Sam AES jest algorytmem, a nie kompletnym protokołem komunikacyjnym. W praktyce używa się go w określonym trybie pracy. Przykładowo AES-GCM łączy szyfrowanie z uwierzytelnianiem danych, natomiast CBC wymaga dodatkowego mechanizmu uwierzytelniającego, takiego jak HMAC. Niewłaściwy tryb lub błędne użycie wektora inicjalizującego może zniweczyć bezpieczeństwo nawet bardzo silnego szyfru.
Gdzie stosuje się AES?
AES jest używany w wielu systemach, które muszą chronić dane przechowywane lub przesyłane:
- Szyfrowanie dysków – między innymi w rozwiązaniach takich jak BitLocker i FileVault.
- Sieci Wi-Fi – mechanizmy WPA2 i WPA3 mogą wykorzystywać AES do ochrony transmisji.
- Połączenia HTTPS i TLS – AES może szyfrować dane przesyłane między przeglądarką a serwerem.
- Pliki, kopie zapasowe i pamięci masowe – AES chroni dane przed odczytem po uzyskaniu dostępu do nośnika.
Najważniejsza zasada brzmi: AES zapewnia poufność tylko wtedy, gdy klucz jest właściwie chroniony, a cały system korzysta z bezpiecznego trybu pracy. Samo użycie nazwy AES nie gwarantuje poprawnej ochrony danych.
AES to iteracyjne mieszanie 128-bitowych bloków przy użyciu kluczy rundy. SubBytes zapewnia nieliniowość, ShiftRows i MixColumns rozpraszają dane, a AddRoundKey wiąże każdą rundę z tajnym kluczem. Taka konstrukcja sprawia, że AES pozostaje szybkim i szeroko stosowanym standardem szyfrowania.