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

Podstawowy algorytm uwierzytelnionego szyfrowania z powiązanymi danymi (AEAD) jest najczęściej używanym algorytmem do szyfrowania danych i sprawdza się w większości przypadków.

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.
  • Symetryczność: 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 jawnym dają różne teksty zaszyfrowane. Osoby atakujące nie mogą wiedzieć, który tekst zaszyfrowany odpowiada danemu tekstowi jawnemu. Jeśli chcesz tego uniknąć, użyj deterministycznego algorytmu AEAD zamiast tego.

Powiązane dane

Algorytm AEAD można użyć do powiązania tekstu zaszyfrowanego z określonymi powiązanymi danymi. Załóżmy, że masz bazę danych z polami user-id i encrypted-medical-history. W takim przypadku podczas szyfrowania pola encrypted-medical-history można użyć pola user-id jako powiązanych danych. Uniemożliwia to osobie atakującej przeniesienie historii medycznej z jednego użytkownika na drugiego.

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

Wybierz typ klucza

W większości przypadków zalecamy używanie AES128_GCM, ale w zależności od potrzeb dostępne są różne typy kluczy. AES128 zapewnia 128-bitowe zabezpieczenia, a AES256 – 256-bitowe.

Podczas wybierania trybu należy wziąć pod uwagę 2 ważne ograniczenia dotyczące bezpieczeństwa:

  1. QPS: ile wiadomości jest szyfrowanych za pomocą tego samego klucza?
  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 z dobrymi ograniczeniami.
    • Key-committing.
  • AES-EAX (AES128_EAX, AES256_EAX) jest nieco mniej konserwatywny i nieco szybszy niż AES128_CTR_HMAC_SHA256.
    • Nie jest to key-committing MLGR.
  • AES-GCM (AES128_GCM, AES256_GCM) jest zwykle najszybszym trybem z najściślejszymi limitami liczby wiadomości (232) i rozmiaru wiadomości (ok. 64 GB na wiadomość). Po przekroczeniu tych limitów AES-GCM ulega katastrofalnemu awarii, ujawniając tekst jawny i część uwierzytelniającą klucza wewnętrznego AES-GCM.
    • AES-GCM nie jest ani odporny [ABN], ani key-committing [GLR]. Można wygenerować tekst zaszyfrowany, który można odszyfrować za pomocą 2 różnych kluczy. Może to prowadzić do praktycznych ataków [DGRW]. Jeśli klucz jest wybierany przez przeciwnika, dokładnie sprawdź model zagrożeń.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] jest odporny na przypadkowe niewłaściwe użycie nonce i jest prawie tak wydajny jak AES-GCM. Limity liczby wiadomości i rozmiaru wiadomości w przypadku AES-GCM-SIV z losowymi wektorami inicjującymi są znacznie wyższe niż w przypadku AES-GCM. Po przekroczeniu tych limitów AES-GCM-SIV ulega mniej katastrofalnej awarii: ujawnia tylko, że 2 wiadomości są równe. AES-GCM-SIV jest bezpieczniejszy w użyciu, ale w praktyce jest rzadziej stosowany.
    • Limity losowych nonce:
      • 232 wiadomości, w których każdy tekst jawny ma maksymalnie 8 GiB.
      • 248 wiadomości, w których każdy tekst jawny ma maksymalnie 32 MiB.
      • 264 wiadomości, w których każdy tekst jawny ma maksymalnie 128 KiB.
    • Aby używać go w Javie, zainstaluj Conscrypt.
    • Nie jest to key-committing ADGKLS.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) ma znacznie wyższy limit liczby wiadomości i rozmiaru wiadomości niż AES-GCM, ale gdy ulegnie awarii (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 to key-committing LGR.

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

Gwarancje bezpieczeństwa

Implementacje AEAD oferują:

  • zabezpieczenia CCA2,
  • co najmniej 80-bitową siłę uwierzytelniania,
  • możliwość zaszyfrowania co najmniej 232 wiadomości o łącznej długości 250 bajtów. Żaden atak z maksymalnie 232 wybranymi tekstami jawnymi lub wybranymi tekstami zaszyfrowanymi nie ma prawdopodobieństwa powodzenia większego niż 2-32.

Przykłady użycia

Zobacz Chcę zaszyfrować dane i powiązać tekst zaszyfrowany z jego kontekstem.