Szyfrowanie AES-256 bez matematyki: zamek, klucz i plomba

Szyfrowanie AES: co to jest i co znaczy 256? Bez wzorów wyjaśniamy tryb GCM, plombę, nonce, rolę klucza i odporność AES-256 na komputery kwantowe.

Kapibara ogląda przez lupę solidny żelazny sejf zamknięty ciężką kłódką i przewiązany wstęgą z plombą.
W tym artykule

Szyfrowanie AES to standard szyfrowania symetrycznego: jeden tajny klucz zarówno zamyka, jak i otwiera dane. W AES-256 ten klucz ma 256 bitów, a tryb GCM dokłada do szyfrogramu plombę, dzięki której zmiana choćby jednego bitu kończy się odmową odszyfrowania, a nie cichym pokazaniem błędnej treści. AES-256-GCM chroni więc notatkę przed odczytem i wykrywa każdą ingerencję, ale tylko dopóty, dopóki klucz jest w dobrych rękach.

Poniżej wyjaśniamy to bez wzorów: co naprawdę daje liczba 256, po co jest losowa „liczba użyta raz”, co chroni plomba i dlaczego pytanie „kto ma klucz?” jest ważniejsze niż nazwa szyfru.

Szyfrowanie AES: co to jest?

Wyobraź sobie sejf z jednym kluczem. Tym samym kluczem go zamykasz i otwierasz. Tak działa szyfrowanie symetryczne, a AES (Advanced Encryption Standard, czyli „zaawansowany standard szyfrowania”) jest najpowszechniej używanym szyfrem symetrycznym na świecie. Korzysta z niego Twoja przeglądarka przy większości połączeń HTTPS, Twój telefon do ochrony pamięci i najpewniej także Twój router Wi-Fi.

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 środowisko przez kilka lat publicznie próbowało je złamać. W 2000 roku NIST wybrał szyfr Rijndael autorstwa belgijskich badaczy Joana Daemena i Vincenta Rijmena i 26 listopada 2001 roku opublikował go jako FIPS 197. Aktualizacja dokumentu z 2023 roku była wyłącznie redakcyjna: sam algorytm się nie zmienił.

Ta historia ma znaczenie dla zaufania. AES nie jest tajną recepturą jednej firmy. Od ponad 25 lat jest publicznie analizowany i nie znaleziono praktycznego ataku, który odzyskiwałby poprawnie używany klucz AES.

AES-256: co to znaczy 256?

Liczba 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 w blokach po 128 bitów (16 bajtów).

Każdy dodatkowy bit podwaja liczbę możliwych kluczy. Przy 256 bitach jest ich 2 do potęgi 256, czyli liczba mająca 78 cyfr. Spróbujmy to oszacować. Załóżmy miliard komputerów, z których każdy sprawdza bilion kluczy na sekundę. Średnio trzeba przejrzeć połowę wszystkich kluczy, zanim trafi się właściwy, co zajęłoby około 1048 lat. Wszechświat ma około 13,8 mld lat, a to liczba zaledwie jedenastocyfrowa.

256 bitówdługość klucza w AES-256
78 cyfrma liczba możliwych kluczy
16 bajtówblok, który AES szyfruje naraz
16 bajtówplomba GCM dodana do wiadomości

Dwa uczciwe zastrzeżenia. Po pierwsze, AES-128 też uchodzi dziś za bezpieczny, a dłuższy klucz daje głównie zapas bezpieczeństwa. Po drugie, prawdziwi napastnicy prawie nigdy nie próbują zgadywać klucza AES. Atakują to, co ten klucz chroni: słabe hasło, wyłudzone logowanie, złośliwe oprogramowanie na laptopie. Zapamiętaj to, bo jeszcze do tego wrócimy.

Dlaczego AES potrzebuje trybu takiego jak GCM?

