Jak działa AES-256? Szyfrowanie i wykrywanie zmian w danych
Co oznacza AES-256 i do czego służy tryb GCM? Wyjaśniamy rolę klucza, nonce i tagu uwierzytelniającego oraz odporność na znane ataki kwantowe.

W tym artykule
AES jest szyfrem symetrycznym: ten sam tajny klucz służy do szyfrowania i odszyfrowywania danych. W wariancie AES-256 klucz ma 256 bitów. Tryb GCM dodaje uwierzytelnianie, dzięki któremu aplikacja wykryje zmianę szyfrogramu i odmówi jego odczytania. Bezpieczeństwo zależy jednak także od tego, jak chroniony jest klucz i czy algorytmu użyto poprawnie.
Wyjaśniamy, co oznacza liczba 256, do czego służy nonce, jak działa tag uwierzytelniający i dlaczego samo zapewnienie „używamy AES” niewiele mówi o prywatności danych.
Szyfrowanie AES: co to jest?
AES (Advanced Encryption Standard) to powszechnie stosowany szyfr symetryczny. Korzystają z niego m.in. protokoły sieciowe i systemy, które chronią zapisane dane. „Symetryczny” oznacza, że do szyfrowania i odszyfrowywania potrzebny jest ten sam klucz.
- Szyfr
- Przepis na zamienianie danych w nieczytelny ciąg za pomocą klucza, tak aby odczytać je mógł tylko ktoś, kto ma ten sam klucz (albo, w niektórych systemach, klucz do niego dopasowany). Wynik to szyfrogram, a czytelny oryginał to tekst jawny.
AES wyłoniono w otwartym konkursie. W 1997 roku amerykański Narodowy Instytut Standaryzacji i Technologii (NIST) zaprosił kryptografów z całego świata do zgłaszania projektów, a przez kolejne lata środowisko publicznie próbowało je złamać. W 2000 roku NIST wybrał szyfr Rijndael autorstwa belgijskich badaczy Joana Daemena i Vincenta Rijmena, a 26 listopada 2001 roku opublikował go jako FIPS 197. Aktualizacja dokumentu z 2023 roku była wyłącznie redakcyjna: sam algorytm się nie zmienił.
Specyfikacja AES jest publiczna, a kryptografowie analizują algorytm od wielu lat. Nie jest znany praktyczny atak, który pozwalałby odzyskać losowy klucz AES-256, jeśli szyfru używa się poprawnie. Jawność algorytmu nie osłabia ochrony: tajny ma być klucz, a nie sposób działania szyfru.
AES-256: co to znaczy 256?
Liczba ta oznacza długość klucza w bitach. Bit to pojedynczy wybór „tak albo nie”, więc 256-bitowy klucz przypomina wynik 256 rzutów monetą. AES występuje w trzech wariantach: 128, 192 i 256 bitów. Wszystkie szyfrują dane blokami po 128 bitów (16 bajtów).
Każdy dodatkowy bit podwaja liczbę możliwych kluczy. Przy 256 bitach jest ich 2²⁵⁶, czyli liczba mająca 78 cyfr. Spróbujmy to sobie wyobrazić. Załóżmy, że miliard komputerów sprawdza po bilion kluczy na sekundę. Zanim trafi się na właściwy klucz, trzeba średnio przejrzeć połowę wszystkich, co zajęłoby około 10⁴⁸ lat. Wszechświat istnieje około 13,8 mld lat, a to liczba zaledwie jedenastocyfrowa.
AES-128 również uchodzi za bezpieczny; dłuższy klucz daje dodatkowy zapas. W praktyce najważniejsze jest pilnowanie dostępu do klucza. Słabe hasło, phishing albo złośliwe oprogramowanie mogą ujawnić dane, a samego AES nikt nie musi wtedy atakować.
Dlaczego AES potrzebuje trybu takiego jak GCM?
AES przetwarza pojedyncze bloki po 16 bajtów. Żeby zaszyfrować całą wiadomość, potrzebny jest jeszcze tryb pracy, czyli reguła, która określa, jak używać szyfru dla danych dowolnej długości.
Najprostszy tryb, ECB, szyfruje każdy blok osobno i przez to ujawnia powtórzenia: identyczne bloki tekstu dają identyczne bloki szyfrogramu. Znany przykład: obrazek pingwina zaszyfrowany w ten sposób nadal wyraźnie przypomina pingwina. Dlatego ECB nie nadaje się do szyfrowania wiadomości ani plików.
GCM (Galois/Counter Mode, opisany przez NIST w SP 800-38D) działa inaczej. AES bierze klucz, nową liczbę startową i licznik, a z nich wytwarza długi strumień bajtów, które wyglądają na losowe. Ten strumień jest łączony z Twoim tekstem bajt po bajcie. Wynik ma dokładnie tę samą długość co tekst, a powtarzające się słowa w szyfrogramie nie są do siebie podobne.
Tag uwierzytelniający: jak GCM wykrywa zmiany
GCM oblicza też tag uwierzytelniający, który działa trochę jak cyfrowa plomba. W Cappie ma 128 bitów, czyli 16 bajtów. Zależy od klucza, zaszyfrowanej wiadomości i danych dodatkowych objętych uwierzytelnianiem (o nich za chwilę).
Zanim aplikacja pokaże odszyfrowaną treść, sprawdza tag. Jeśli szyfrogram, tag albo dane dodatkowe zostały zmienione, wiadomość zostaje odrzucona. Podrobienie wiadomości, która przejdzie tę kontrolę, jest w praktyce niewykonalne, choć nie wykluczone matematycznie. Warunkiem jest m.in. to, że nonce się nie powtarza, a limity trybu GCM są przestrzegane.
Bez uwierzytelniania tryb licznikowy pozwalałby zmienić wybrany bit odszyfrowanej treści: wystarczyłoby zmienić odpowiedni bit szyfrogramu. Napastnik nie musiałby nawet znać całej wiadomości. Tag chroni przed takimi niezauważonymi zmianami.
- Szyfrowanie uwierzytelnione
- Szyfrowanie, które jednocześnie chroni poufność i integralność: bez klucza nikt nie odczyta danych i nikt ich niepostrzeżenie nie zmieni. AES-GCM to najpopularniejszy przykład.
Wypróbuj szyfrowanie w swojej przeglądarce
Okno poniżej uruchamia prawdziwy AES-256-GCM za pomocą Web Crypto, interfejsu kryptograficznego wbudowanego w przeglądarkę. Losowy klucz powstaje w tej karcie, a nic, co wpiszesz, nie opuszcza Twojego urządzenia.
Zaszyfruj notatkę i sprawdź, co się stanie po zmianie danych
Przykład używa AES-256-GCM z interfejsu Web Crypto Twojej przeglądarki. Klucz powstaje w tej karcie i nigdzie nie jest wysyłany, a API nie pozwala wyeksportować jego surowych bajtów.
Szyfrowanie…
Spróbuj kilku rzeczy:
- Wpisz krótką notatkę i spójrz na rozmiary. Szyfrogram jest zawsze o 16 bajtów dłuższy niż tekst. Te 16 bajtów to tag uwierzytelniający.
- Kliknij Zaszyfruj ponownie. Tekst i klucz się nie zmieniają, a mimo to nonce i cały szyfrogram są zupełnie inne. To efekt nowego nonce, losowanego przy każdym szyfrowaniu. Dzięki niemu dwie identyczne notatki po zaszyfrowaniu wyglądają inaczej.
- Kliknij Zmień jeden bajt. Okno zmienia jeden bajt szyfrogramu, a odszyfrowanie zostaje odrzucone. Nie ma wyniku „w połowie czytelnego”: tag się nie zgadza, więc odszyfrowanie się nie udaje.
Nonce, czyli liczba użyta raz
Nonce to wartość używana przy szyfrowaniu razem z kluczem. Nie musi być tajna i zapisuje się ją obok szyfrogramu. W GCM obowiązuje jednak bezwzględna zasada: przy tym samym kluczu nie wolno użyć jej ponownie.
Jeśli przy tym samym kluczu nonce się powtórzy, dwie wiadomości zostaną połączone z tym samym strumieniem bajtów. Kto ma oba szyfrogramy, może je porównać i dowiedzieć się, czym różnią się teksty, a to często wystarcza, by odczytać oba. Co gorsza, w GCM powtórzony nonce może ujawnić sekret, z którego powstaje tag, a wtedy napastnik podrobi wiadomości przechodzące kontrolę. To nie jest wyłącznie teoria: badanie z 2016 roku wykryło w internecie 184 serwery HTTPS, które powtarzały nonce w GCM.
W Cappie przy każdym szyfrowaniu notatki lub ustawień aplikacja pobiera z kryptograficznego generatora liczb losowych przeglądarki nowy 96-bitowy (12-bajtowy) nonce. Każdy zapis edytowanej notatki daje więc zupełnie nowy szyfrogram, tak jak przycisk Zaszyfruj ponownie.
Przy losowych nonce istnieje ryzyko przypadkowego powtórzenia. NIST ogranicza liczbę szyfrowań jednym kluczem z tak generowanym nonce do 2³², czyli około 4,3 miliarda. To limit łączny dla klucza, a nie osobny dla każdej notatki czy urządzenia. Przy jednej operacji na sekundę odpowiada to ponad stu latom, ale implementacja i tak musi liczyć wszystkie zapisy wykonane tym kluczem.
AAD: ochrona metadanych przed podmianą
Niektóre informacje muszą pozostać jawne, żeby serwer mógł obsługiwać dane, ale ich zmiana powinna zostać wykryta. GCM pozwala objąć takie dane dodatkowe uwierzytelnianiem (AAD, od ang. additional authenticated data). Nie są one szyfrowane, ale biorą udział w obliczaniu tagu.
Cappa umieszcza w AAD identyfikator sejfu (sejf to zaszyfrowany zbiór Twoich notatek), identyfikator rekordu, jego typ, numer rewizji oraz wersję formatu szyfrowania. W ten sposób szyfrogram jest związany z konkretnym rekordem i jego wersją.
Zaszyfrowany rekord w bazieto przechowuje serwer
Etykieta (czytelna, objęta tagiem)
Nonce: jawna wartość losowa
Szyfrogram i tagnieczytelne bez klucza sejfu
Q9Fi8djJWpQgwqHV-hz4GytD3ojLJix2WdOEOWG81Ju23_eMz1iddqS04XhWiX-Q2qHEDWmyW praktyce ten, kto kontroluje bazę danych, nie może przypiąć szyfrogramu jednej notatki do identyfikatora innej, podać starej wersji jako nowszej rewizji ani przenieść notatki do cudzego sejfu. Przeglądarka odmówi jej otwarcia.
Dlaczego „AES-256” w reklamie mówi niewiele
Sama nazwa szyfru nie wystarczy, by ocenić usługę. Trzeba też ustalić, gdzie powstaje klucz, kto go przechowuje i jakie systemy mogą go używać.
Wiele usług chmurowych szyfruje dane „w spoczynku”: pliki na dyskach firmy są zaszyfrowane, ale klucze też trzyma firma. Jej systemy (i każdy, kto włamie się do nich dostatecznie głęboko) mogą więc odszyfrować Twoje dane. Apple w dokumentacji iCloud otwarcie pisze, że przy standardowej ochronie danych klucze są przechowywane w centrach danych firmy, więc Apple może odszyfrować dane w Twoim imieniu. Opcjonalna Zaawansowana ochrona danych przenosi większość kluczy na Twoje urządzenia. Ten sam AES, a zupełnie inny skutek.
Klucze przechowuje dostawca
- Klucz tworzy i przechowuje dostawca
- Jego serwery mogą w razie potrzeby odszyfrować dane
- Włamanie do odpowiednich systemów albo nakaz prawny może ujawnić treść
- Dostawca może przywrócić dostęp do treści po zmianie danych logowania
Szyfrowanie end-to-end
- Klucz powstaje i działa na Twoim urządzeniu
- Serwer przechowuje szyfrogram, którego nie otworzy
- Skradziona baza to szyfrogram i metadane, a nie treść
- Utrata sekretów może oznaczać utratę danych
Tak wygląda to w Cappie. Przy tworzeniu sejfu Twoja przeglądarka losuje 256-bitowy klucz sejfu. Ten klucz szyfruje notatki algorytmem AES-256-GCM. Na serwerze sam klucz sejfu istnieje wyłącznie w zaszyfrowanych „kopertach” (także AES-256-GCM): w kopercie hasła, zamkniętej kluczem wyprowadzonym z hasła głównego przez Argon2id, i osobno w kopercie odzyskiwania, zamkniętej kluczem wyprowadzonym z kodu odzyskiwania. Serwer przechowuje te koperty i zaszyfrowane notatki, ale nie ma hasła głównego, kodu odzyskiwania ani odszyfrowanego klucza sejfu.
Hasło główne
Klucz hasła
Klucz sejfu
Zaszyfrowana notatka
Serwer
Dlatego siła hasła głównego i powolne wyprowadzanie klucza mają tak duże znaczenie. Słabym punktem nie jest AES, tylko droga do klucza. Ten etap opisujemy w tekście o Argon2, a o tym, co serwer widzi, a czego nie, piszemy w artykule o szyfrowaniu end-to-end w notatkach. Jeśli wybierasz aplikację, w porównaniu aplikacji do notatek sprawdzamy właśnie to.
Gdy następnym razem przeczytasz o „wojskowym szyfrowaniu AES-256”, lepiej zapytaj:
- Gdzie powstaje klucz i kto może go użyć?
- Czy firma może odczytać moje dane, jeśli zechce albo dostanie nakaz?
- Co chroni klucz? Jeśli moje hasło, to jak bardzo spowolnione jest jego zgadywanie?
- Co pozostaje widoczne, np. nazwy plików, rozmiary i godziny zmian?
- Co się stanie, jeśli zapomnę hasła?
Czy AES-256 jest odporny na komputery kwantowe?
Według obecnej wiedzy tak. Do ataku na AES nadaje się kwantowy algorytm Grovera, który w teorii sprowadza liczbę potrzebnych prób mniej więcej do pierwiastka kwadratowego z liczby wszystkich kluczy. Klucz 256-bitowy byłby wtedy tak trudny do odgadnięcia jak dziś klucz 128-bitowy, czyli nadal poza zasięgiem.
W FAQ o kryptografii postkwantowej NIST zwraca uwagę na praktyczne ograniczenia algorytmu Grovera: atak trudno rozłożyć na wiele maszyn, a obliczenia kwantowe są kosztowne. Według obecnej oceny instytutu nie trzeba podwajać długości kluczy AES. Nie jest to jednak prognoza, kiedy powstanie konkretna maszyna.
Prawdziwe zagrożenie kwantowe dotyczy kryptografii klucza publicznego (RSA i krzywych eliptycznych), która służy do uzgadniania kluczy i podpisów. Dlatego w sierpniu 2024 roku NIST opublikował pierwsze postkwantowe standardy klucza publicznego. Opisujemy je w tekście o kryptografii postkwantowej, a to, co komputery kwantowe oznaczają dla haseł, w osobnym poradniku.
Szyfrowanie treści notatek w Cappie w ogóle nie używa kryptografii klucza publicznego: klucze pochodzą z hasła głównego, kodu odzyskiwania i liczb losowych, a notatki chroni AES-256-GCM. Twoje połączenie HTTPS korzysta z kryptografii klucza publicznego, jak na każdej stronie internetowej, ale treść notatek przechodzi przez nie już jako szyfrogram AES.
Najczęstsze pytania
Czy AES-256 jest lepszy od AES-128?
Oba warianty uchodzą za bezpieczne i oba zatwierdził NIST. AES-256 ma dłuższy klucz, co daje większy zapas bezpieczeństwa (także wobec teoretycznego przyspieszenia, jakie dałyby komputery kwantowe), kosztem niewielkiego spadku szybkości. Do ochrony zapisanych danych osobistych AES-256 to rozsądny i powszechny wybór.
Czy AES-256 da się złamać?
Nie jest znany praktyczny atak, który odzyskiwałby poprawnie używany klucz AES-256, a zgadywanie go metodą siłową jest poza zasięgiem. Zaszyfrowane dane wyciekają innymi drogami: przez wyłudzone lub słabe hasło, powtórzony nonce, klucz trzymany obok danych albo złośliwe oprogramowanie na urządzeniu, które je odszyfrowuje.
Czym różni się AES od AES-GCM?
AES to rdzeń szyfru: szyfruje kluczem jeden 16-bajtowy blok. AES-GCM to AES w trybie Galois/Counter, który szyfruje tekst dowolnej długości i dodaje 16-bajtowy tag uwierzytelniający. Dzięki temu tagowi odszyfrowanie się nie udaje, jeśli cokolwiek zmieniono.
Dlaczego ten sam tekst za każdym razem szyfruje się inaczej?
Bo każde szyfrowanie używa nowego, losowego nonce. Dzięki temu nie widać, czy dwie notatki są identyczne, a GCM pozostaje bezpieczny. Możesz to sprawdzić przyciskiem Zaszyfruj ponownie w demonstracji powyżej.
Czy AES-256 ukrywa rozmiar moich plików?
Nie. W GCM szyfrogram ma długość tekstu plus 16 bajtów tagu, więc rozmiar pozostaje widoczny dla każdego, kto przechowuje dane. Ukrycie rozmiaru wymagałoby dopełniania danych (paddingu) albo innych technik stosowanych obok szyfrowania.


