Przejdź do treści
HexaTransfer
Wróć do bloga
Szyfrowanie i bezpieczenstwo

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:

  1. Przeczytaj biały papier bezpieczeństwa. Wiarygodne usługi (Tresorit, Proton Drive, SwissTransfer, HexaTransfer) publikują dokładny tryb i metodę obsługi IV.
  2. Sprawdź kod klienta. Otwórz DevTools, przeszukaj pakiet JavaScript w poszukiwaniu AES-GCM lub aes-256-gcm. Powinieneś go wyraźnie znaleźć.
  3. 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