Przewodnik po szyfrowaniu AES-256: ochrona klasy wojskowej
Zrozum szyfrowanie AES-256 i dlaczego jest złotym standardem. Dowiedz się, jak ten szyfr wojskowy chroni Twoje transfery.
AES-256 to symetryczny szyfr blokowy zatwierdzony przez NSA dla danych o klauzuli TOP SECRET zgodnie z CNSSP-15. Szyfruje 128-bitowe bloki przy użyciu 256-bitowego klucza w 14 rundach operacji podstawiania, permutacji i mieszania. Złamanie jednego klucza AES-256 metodą brute-force wymagałoby około 2^255 operacji — liczba tak duża, że wszystkie komputery na Ziemi działające przez wiek wszechświata nie zdołałyby tego dokonać. Dlatego każda poważna usługa transferu plików, od SwissTransfer po Tresorit, używa AES-256 jako szyfru masowego. Oto jak to faktycznie działa.
Skąd pochodzi „256"
AES występuje w trzech rozmiarach kluczy: 128, 192 i 256 bitów. Liczba odnosi się wyłącznie do długości klucza, a nie rozmiaru bloku (który zawsze wynosi 128 bitów). Rozmiar klucza określa liczbę rund szyfru: 10 dla AES-128, 12 dla AES-192, 14 dla AES-256.
Więcej rund oznacza większą dyfuzję — każdy bit wyjściowy zależy od większej liczby bitów wejściowych — oraz większą odporność na ataki kryptoanalityczne, takie jak atak biklikowy opublikowany w 2011 roku, który teoretycznie zredukował efektywne bezpieczeństwo AES-256 z 256 do 254,4 bitów. To wciąż daleko poza zasięgiem jakiegokolwiek praktycznego ataku.
Federalny Standard Przetwarzania Informacji FIPS 197 definiuje AES, a specyfikacje NIST SP 800-38A do 800-38G definiują tryby działania.
Tryby działania: GCM vs CBC vs ECB
AES to szyfr blokowy, co oznacza, że potrafi zaszyfrować tylko jeden 128-bitowy blok naraz. Do zaszyfrowania pliku o dowolnym rozmiarze potrzebny jest tryb działania. Wybór ma ogromne znaczenie:
- ECB (Electronic Codebook): identyczne bloki tekstu jawnego dają identyczny zaszyfrowany tekst. Nigdy tego nie używaj. Słynny „pingwin ECB" pokazuje, że zarys Tuksa jest widoczny przez piksele zaszyfrowane ECB.
- CBC (Cipher Block Chaining): XORuje każdy blok z poprzednim zaszyfrowanym tekstem. Bezpieczny w połączeniu z HMAC do uwierzytelniania, ale sam CBC jest podatny na ataki padding oracle (POODLE uderzył w SSL w 2014 roku).
- GCM (Galois/Counter Mode): szyfruje licznikiem i w tym samym przebiegu generuje 128-bitowy znacznik uwierzytelnienia. Manipulacja zaszyfrowanym tekstem wyraźnie psuje deszyfrowanie. To właśnie ten tryb stosują nowoczesne usługi.
AES-256-GCM jest domyślnym wyborem w TLS 1.3, Signal, WireGuard i każdej wiarygodnej usłudze transferu plików. Jeśli usługa wymienia „AES-256" bez podania trybu, zakładaj GCM i sprawdź.
IV (nonce), którego nigdy nie wolno powtarzać
GCM wymaga unikalnego 96-bitowego wektora inicjalizacyjnego przy każdym szyfrowaniu danym kluczem. Ponowne użycie IV z tym samym kluczem nawet raz pozwala atakującemu na XOR dwóch zaszyfrowanych tekstów w celu odzyskania tekstu jawnego — katastrofalna podatność wykorzystana niegdyś przeciwko sieci Wi-Fi WEP.
Najlepsza praktyka: generuj IV za pomocą kryptograficznie bezpiecznego RNG (crypto.getRandomValues() w przeglądarkach, /dev/urandom w Linuksie) i dołączaj go do zaszyfrowanego tekstu. 96-bitowy losowy IV ma prawdopodobieństwo kolizji około 2^-48 po zaszyfrowaniu 2^32 plików — akceptowalne dla usługi transferu plików.
Wyprowadzanie kluczy: zamiana haseł na klucze
Użytkownicy chcą haseł takich jak mójpies2024. AES potrzebuje 256 bitów równomiernej losowości. Mostem jest funkcja wyprowadzania klucza (KDF). Trzy są powszechnie stosowane:
- PBKDF2 z HMAC-SHA-256 i 600 000 iteracji (zalecenie OWASP z 2023 roku). Szeroko obsługiwane, dostępne w Web Crypto API.
- scrypt dodaje odporność na pamięć, podnosząc koszty ataków GPU. Używają go Bitcoin i LastPass.
- Argon2id to aktualna najlepsza praktyka, zwycięzca Password Hashing Competition z 2015 roku. Parametry:
memory=64 MB, iterations=3, parallelism=4.
12-znakowe losowe hasło przetworzone przez Argon2id zajmie nowoczesnemu GPU mniej więcej miliard lat na złamanie metodą brute-force. Słabe hasło jak haslo123 pada w milisekundy niezależnie od KDF.
AES w przeglądarce: Web Crypto API
Przeglądarki udostępniają AES-256-GCM natywnie przez window.crypto.subtle. Typowy przepływ:
const key = await crypto.subtle.generateKey(
{ name: "AES-GCM", length: 256 },
true,
["encrypt", "decrypt"]
);
const iv = crypto.getRandomValues(new Uint8Array(12));
const ciphertext = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv },
key,
fileBytes
);
Nowoczesne procesory mają instrukcje AES-NI, które przyspieszają to do około 3–5 GB/s na rdzeń. Plik 1 GB szyfruje się w mniej niż sekundę na przeciętnym laptopie. Na urządzeniach mobilnych układy Apple A-series i Qualcomm Snapdragon zawierają ARMv8 Crypto Extensions zapewniające podobną przepustowość.
Przed czym chroni AES-256, a przed czym nie
AES-256 rozwiązuje jeden konkretny problem: poufność danych przechowywanych lub przesyłanych, przy założeniu, że klucz jest tajny. Nie rozwiązuje:
- Zarządzania kluczami. Jeśli wyślesz hasło razem z plikiem, AES-256 nic nie zmienia.
- Kompromitacji punktu końcowego. Złośliwe oprogramowanie odczytujące czysty tekst przed szyfrowaniem całkowicie omija szyfr.
- Błędów implementacji. Ataki BEAST, CRIME i Lucky13 z 2018 roku były wymierzone w implementacje TLS, a nie w sam AES.
- Ataków bocznych. Analiza czasu dostępu do pamięci podręcznej i analiza poboru mocy wydobyły klucze AES z urządzeń o ograniczonych zasobach. Instrukcje AES-NI w dużej mierze łagodzą to na komputerach stacjonarnych.
AES-256 nie dowodzi też tożsamości nadawcy. W tym celu połącz go z podpisami cyfrowymi za pomocą Ed25519 lub ECDSA.
Dlaczego „klasa wojskowa" to głównie marketing
Sformułowanie jest nadużywane, ponieważ NSA w CNSSP-15 zatwierdziło AES-256 dla danych TOP SECRET w 2003 roku. To prawda, ale od tamtej pory minęło ponad 20 lat — AES-128 jest zatwierdzony dla danych SECRET i dla większości zastosowań cywilnych byłby równie skuteczny. Przejście z 128 do 256 bitów to zabezpieczenie przed przyszłymi osiągnięciami obliczeń kwantowych: algorytm Grovera teoretycznie zmniejsza o połowę bezpieczeństwo symetrycznego klucza, redukując efektywną siłę AES-256 do 128 bitów — nadal bezpieczne.
W praktyce AES-256 kosztuje może 40% więcej mocy obliczeniowej niż AES-128 przy AES-NI i jest powszechnie obsługiwany, więc stał się domyślnym wyborem nawet tam, gdzie 128 bitów by wystarczyło.
Jak zweryfikować, że usługa naprawdę używa AES-256-GCM
Trzy sposoby weryfikacji:
- Przeczytaj biały papier bezpieczeństwa. Wiarygodne usługi (Tresorit, Proton Drive, SwissTransfer, HexaTransfer) publikują dokładny tryb i metodę obsługi IV.
- Sprawdź kod klienta. Otwórz DevTools, przeszukaj pakiet JavaScript w poszukiwaniu
AES-GCMlubaes-256-gcm. Powinieneś go wyraźnie znaleźć. - Sprawdź audyty stron trzecich. Cure53, NCC Group i Trail of Bits publikują audyty, które wymieniają zrecenzowane algorytmy.
Sygnały ostrzegawcze: „szyfrowanie bankowe" bez podanego trybu, „własny algorytm" jakiegokolwiek rodzaju lub odwołania do AES-128-ECB.
Zastosowanie w praktyce
Przy wysyłaniu wrażliwego pliku: wybierz usługę, która wyraźnie podaje AES-256-GCM, używa 96-bitowego losowego IV dla każdego pliku i uruchamia szyfrowanie w Twojej przeglądarce (a nie na ich serwerze). Połącz to z hasłem zawierającym co najmniej 16 znaków wyprowadzonym przez Argon2id lub PBKDF2 z co najmniej 600 000 iteracji.
Wypróbuj na hexatransfer.com — bezpłatnie, bez konta, do 10 GB.
Wysyłaj duże pliki bezpiecznie z szyfrowaniem end-to-end
Przesyłaj pliki do 10 GB za darmo z szyfrowaniem end-to-end. Bez rejestracji. Twoje pliki są szyfrowane w przeglądarce przed przesłaniem — nikt inny nie może ich odczytać.
Wyślij plik