Sam AES robi jedną drobną rzecz: zamienia dokładnie 16 bajtów w 16 nieczytelnych bajtów. Notatka jest dłuższa, więc potrzebny jest przepis na stosowanie AES do tekstu dowolnej długości. Taki przepis nazywa się trybem pracy szyfru.

Najprostszy przepis to pociąć tekst na 16-bajtowe kawałki i zaszyfrować każdy osobno. Ma on słynną wadę: identyczne kawałki dają identyczny wynik, więc wzory przebijają przez szyfrogram. Klasyczny przykład to rysunek pingwina zaszyfrowany w ten sposób, który po zaszyfrowaniu nadal wyraźnie wygląda jak pingwin.

GCM (Galois/Counter Mode, opisany przez NIST w SP 800-38D) działa inaczej. AES bierze klucz, świeżą liczbę startową i licznik, a z nich wytwarza długi strumień bajtów wyglądających na losowe. Ten strumień jest mieszany z Twoim tekstem bajt po bajcie. Wynik ma dokładnie tę samą długość co tekst, a powtarzające się słowa nie są do siebie podobne.

Co dodaje GCM: plomba, która wykrywa ingerencję

Pomyśl o plombie na liczniku prądu albo o lakowej pieczęci na starym dokumencie. Plomba niczego nie ukrywa, ale jeśli ktoś ją naruszy, od razu to widać. GCM dodaje do każdej zaszyfrowanej wiadomości cyfrową plombę, czyli tag uwierzytelniający. Ma 128 bitów (16 bajtów) i powstaje z klucza, szyfrogramu oraz dodatkowych danych, które chcesz chronić.

Przy odszyfrowaniu tag jest liczony ponownie i porównywany. Jeśli zmienił się choćby jeden bit szyfrogramu, tagu albo chronionych danych dodatkowych, porównanie się nie zgadza i odszyfrowanie nie zwraca niczego. Dostajesz jasne „nie” zamiast pomieszanej notatki.

Dlaczego to takie ważne? Samo szyfrowanie licznikowe bez plomby jest „plastyczne”: odwrócenie bitu w szyfrogramie odwraca ten sam bit w odszyfrowanym tekście. Ktoś, kto wie, w którym miejscu wiadomości stoi liczba, mógłby zmienić 1 na 9, nie czytając reszty. Plomba zamyka tę furtkę. Żeby podrobić ją bez klucza, napastnik musiałby odgadnąć 128-bitową wartość, a każda błędna próba jest po prostu odrzucana.

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

Poniższe okno uruchamia prawdziwy AES-256-GCM za pomocą wbudowanego w przeglądarkę interfejsu Web Crypto. Losowy klucz powstaje w tej karcie, a nic, co wpiszesz, nie opuszcza Twojego urządzenia.

Sprawdź sam: zaszyfruj notatkę w przeglądarce

Działa tu prawdziwy AES-256-GCM z Web Crypto Twojej przeglądarki. Klucz powstał przed chwilą w tej karcie, nie da się go wyeksportować i nie jest nigdzie wysyłany.

Co zapisałby serwerNieczytelne bez kluczaSzyfrowanie…

Szyfrowanie…

Spróbuj kilku rzeczy:

  1. 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 plomba.
  2. Kliknij Zaszyfruj ponownie. Tekst i klucz się nie zmieniają, a mimo to nonce i cały szyfrogram są zupełnie inne. To działanie świeżego nonce i powód, dla którego dwie identyczne notatki po zaszyfrowaniu nie wyglądają tak samo.
  3. Kliknij Zmień jeden bajt. Jeden bajt szyfrogramu zostaje zmieniony i odszyfrowanie jest odrzucane. Nie ma wyniku „w połowie czytelnego”: plomba jest naruszona, więc odszyfrowanie się nie uda.

Nonce, czyli liczba użyta raz

