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

Podstawowa funkcja szyfrowania uwierzytelnionego z danymi powiązanymi (AEAD) jest najczęściej używaną 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 tej zmiany.
  • Symetryczne: szyfrowanie tekstu jawnego i odszyfrowywanie tekstu zaszyfrowanego odbywa się przy użyciu 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 zamiast tego 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.

Powiązane dane są opcjonalne. Jeśli określono dane powiązane, odszyfrowanie powiedzie się tylko wtedy, gdy te same dane powiązane zostaną przekazane do wywołań funkcji szyfrowania i odszyfrowywania.

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. AES128 zapewnia 128-bitowe bezpieczeństwo, a AES256 – 256-bitowe.

Wybierając tryb, należy wziąć pod uwagę 2 główne ograniczenia związane z bezpieczeństwem:

  1. QPS: ile wiadomości jest zaszyfrowanych tym samym kluczem?
  2. Rozmiar wiadomości: jak duże są wiadomości?

Obsługiwane typy kluczy:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) z 16-bajtowym wektorem inicjującym (IV) to najbardziej konserwatywny tryb o dobrych granicach.
    • Zatwierdzanie klucza.
  • AES-EAX (AES128_EAX, AES256_EAX) jest nieco mniej konserwatywny i nieco szybszy niż AES128_CTR_HMAC_SHA256.
    • Nie jest to kluczowe zobowiązanie MLGR.
  • AES-GCM (AES128_GCM, AES256_GCM) jest zwykle najszybszym trybem z najbardziej rygorystycznymi limitami liczby wiadomości (232) i rozmiaru wiadomości (ok. 64 GB na wiadomość). Gdy te limity zostaną przekroczone, algorytm AES-GCM ulegnie awarii, co spowoduje wyciek tekstu jawnego i części uwierzytelniającej wewnętrzny klucz AES-GCM.
    • AES-GCM nie jest odporny na ataki [ABN] ani nie zapewnia bezpieczeństwa klucza [GLR]. Można wygenerować szyfrogram, który można odszyfrować za pomocą dwóch różnych kluczy. Może to prowadzić do praktycznych ataków [DGRW]. Jeśli klucz jest wybierany przez przeciwnika, dokładnie przeanalizuj model zagrożeń.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) jest prawie tak szybki jak AES-GCM. Ma takie same limity liczby wiadomości i rozmiaru wiadomości jak AES-GCM, ale po ich przekroczeniu działa w mniej katastrofalny sposób: może ujawnić tylko fakt, że 2 wiadomości są identyczne. Dzięki temu jest bezpieczniejszy w użyciu niż AES-GCM, ale w praktyce jest rzadziej stosowany. Aby używać tej funkcji w Javie, musisz zainstalować Conscrypt.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) ma znacznie wyższy limit liczby wiadomości i rozmiaru wiadomości niż AES-GCM, ale gdy zawodzi (co jest bardzo mało prawdopodobne), ujawnia też materiał klucza. Nie jest akcelerowany sprzętowo, więc w sytuacjach, w których dostępna jest akceleracja sprzętowa, może być wolniejszy niż tryby AES.
    • Nie jest kluczem LGR.

Dowiedz się więcej o formacie przesyłania tekstu zaszyfrowanego AEAD.

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 łącznej wielkości 250 bajtów; Żaden atak z maksymalnie 232 wybranymi tekstami jawnymi lub wybranymi szyfrogramami nie ma prawdopodobieństwa powodzenia większego niż 2-32.

Przykłady użycia

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