Uwierzytelnianie uwierzytelnione za pomocą powiązanych danych (AEAD)

Podstawowa funkcja szyfrowania uwierzytelnionego z danymi powiązanymi (AEAD) jest najczęściej używaną podstawową funkcją szyfrowania danych i spełnia większość potrzeb.

Szyfrowanie AEAD ma te właściwości:

  • Secrecy o tekście jawnym nie wiadomo nic poza jego długością.
  • Autentyczność: nie można zmienić zaszyfrowanego tekstu jawnego, który jest podstawą tekstu zaszyfrowanego, bez wykrycia.
  • Symetryczne: szyfrowanie tekstu jawnego i odszyfrowywanie tekstu zaszyfrowanego odbywa się za pomocą tego samego klucza.
  • Randomizacja: szyfrowanie jest randomizowane. Dwie wiadomości z tym samym tekstem jawny generują różne teksty zaszyfrowane. Hakerzy nie mogą wiedzieć, który szyfrogram odpowiada danemu tekstowi jawnemu. Jeśli chcesz tego uniknąć, użyj deterministycznego AEAD.

Powiązane dane

Algorytm AEAD może służyć do powiązania tekstu zaszyfrowanego z określonymi danymi powiązanymi. Załóżmy, że masz bazę danych z polami user-idencrypted-medical-history. W tym scenariuszu user-id może być używane jako dane powiązane podczas szyfrowania encrypted-medical-history. Zapobiega to przenoszeniu historii medycznej przez atakującego z jednego konta użytkownika na inne.

Dane powiązane są opcjonalne. Jeśli podano dane powiązane, odszyfrowanie się powiedzie tylko wtedy, gdy te same dane powiązane zostaną przekazane do wywołań funkcji szyfrujących i odszyfrowujących.

Wybierz typ klucza

W większości przypadków zalecamy używanie klucza AES128_GCM, ale w zależności od potrzeb możesz wybrać inny typ klucza (aby uzyskać 256-bitowe zabezpieczenia, zastąp poniżej AES128 kluczem AES256). Ogólnie:

  • AES128_CTR_HMAC_SHA256 z 16-bajtowym wektorem inicjującym (IV) to najbardziej konserwatywny tryb z dobrymi ograniczeniami.
  • AES128_EAX jest nieco mniej konserwatywny i nieco szybszy niż AES128_CTR_HMAC_SHA256.
  • AES128_GCM jest zwykle najszybszym trybem, który ma najsurowsze ograniczenia dotyczące liczby wiadomości i ich rozmiaru. Jeśli te limity długości tekstu jawnego i powiązanych danych (poniżej) zostaną przekroczone, algorytm AES128_GCM przestanie działać i ujawni materiał klucza.
  • AES128_GCM_SIV jest prawie tak samo szybki jak AES128_GCM. Ma takie same limity jak AES128_GCM w zakresie liczby wiadomości i rozmiaru wiadomości, ale po przekroczeniu tych limitów działa w mniej katastrofalny sposób: może ujawnić tylko fakt, że dwie wiadomości są identyczne. Dzięki temu jest bezpieczniejszy niż AES128_GCM, ale w praktyce jest rzadziej używany. Aby używać tej funkcji w Javie, musisz zainstalować Conscrypt.
  • XChaCha20Poly1305 ma znacznie większy limit liczby wiadomości i rozmiaru wiadomości niż AES128_GCM, ale gdy zawiedzie (co jest bardzo mało prawdopodobne), ujawnia też materiał klucza. Nie jest akcelerowany sprzętowo, więc w sytuacjach, w których akceleracja sprzętowa jest dostępna, może działać wolniej niż tryby AES.

Gwarancje bezpieczeństwa

Implementacje AEAD oferują:

  • zabezpieczenia CCA2,
  • Siła uwierzytelniania musi wynosić co najmniej 80 bitów.
  • Możliwość zaszyfrowania co najmniej 232 wiadomości o łącznym rozmiarze 250 bajtów. Żaden atak z wybranymi tekstami jawnymi lub szyfrogramami (maksymalnie 232) nie ma prawdopodobieństwa powodzenia większego niż 2-32.

Przykłady użycia

Chcę zaszyfrować danepowiązać tekst zaszyfrowany z jego kontekstem.