Nonce (od angielskiego „number used once”) to świeża liczba startowa, którą GCM przy każdym szyfrowaniu łączy z kluczem. Nie jest tajna: leży tuż obok szyfrogramu, bo bez niej nie da się odszyfrować. Ważne jest tylko to, żeby ten sam klucz nigdy nie użył tego samego nonce dwa razy.

Jeśli nonce się powtórzy przy tym samym kluczu, dwie wiadomości zostaną zmieszane 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 plomba, a wtedy napastnik podrobi wiadomości przechodzące kontrolę. To nie tylko teoria: badanie z 2016 roku wykryło w internecie 184 serwery HTTPS powtarzające nonce w GCM.

W Cappie przy każdym szyfrowaniu notatki lub ustawień aplikacja prosi kryptograficzny generator liczb losowych przeglądarki o nowy 96-bitowy (12-bajtowy) nonce. Ponowny zapis edytowanej notatki daje więc całkiem nowy szyfrogram, dokładnie jak przycisk Zaszyfruj ponownie.

Losowe nonce mają znany „budżet”. Wytyczne NIST dla GCM ograniczają jeden klucz do około 4,3 mld szyfrowań z losowym 96-bitowym nonce, co utrzymuje szansę przypadkowego powtórzenia na pomijalnym poziomie. Przy notatkach jednej osoby to ogromny zapas: więcej niż jedno szyfrowanie na sekundę, bez przerwy, przez sto lat.

Dane dodatkowe (AAD): etykieta na paczce

Czasem informacja musi pozostać czytelna, ale nadal wymaga ochrony. Dobrą analogią jest etykieta adresowa na paczce: kurier musi ją przeczytać, ale chcesz wiedzieć, czy ktoś jej nie odkleił i nie przykleił na inną paczkę. GCM rozwiązuje to przez dane dodatkowe uwierzytelniane (AAD, additional authenticated data). AAD nie są szyfrowane, ale obejmuje je plomba. Jeśli etykieta i paczka do siebie nie pasują, odszyfrowanie się nie uda.

Cappa używa AAD, żeby przywiązać każdy zaszyfrowany rekord do jego miejsca. Plomba każdego rekordu obejmuje sejf, do którego należy, identyfikator rekordu, jego typ (notatka albo Twoje preferencje), numer rewizji i wersję formatu szyfrowania.

Zaszyfrowany rekord w bazieto przechowuje serwer

Etykieta (czytelna, objęta plombą)

sejfID rekordutyprewizjawersja formatu

Nonce (czytelny, nigdy nie powtarzany)

Szyfrogram i plombanieczytelne bez klucza sejfu

Q9Fi8djJWpQgwqHV-hz4GytD3ojLJix2WdOEOWG81Ju23_eMz1iddqS04XhWiX-Q2qHEDWmy
Jeden zapisany rekord. Serwer widzi etykietę i nonce, ale plomba obejmuje też etykietę, więc rekordu nie da się przenieść, przemianować ani podać jako innej rewizji bez błędu odszyfrowania.

W praktyce ten, kto kontroluje bazę danych, nie może wziąć szyfrogramu jednej notatki i podpiąć go pod identyfikator innej, podać starej wersji jako nowszej rewizji ani przenieść jej do cudzego sejfu. Przeglądarka odmówi otwarcia.

Dlaczego „AES-256” na stronie reklamowej mówi niewiele

Niemal każda usługa internetowa może zgodnie z prawdą napisać, że używa AES-256. Sam szyfr nie jest tu najciekawszy. Ważne jest, kto tworzy klucz, gdzie on jest i kto może go użyć.

Wiele usług chmurowych szyfruje dane „w spoczynku”: pliki na ich dyskach są zaszyfrowane, ale klucze trzyma firma, więc jej systemy (i każdy, kto się do nich dostatecznie głęboko włamie) mogą Twoje dane odszyfrować. Apple w dokumentacji iCloud otwarcie opisuje, że w 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, zupełnie inny efekt.

