Szyfrowanie uwierzytelnione zwraca dwie rzeczy naraz: szyfrogram, który ukrywa treść, oraz znacznik, który pozwala odbiorcy wykryć manipulację. Dawniej te funkcje składano z osobnych części, a złe kombinacje dawały subtelne awarie. Współczesne konstrukcje ustalają kombinację i warunki, w których ona obowiązuje. Słowo uwierzytelnione odnosi się tu do znacznika, nie do osoby.

Obie gwarancje dotyczą chronionego pakietu i niczego poza nim.

Dwie gwarancje w jednej konstrukcji

Szyfrowanie odpowiada, czy obserwator może to przeczytać; integralność odpowiada, czy to zmieniono. Tunel potrzebuje obu, bo zmieniona treść jest gorsza niż nieczytelna. AEAD określa, jak połączyć je pod jednym kluczem, wraz z danymi powiązanymi, które są uwierzytelniane, ale nie szyfrowane. Odbiorca odrzuca dane wejściowe, które nie przechodzą sprawdzenia.

Dane powiązane wiążą widoczne pola ze sprawdzeniem. Które pola to obejmuje, zależy od protokołu, i nie jest to obietnica, że każdy adres zewnętrzny stał się tajny: pole może być objęte znacznikiem i nadal czytelne w sieci.

Nonce nie jest drobiazgiem

Klucze i nonce trzeba obsługiwać poprawnie, a ponowne użycie nonce kończy się źle. Powtórzenie nonce pod jednym kluczem może ujawnić relacje między wiadomościami i całkowicie podważyć gwarancję integralności. Dlatego protokół, a nie aplikacja, odpowiada za generowanie i kolejność nonce.

To warunek gwarancji, a nie wskazówka implementacyjna. Niedbałe nonce nie dają ogłaszanej właściwości.

Ochrona przed powtórzeniem to osobny stan

Ważny stary pakiet można powtórzyć, choć jego znacznik pozostaje nienaruszony, bo znacznik dowodzi autentyczności, a nie świeżości. Obsługa powtórzeń wymaga własnego stanu: numerów sekwencji, okna i reguły, co akceptować. Ten stan żyje w implementacji protokołu i nie ma nic wspólnego z wyborem szyfru. Tunel z silnym szyfrowaniem i bez ochrony przed powtórzeniem nadal akceptuje wczorajszy ruch.

Oba mechanizmy współpracują, nie będąc tym samym, i jeden może być poprawny, gdy drugiego brakuje.

Czego znacznik ci nie mówi

Tożsamość drugiej strony ustalają certyfikaty lub wcześniej udostępnione klucze, a nie to, że szyfr jest uwierzytelniony. Trasowanie, rozwiązywanie nazw i polityka logów operatora leżą poza granicą kryptograficzną. Udane wynegocjowanie algorytmu mówi tylko, że oba końce zgodziły się co do zestawu, to kwestia zgodności, a nie jakości implementacji po którejkolwiek stronie.

Dla użytkowników: wybierajcie utrzymywaną i wspieraną konfigurację protokołu. AEAD jest właściwością tej konfiguracji, a nie zaproszeniem do budowania szyfrowania ręcznie wokół tunelu.

Zapiszcie, jaki zestaw wynegocjowano, czy ochrona przed powtórzeniem jest aktywna i jak identyfikowane są strony. Trzy fakty, trzy różne gwarancje.

Powiązane artykuły