AES-256-GCM i 600 000 rund PBKDF2: wyjaśnienie
Co naprawdę oznaczają liczby z listy funkcji sejfu na zdjęcia i uczciwy opis tego, czego nie obejmują.
AES-256-GCM to metoda szyfrowania AES z kluczem 256-bitowym, używana w sposób zwany GCM. Warto zwrócić uwagę na część GCM: oprócz szyfrowania sprawdza dane, więc plik, przy którym ktoś manipulował, nie otworzy się, zamiast po cichu wrócić w błędnej postaci. PBKDF2 z 600 000 rund celowo powoli zamienia Twoje hasło w klucz, więc każda próba atakującego kosztuje 600 000 rund pracy. Ta liczba to publiczne zalecenie OWASP, a nie nasze.
Nic z tego nie chroni telefonu przejętego, gdy sejf jest otwarty, ani hasła, które zna ktoś inny. Szczegóły i ograniczenia opisujemy poniżej.
Listy funkcji sejfów na zdjęcia są pełne liczb: AES-256, GCM, 600 000 rund, PBKDF2. Podaje się je tak, jakby rozstrzygały sprawę, a większość czytelników rozsądnie je pomija. Warto poświęcić im dziesięć minut. Wiedząc, co robi każda z nich, odróżnisz konkretne twierdzenie od takiego, które tylko robi wrażenie. Ta strona wyjaśnia każdy termin prostymi słowami. Potem, w sekcji 8, opisuje, przed czym szyfrowanie nie chroni. To ta druga część zmienia decyzje.
1. Wersja skrócona
| Termin | Co robi |
|---|---|
| AES | Metoda szyfrowania. Opublikowany standard szyfrowania danych za pomocą klucza. |
| 256 | Rozmiar klucza w bitach. Na tyle duży, że wypróbowanie wszystkich kluczy jest niepraktyczne. |
| GCM | Sposób użycia AES, który sprawdza też manipulacje. Zmienione dane zostają wykryte, a nie po cichu zaakceptowane. |
| Nonce | Liczba używana jeden raz przy każdym szyfrowaniu. Nie może się powtórzyć z tym samym kluczem. |
| PBKDF2 | Proces, który zamienia hasło w klucz, celowo powoli. |
| 600 000 rund | Jak powoli. Każda próba atakującego kosztuje 600 000 rund pracy. |
| Sól | Losowe dane dodawane do hasła, aby atakujący nie mogli przygotować odpowiedzi z wyprzedzeniem i używać ich wobec wielu użytkowników. |
2. Czym jest AES-256
AES to skrót od Advanced Encryption Standard. To metoda szyfrowania opublikowana przez amerykański Narodowy Instytut Standardów i Technologii (NIST) w 2001 roku, po publicznym konkursie trwającym kilka lat. Nie jest tajna i nikt jej nie posiada. Konstrukcja jest publiczna. Eksperci z uczelni i branży badają ją od ponad dwudziestu lat i nie znaleźli praktycznego sposobu na złamanie pełnej metody.
Liczba 256 to rozmiar klucza w bitach. Wypróbowanie każdego możliwego klucza tej wielkości oznacza przeszukanie 2 do potęgi 256 możliwości. To nie kwestia czekania na szybsze komputery. To daleko poza zasięgiem tego, co zwykłe komputery kiedykolwiek mogłyby osiągnąć. W praktyce właśnie dlatego sama metoda prawie nigdy nie jest tym, co zawodzi.
Dokładnie dlatego „używamy AES-256” mówi mniej, niż się wydaje. To prawie minimum. Ciekawe pytania to: co jest szyfrowane, jak metoda jest używana i jak powstaje klucz.
3. Co dodaje GCM
Samo szyfrowanie zapewnia tajność danych: bez klucza nie da się ich odczytać. Samo w sobie nie obiecuje jednak, że dane są nienaruszone. Nie powie Ci, że to, co otwierasz, jest tym, co zostało zapisane.
Ta luka jest realna. Przy metodzie, która nie sprawdza danych, ktoś, kto może zmienić zapisany plik, może zmienić zaszyfrowane dane. Otwarcie dałoby inne, błędne dane, bez żadnego komunikatu o błędzie. Dostajesz dane z powrotem. Tyle że nie są to dane, które zostały zapisane, i nic Ci o tym nie mówi.
GCM dodaje kontrolę. Obok zaszyfrowanych danych tworzy wartość kontrolną, która jest weryfikowana przy każdym otwarciu danych. Z naszego dokumentu o bezpieczeństwie:
„Zmieniony bajt na dysku sprawia, że odszyfrowanie wyraźnie kończy się błędem, zamiast zwrócić subtelnie błędny tekst jawny. Dzięki temu »odszyfrowane« oznacza to samo co »niezmienione od zaszyfrowania«.”
To najbardziej przydatna rzecz, jakiej warto szukać na liście funkcji, bo tu widać precyzję. „AES-256” nazywa metodę. „AES-256-GCM” nazywa metodę i sposób jej użycia, a to tam wykrywanie manipulacji albo istnieje, albo nie.
4. Nonce i klasyczny błąd
Każde szyfrowanie w systemie GCM używa wartości nonce, czyli liczby używanej jeden raz. Nie musi być tajna. Musi być unikalna dla danego klucza.
Powtórz nonce z tym samym kluczem, a ochrona GCM poważnie się załamie. To nie rzadki przypadek brzegowy. To najczęstszy sposób, w jaki łamano prawdziwe systemy oparte na GCM, i wynika on ze skrótów przy ich budowie, a nie z jakiejkolwiek słabości AES.
Są dwa solidne sposoby, by mieć pewność, że się nie powtórzy. Pierwszy to nowa losowa liczba przy każdym szyfrowaniu. Tak robi Obscura Photo Vault dla pojedynczych plików: za każdym razem nowa 96-bitowa liczba losowa i 128-bitowa wartość kontrolna. Drugi to licznik, który w udowodniony sposób nigdy się nie powtarza. Tego używa nasz format dla dużych filmów. Łączy liczbę losową wybraną dla każdego pliku z numerem kawałka, więc żadne dwa kawałki w żadnym pliku nie mają tej samej wartości nonce.
Żadne z tych podejść nie jest bardziej poprawne od drugiego. Liczy się to, że aplikacja wybrała jedno celowo. Właśnie takie rzeczy pokazuje opublikowany dokument projektowy, a lista funkcji nie potrafi.
5. Twoje hasło to najsłabsze ogniwo
Klucz 256-bitowy ma 256 bitów losowości. Twoje hasło nie. Nawet dobre hasło złożone z kilku słów ma może 60 do 80 bitów, a typowe hasło dużo mniej. Gdyby hasło było używane bezpośrednio jako klucz, ogromny rozmiar klucza nie miałby znaczenia. Atakujący zgadywałby hasła, a nie klucze.
Proces zamiany hasła w klucz jest mostem. PBKDF2 bierze hasło i sól i przepuszcza je przez funkcję skrótu określoną liczbę razy, aby utworzyć klucz. Celem powtarzania jest koszt. Ty tworzysz klucz raz przy każdym odblokowaniu i ledwo zauważasz sekundę, którą to zajmuje. Atakujący, który testuje miliony prób, płaci ten koszt przy każdej z nich.
Tej liczby warto szukać i to ją najczęściej się pomija. Aplikacja może zgodnie z prawdą twierdzić, że używa AES-256, a jednocześnie zamieniać hasło w klucz w jednym kroku. Byłaby wtedy narażona dokładnie na ten atak polegający na zgadywaniu offline, przed którym ten proces ma chronić.
6. Dlaczego 600 000
Ta liczba nie jest przypadkowa i nie pochodzi od nas. OWASP Password Storage Cheat Sheet to najszerzej używane publiczne źródło w tej sprawie. Zaleca PBKDF2 z HMAC-SHA-256 przy 600 000 rund lub więcej. Tej liczby Obscura Photo Vault używa dla haseł sejfów.
Należą się do niej dwa uczciwe zastrzeżenia.
To ruchomy cel. Zalecane liczby rund rosną wraz z przyspieszaniem sprzętu. Obecna wartość pochodzi z testów na dzisiejszych układach graficznych. Liczba, która była w porządku kilka lat temu, teraz już nie jest, a dzisiejsza nie będzie w porządku zawsze. Traktuj opublikowaną liczbę rund jako twierdzenie z datą.
Mnoży Twoje hasło, ale go nie zastępuje. Rundy sprawiają, że każda próba kosztuje dużo więcej. Nie zmieniają liczby potrzebnych prób. Hasło wybrane z niewielkiego zbioru możliwości pozostaje słabe nawet po 600 000 rund, bo atakujący musi przejść tylko przez ten mały zbiór. Ten proces zyskuje czas proporcjonalnie do tego, jak trudne do odgadnięcia jest samo hasło.
Praktyczna rada dla każdego zaszyfrowanego sejfu jest więc nudna i słuszna: używaj długiego hasła z niepowiązanych słów i zapisz je w bezpiecznym miejscu. W aplikacji, w której klucz naprawdę powstaje z hasła, ta zapisana kopia jest jedyną istniejącą. Tego dotyczy nasz poradnik co się dzieje, gdy zapomnisz hasła do sejfu.
7. Sól
Sól to losowe dane dodawane do hasła, zanim stanie się kluczem. Jest przechowywana obok zaszyfrowanych danych. Nie jest tajna i nie musi być.
Jej zadaniem jest uniemożliwienie atakującym przygotowań z wyprzedzeniem. Bez soli atakujący mógłby raz obliczyć klucze dla listy popularnych haseł, a potem używać tej listy wobec każdego użytkownika aplikacji. Z unikalną losową solą dla każdego sejfu tę pracę trzeba wykonać od nowa dla każdego celu. Wspólny wysiłek wobec wielu użytkowników przestaje być możliwy.
Obscura Photo Vault używa 32-bajtowej losowej soli dla każdego sejfu, przechowywanej w nagłówku pliku sejfu.
8. Przed czym nic z tego nie chroni
Wszystko powyżej dotyczy danych w spoczynku: plików leżących w pamięci, z których nikt nie korzysta. To realna, przydatna ochrona. Jest też wąska. Sekcja 11 naszego dokumentu o bezpieczeństwie wymienia, co wykracza poza nią. Prostymi słowami:
- Telefon przejęty, gdy sejf jest otwarty. Aby pokazać Ci zdjęcie, aplikacja musi je odszyfrować. Klucz i czytelne zdjęcie są więc w pamięci. Wszystko, co działa w tym momencie wewnątrz aplikacji, ma dostęp do obu. Żadne szyfrowanie na poziomie aplikacji nie naprawi przejętego telefonu.
- Każdy, kto zna Twoje hasło. Szyfrowanie nie odróżni właściciela od kogoś, kto widział, jak wpisuje hasło, albo komu je powiedziano.
- Zrzuty ekranu, nagrywanie ekranu i zaglądanie przez ramię. To, co jest na ekranie, zostało już odszyfrowane. To wykracza poza zakres szyfrowania.
- Kopie zrobione gdzie indziej. Oryginał nadal w rolce aparatu, wersja wysłana w wiadomości, kopia zapasowa w chmurze zrobiona, zanim zdjęcie trafiło do sejfu. Zaszyfrowanie jednej kopii nic nie robi z pozostałymi.
- Fakt, że aplikacja istnieje. Szyfrowanie ukrywa zawartość. Nie ukrywa tego, że jest coś do ukrycia.
Piszemy o tym na stronie poświęconej zaletom tych elementów z prostego powodu: przy prawdziwej awarii metoda szyfrowania prawie nigdy nie jest tym, co zawiodło. Zwykle jest to jedna z pięciu rzeczy powyżej.
9. O określeniu „klasy wojskowej”
To określenie nie ma znaczenia technicznego. Zwykle odnosi się do AES, który jest publicznym standardem dostępnym dla każdego i nie jest zarezerwowany dla wojska. Używa go każdy duży system operacyjny, przeglądarka i komunikator.
Problem nie polega na tym, że to określenie jest fałszywe. Polega na tym, że niczego nie obiecuje. Nie nazywa metody, sposobu jej użycia, rozmiaru klucza ani procesu zamiany hasła w klucz. Może go więc zgodnie z prawdą użyć aplikacja, która szyfruje każdy plik, i taka, która szyfruje tylko swoje ustawienia.
To nie jest narzekanie na samo określenie. Opis może go używać i mimo to coś Ci powiedzieć. Twierdzenie staje się przydatne dla kogoś, kto chce je sprawdzić, dzięki temu, co następuje dalej: metodzie, trybowi, procesowi tworzenia klucza, liczbie rund i temu, co jest objęte. Opis, który kończy się na tym określeniu, niczego nie obiecał. Opis, który dalej wymienia te rzeczy, da się sprawdzić, niezależnie od tego, od czego się zaczął.
10. Częste pytania
Co oznacza AES-256-GCM?
AES to opublikowana metoda szyfrowania. AES-256 to jej wersja z kluczem 256-bitowym. GCM to sposób jej użycia, który dodatkowo sprawdza, czy przy danych nikt nie manipulował. Na co dzień najważniejsza jest właśnie ta kontrola. Zmieniony plik nie otworzy się, zamiast po cichu otworzyć się jako błędne dane.
Czym różni się AES-256 od AES-256-GCM?
Druga nazwa mówi, jak metoda jest używana, a nie tylko jaka to metoda. GCM dodaje wykrywanie manipulacji, więc zmienione dane zostają wykryte przy otwieraniu, zamiast po cichu wrócić w błędnej postaci.
Dlaczego aplikacje typu sejf na zdjęcia używają 600 000 rund PBKDF2?
Hasło jest krótkie i da się je odgadnąć. Klucz szyfrowania nie. Hasło trzeba więc zamienić w klucz procesem, który celowo jest powolny. Każda runda dokłada pracy do każdej próby atakującego. 600 000 rund to liczba zalecana dla tej metody, PBKDF2 z HMAC-SHA-256, przez OWASP Password Storage Cheat Sheet.
Czy szyfrowanie AES-256 jest bezpieczne?
AES-256 to publiczny standard. Eksperci badają go od ponad dwudziestu lat i nie znaleźli praktycznego sposobu na złamanie pełnej metody. W prawdziwych aplikacjach to rzadko metoda jest słabym punktem. Bardziej prawdopodobne problemy to błąd w sposobie jej użycia, hasło łatwe do odgadnięcia albo ktoś, kto dostanie się do telefonu, gdy jest odblokowany.
Czy AES-256 jest lepszy od AES-128?
Większy klucz daje większy zapas. Oba uważa się za bezpieczne wobec próbowania wszystkich kluczy przy dzisiejszych metodach i sprzęcie. Jest bardzo mało prawdopodobne, by w praktyce wybór między nimi przesądził o tym, czy aplikacja się sprawdzi.
Co oznacza „szyfrowanie klasy wojskowej”?
Nie ma znaczenia technicznego. Zwykle odnosi się do AES, który jest publicznym standardem dostępnym dla każdego i nie jest zarezerwowany dla wojska. Ponieważ to określenie nie nazywa metody, trybu ani rozmiaru klucza, może go użyć aplikacja, która szyfruje wszystko, i taka, która nie szyfruje prawie niczego.
Czy komputery kwantowe mogą złamać AES-256?
Znany kwantowy skrót, algorytm Grovera, mniej więcej o połowę zmniejsza siłę takiego klucza. Przy kluczu 256-bitowym nadal zostaje bardzo duży zapas. To jeden z powodów, dla których klucze 256-bitowe uważa się za rozsądny wybór na dłuższy czas. Rodzaj szyfrowania używany do wymiany kluczy w internecie ma z komputerami kwantowymi znacznie większy problem niż AES.
Czy przy 600 000 rund odblokowanie jest wolne?
Na nowoczesnym iPhonie zajmuje około sekundy, raz przy każdym odblokowaniu. O tę nierówność chodzi: raz prawie niezauważalne, miliony razy paraliżujące.
Czy więcej iteracji oznacza, że mogę użyć słabszego hasła?
Nie i to najczęstsze nieporozumienie. Więcej rund sprawia, że każda próba kosztuje więcej. Nie zmniejsza liczby prób potrzebnych do odgadnięcia słabego hasła. Krótkie hasło pozostaje słabe.
Źródła
- OWASP Password Storage Cheat Sheet, o kosztach obliczeniowych PBKDF2
- NIST FIPS 197, standard Advanced Encryption Standard
- Dokument o bezpieczeństwie Obscura Photo Vault, sekcje od 2 do 4 o prymitywach kryptograficznych i hierarchii kluczy
- Dokument o bezpieczeństwie, sekcja 11, o tym, co wykracza poza model zagrożeń
Obscura Photo Vault
Zaszyfrowany sejf na zdjęcia dla iPhone'a. Zdjęcia i filmy są szyfrowane na Twoim urządzeniu za pomocą AES-256-GCM. Nie ma kont, serwerów ani analityki, a aplikacja nie wymaga połączenia z siecią. Jeśli zapomnisz hasła, nikt nie odzyska zawartości, łącznie z nami.
Zobacz w App Store →