Szyfrowanie w spoczynku

  • 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ść
  • Reset hasła jest prosty

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 (tak nazywamy zaszyfrowany zbiór Twoich notatek) 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 „kopercie”: zaszyfrowany (także AES-256-GCM) kluczem wyprowadzonym z hasła głównego przez Argon2id oraz osobno kluczem wyprowadzonym z kodu odzyskiwania. Serwer przechowuje te koperty i zaszyfrowane notatki, ale nie hasło główne, nie kod odzyskiwania i nie odpakowany klucz sejfu.

Hasło główne

Wpisane na Twoim urządzeniu
Argon2id

Klucz hasła

Otwiera kopertę z kluczem sejfu
odpakowuje

Klucz sejfu

Losowe 256 bitów, szyfruje każdą notatkę
AES-256-GCM

Zaszyfrowana notatka

Nonce, szyfrogram, plomba
HTTPS

Serwer

Przechowuje szyfrogram, którego nie odczyta
Hasło główne nie opuszcza przeglądarki. Na urządzeniu zamienia się w klucz, który otwiera kopertę z kluczem sejfu, a do serwera trafia wyłącznie szyfrogram.

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 wyjaśnia tekst Argon2 po ludzku, a o tym, co serwer widzi, a czego nie, piszemy w artykule o szyfrowaniu end-to-end w notatkach. Jeśli wybierasz aplikację, porównanie aplikacji do notatek zadaje każdej z nich właśnie to pytanie.

Gdy następnym razem przeczytasz o „wojskowym szyfrowaniu AES-256”, zapytaj raczej:

  • 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, na przykład 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 teoretycznie zmniejsza liczbę potrzebnych prób mniej więcej do pierwiastka kwadratowego z ich liczby. 256-bitowy klucz byłby wtedy tak trudny do odgadnięcia jak dziś klucz 128-bitowy, czyli nadal poza zasięgiem.

NIST jest jeszcze spokojniejszy. W FAQ o kryptografii postkwantowej wyjaśnia, że algorytm Grovera da niewielką albo żadną praktyczną przewagę nad AES, bo atak trzeba wykonywać krok po kroku na drogim sprzęcie kwantowym. Według NIST AES-128 pozostanie bezpieczny przez dekady, AES-192 i AES-256 przez bardzo długi czas, a podwajanie długości kluczy AES nie jest potrzebne.

Prawdziwe zagrożenie kwantowe dotyczy kryptografii klucza publicznego (RSA i krzywych eliptycznych), która służy do uzgadniania kluczy i podpisów. Dlatego NIST w sierpniu 2024 roku opublikował pierwsze postkwantowe standardy klucza publicznego (opisujemy je w tekście Kryptografia postkwantowa po ludzku, 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 są zabezpieczone AES-256-GCM. Twoje połączenie HTTPS korzysta z kryptografii klucza publicznego, jak każda strona internetowa, ale treść notatek płynie nim już jako szyfrogram AES.

Najczęstsze pytania

Czy AES-256 jest lepszy od AES-128?

Oba warianty uchodzą za bezpieczne i oba są zatwierdzone przez NIST. AES-256 ma dłuższy klucz, co daje większy zapas bezpieczeństwa (także wobec teoretycznego przyspieszenia z komputerów kwantowych) kosztem niewielkiego spadku szybkości. Do ochrony zapisanych danych osobistych AES-256 to rozsądny, 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 jeden 16-bajtowy blok za pomocą klucza. 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 zobaczyć przyciskiem Zaszyfruj ponownie w demo 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 tego, kto go przechowuje. Ukrycie rozmiaru wymagałoby dopełniania albo innych technik stosowanych obok szyfrowania.

Autor: zespół Cappa

Tworzymy aplikację Cappa: prywatny notatnik w Markdownie, który szyfruje notatki na Twoim urządzeniu, zanim trafią do synchronizacji. Opisujemy decyzje, które za nim stoją, razem z ograniczeniami, żeby każdy mógł ocenić je sam.