Zaszyfrowana wiadomość może być poufna, a jednocześnie podatna na niezauważalną modyfikację
Samo szyfrowanie odpowiada przede wszystkim na pytanie „czy ktoś może odczytać treść?”. To nie jest automatycznie to samo co „czy ktoś może zmienić treść bez wykrycia?”. Historycznie wiele konstrukcji zapewniało poufność bez wbudowanego uwierzytelnienia, a błędne łączenie szyfru i kontroli integralności prowadziło do podatności. Współczesne protokoły często stosują AEAD — authenticated encryption with associated data — które w jednej konstrukcji zapewnia szyfrowanie oraz tag weryfikujący autentyczność i integralność danych. TLS 1.3 wymaga właśnie szyfrów AEAD. Ciekawostka polega na tym, że „nikt nie potrafi przeczytać bitów” nie oznacza jeszcze „nikt nie potrafi ich sensownie zmienić”.
Poufność i integralność są osobnymi własnościami
Jeśli szyfr przekształca tekst jawny w nieczytelny szyfrogram, możemy osiągnąć poufność. Napastnik nadal może jednak zmieniać bity szyfrogramu, usuwać fragmenty, zamieniać kolejność albo podmieniać całe wiadomości. To, czy odbiorca wykryje taką ingerencję, zależy od konstrukcji. W niektórych trybach określone modyfikacje szyfrogramu prowadzą do przewidywalnych zmian po odszyfrowaniu. Dlatego szyfrowanie bez mechanizmu autentyczności nie daje ogólnej gwarancji integralności.
Tag autentyczności odpowiada na inne pytanie niż szyfr
Konstrukcje AEAD generują oprócz szyfrogramu także tag. Odbiorca przed zaakceptowaniem wiadomości sprawdza tag na podstawie klucza, nonce i danych związanych z rekordem. Jeśli ktoś zmieni chronione dane bez znajomości klucza, weryfikacja powinna się nie udać z bardzo wysokim prawdopodobieństwem. W praktyce aplikacja musi traktować nieprawidłowy tag jak całkowitą porażkę uwierzytelnienia, a nie jak „tekst z drobnym błędem”.
Associated data może pozostać jawne, ale nadal być uwierzytelnione
Nazwa AEAD zawiera dodatkową ciekawą własność. Niektóre informacje, np. nagłówki potrzebne do routingu lub identyfikacji rekordu, nie muszą być szyfrowane. Mogą jednak zostać włączone do obliczenia tagu jako associated data. Odbiorca widzi je jawnie, lecz potrafi sprawdzić, czy zostały zmienione. To pokazuje, że poufność i autentyczność można stosować do różnych części komunikatu niezależnie.
TLS 1.3 uprościł model przez wymaganie AEAD
RFC 8446 stwierdza, że w TLS 1.3 wszystkie szyfry rekordów są modelowane jako AEAD. Zamiast pozostawiać protokołowi szeroką kombinację osobnych trybów szyfrowania i MAC, współczesny projekt wymaga konstrukcji łączących te własności w jasno określony sposób. Nie usuwa to wszystkich możliwych błędów — nadal krytyczne są nonce, klucze i poprawna obsługa porażki weryfikacji — ale redukuje liczbę niebezpiecznych kombinacji.
„Jest zaszyfrowane” to za mało informacji o bezpieczeństwie
Gdy aplikacja deklaruje, że „dane są szyfrowane AES-em”, wciąż nie wiemy, w jakim trybie, jak zapewniana jest integralność, jak zarządzany jest nonce i co dzieje się po błędzie autentyczności. Bezpieczeństwo nie jest właściwością nazwy algorytmu. Jest właściwością całej konstrukcji i protokołu. Rozróżnienie poufności od integralności jest jednym z najważniejszych przykładów tej zasady.
Odszyfrowanie i użycie danych przed sprawdzeniem taga może zniweczyć sens AEAD
Schemat uwierzytelnionego szyfrowania ma dostarczać plaintext dopiero po zaakceptowaniu informacji uwierzytelniającej. Jeśli aplikacja zacznie przetwarzać częściowo odszyfrowane dane, wykona na ich podstawie operację albo zwróci szczegółowy błąd przed zakończeniem weryfikacji, może stworzyć dodatkowy kanał informacji mimo użycia poprawnego algorytmu. Specyfikacje AEAD definiują operację otwarcia jako całość: wejściem jest ciphertext, nonce, associated data i tag, a wynikiem plaintext albo błąd. Ta kolejność jest elementem modelu bezpieczeństwa, nie tylko kwestią estetyki API. To kolejny motyw przewodni tej podkategorii: silny prymityw kryptograficzny może utracić swoje własności, gdy otaczający kod rozbije atomową operację na kroki i ujawni stan pośredni.
AEAD nie ukrywa wszystkiego: długość i rytm ruchu mogą nadal być widoczne
Uwierzytelnione szyfrowanie chroni treść i wykrywa manipulację w zakresie objętym tagiem, ale nie jest automatycznym systemem anonimowości ani maskowania metadanych. Obserwator sieci może często widzieć, kiedy pakiety lub rekordy są przesyłane, w jakim kierunku oraz jakie mają przybliżone rozmiary, nawet jeśli nie potrafi odczytać payloadu. TLS może stosować padding rekordów, lecz nie eliminuje wszystkich informacji o charakterystyce ruchu. To kolejna lekcja o precyzyjnych gwarancjach: poufność plaintextu, integralność, uwierzytelnienie stron, ukrywanie długości i anonimowość to osobne cele. AEAD bardzo elegancko łączy pierwsze dwa, ale nie należy dopisywać mu właściwości, których konstrukcja nie obiecuje.