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

Primitive Authenticated Encryption with Associated Data (AEAD) jest najpopularniejszym primitivem do szyfrowania danych i spełnia większość potrzeb.

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

  • Secrecy o tekstach zwykłych wiadomo tylko ich długość.
  • Autentyczność: nie można zmienić zaszyfrowanego tekstu jawnego bez wykrycia.
  • Symetryczne: szyfrowanie tekstu zwykłego i odszyfrowywanie tekstu zaszyfrowanego odbywa się za pomocą tego samego klucza.
  • Randomizacja: szyfrowanie jest losowe. 2 wiadomości z tym samym tekstem jawnym dają różne teksty zaszyfrowane. Hakerzy nie mogą wiedzieć, który tekst zaszyfrowany odpowiada danemu tekstowi jawnemu. Jeśli chcesz tego uniknąć, użyj zamiast tego deterministycznego AEAD.

Powiązane dane

AEAD może służyć do wiązania tekstu zaszyfrowanego z konkretnymi powiązanymi danymi. Załóżmy, że masz bazę danych z polami user-idencrypted-medical-history. W tym scenariuszu user-id może być używany jako dane powiązane podczas szyfrowania encrypted-medical-history. Zapobiega to przenoszeniu historii medycznej z jednego konta na drugie.

Wybieranie typu klucza

Chociaż w większości przypadków zalecamy użycie AES128_GCM, istnieją różne typy kluczy do różnych potrzeb (aby uzyskać bezpieczeństwo na poziomie 256 bitów, poniżej zastąp AES128 wartością AES256). Ogólnie:

  • AES128_CTR_HMAC_SHA256 z 16-bajtowym wektorem inicjalizacji (IV) to najbardziej zachowawczy tryb z dobrymi granicami.
  • AES128_EAX jest nieco mniej zachowawczy i nieco szybszy niż AES128_CTR_HMAC_SHA256.
  • AES128_GCM to zwykle najszybszy tryb, który ma najsurowsze limity liczby i rozmiaru wiadomości. Jeśli przekroczysz te limity dotyczące długości danych w postaci zwykłej i powiązanych z nimi danych (poniżej), algorytm AES128_GCM nie zadziała i wyciekną kluczowe materiały.
  • AES128_GCM_SIV jest prawie tak szybki jak AES128_GCM. Ma te same limity co AES128_GCM dotyczące liczby i rozmiaru wiadomości, ale gdy te limity zostaną przekroczone, powoduje mniej katastrofalne skutki: może tylko ujawnić, że 2 wiadomości są równe. Dzięki temu jest bezpieczniejsza niż AES128_GCM, ale w praktyce jest rzadziej używana. Aby używać tego w Javie, musisz zainstalować Conscrypt.
  • XChaCha20Poly1305 ma znacznie większy limit liczby wiadomości i rozmiaru wiadomości niż AES128_GCM, ale gdy wystąpi błąd (bardzo rzadko), również wycieka materiał klucza. Nie jest ona przyspieszana sprzętowo, więc może być wolniejsza niż tryby AES w sytuacjach, w których dostępna jest akceleracja sprzętowa.

Gwarancje bezpieczeństwa

Implementacje AEAD zapewniają:

  • Zabezpieczenia CCA2.
  • Siła uwierzytelniania co najmniej 80-bitowa.
  • Możliwość zaszyfrowania co najmniej 232 wiadomości o łącznej długości 2 50 bajtów. Żadna z ataków 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: szyfrowanie danych i wiązanie tekstu zaszyfrowanego z jego kontekstem.