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

Podstawowy model szyfrowania uwierzytelniania z powiązanymi danymi (AEAD) to najczęściej używany element podstawowy szyfrowania danych i odpowiedni do większości zastosowań.

AEAD ma te właściwości:

  • Tajność: poza długością tekstu nie są znane żadne informacje.
  • Autentyczność: nie można zmienić zaszyfrowanego tekstu jawnego, na którym opiera się tekst szyfrowany, bez wykrycia.
  • Symetryczny: szyfrowanie tekstu zwykłego i odszyfrowywania tekstu zaszyfrowanego odbywa się przy użyciu tego samego klucza.
  • Kolejność losowa: szyfrowanie jest losowe. Dwie wiadomości z tym samym tekstem jawnym generują różne teksty zaszyfrowane. Osoby przeprowadzające atak nie wiedzą, który tekst odpowiada tekstowi jawnemu. Jeśli chcesz tego uniknąć, użyj Deterministycznego AEAD.

Powiązane dane

AEAD może służyć do powiązania tekstu szyfrowania z konkretnymi powiązanymi danymi. Załóżmy, że masz bazę danych z polami user-id i encrypted-medical-history. W tym scenariuszu podczas szyfrowania encrypted-medical-history można używać user-id jako danych powiązanych. Dzięki temu osoba przeprowadzająca atak nie będzie mogła przenosić historii medycznej z jednego użytkownika do drugiego.

Wybierz typ klucza

Do większości zastosowań zalecamy klucz AES128_GCM. Istnieją jednak różne typy kluczy dla różnych potrzeb (na potrzeby zabezpieczeń 256-bitowych zastąp AES128 AES256 poniżej). Ogólnie:

  • AES128_CTR_HMAC_SHA256 z 16-bajtowym wektorem inicjującym (IV) to najbardziej zachowawczy tryb z odpowiednimi granicami.
  • AES128_EAX jest nieco mniej zachowawczy i nieco szybszy niż AES128_CTR_HMAC_SHA256.
  • AES128_GCM to zwykle najszybszy tryb, który oferuje najbardziej rygorystyczne limity liczby wiadomości i rozmiaru wiadomości. Po przekroczeniu tych limitów dotyczących tekstu zwykłego i powiązanych danych (poniżej) funkcja AES128_GCM przestanie działać i wyciek materiał klucza.
  • AES128_GCM_SIV działa prawie tak samo szybko jak AES128_GCM, ale osiąga bardzo dobre granice dla dużej liczby wiadomości, ale jest nieco mniej ugruntowana. Aby użyć 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 mało prawdopodobne jest), wyciekuje również materiał kluczowy. Nie jest to akceleracja sprzętowa, więc w sytuacjach, gdy akceleracja sprzętowa jest dostępna, może działać wolniej niż w przypadku trybów AES.

Gwarancje bezpieczeństwa

Implementacje AEAD zapewniają:

  • 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 tekstami szyfrowanymi ma prawdopodobieństwo sukcesu większe niż 2–32.

Przykłady użycia

Zobacz: Chcę szyfrować dane i powiązać tekst szyfrowany z jego kontekstem.