Podstawowe szyfrowanie hybrydowe łączy wydajność szyfrowania symetrycznego z wygodą kryptografii klucza publicznego (asymetrycznego). Każdy może zaszyfrować dane za pomocą klucza publicznego, ale tylko użytkownicy mający klucz prywatny mogą odszyfrować dane.
W przypadku szyfrowania hybrydowego nadawca generuje nowy klucz symetryczny do szyfrowania tekstu jawnego każdej wiadomości w celu wygenerowania tekstu szyfrowania. Ten klucz symetryczny jest zasłonięty kluczem publicznym odbiorcy. W przypadku odszyfrowywania hybrydowego klucz symetryczny jest odblokowywany przez odbiorcę, a następnie używany do odszyfrowania tekstu szyfrowania w celu odzyskania pierwotnego tekstu jawnego. Szczegółowe informacje o tym, jak przechowywać lub przesyłać tekst szyfrowany razem z herbatą klucza, znajdziesz w sekcji Format przewodu hybrydowego szyfrowania Tink.
Szyfrowanie hybrydowe ma następujące właściwości:
- Tajność: nikt nie będzie w stanie uzyskać żadnych informacji o zaszyfrowanym tekście (z wyjątkiem jego długości), chyba że ma dostęp do klucza prywatnego.
- Asymetria: tekst szyfrowania można szyfrować za pomocą klucza publicznego, ale do odszyfrowania wymagany jest klucz prywatny.
- Kolejność losowa: szyfrowanie jest losowe. 2 wiadomości z tym samym tekstem jawnym nie będą generowały tego samego tekstu szyfrowanego. Dzięki temu atakujący nie wiedzą, który tekst szyfrowany odpowiada danemu tekstowi jawnemu.
Szyfrowanie hybrydowe jest przedstawiane w Tink jako para elementów podstawowych:
- HybridEncrypt – szyfrowanie
- HybridDecrypt do odszyfrowywania.
Parametr informacji o kontekście
Oprócz tekstu jawnego szyfrowanie hybrydowe akceptuje też dodatkowy parametr context_info
, który zwykle jest danymi publicznymi wynikającymi z kontekstu, ale powinien być powiązany z wynikowym tekstem szyfrowanym. Oznacza to, że tekst szyfrowania umożliwia potwierdzenie integralności informacji kontekstowych, ale nie gwarantujemy ich tajności ani autentyczności. Rzeczywiste informacje kontekstowe mogą być puste lub mieć wartość null, ale aby zagwarantować poprawne odszyfrowanie wynikowego tekstu szyfrowanego, podczas odszyfrowywania należy podać tę samą wartość informacji kontekstowych.
Konkretna implementacja szyfrowania hybrydowego może wiązać informacje kontekstowe z tekstem szyfrowanym na różne sposoby, na przykład:
- Użyj
context_info
jako powiązanego źródła danych do szyfrowania symetrycznego AEAD (por. RFC 5116). - Użyj
context_info
jako danych wejściowych „CtxInfo” dla HKDF (jeśli implementacja wykorzystuje HKDF jako funkcję derywacji klucza, patrz RFC 5869).
Wybierz typ klucza
W większości przypadków zalecamy używanie typu klucza DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
. Ten typ klucza implementuje standard hybrydowego szyfrowania klucza publicznego (HPKE) zgodnie z opisem w RFC 9180. HPKE składa się z mechanizmu pokrywania kluczy (KEM), funkcji derywacji klucza (KDF) oraz uwierzytelnionego szyfrowania z użyciem algorytmu powiązanych danych (AEAD).
Firma DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
zatrudnia przede wszystkim:
- KEM: Diffie–Hellman nad Curve25519 i HKDF-SHA-256, aby uzyskać udostępniony klucz.
- KDF: HKDF-SHA-256 do uzyskania kontekstu nadawcy i odbiorcy.
- AEAD: AES-256-GCM z 12-bajtowymi liczbami jednorazowymi wygenerowanymi zgodnie ze standardem HPKE.
Inne obsługiwane typy kluczy HPKE to m.in.:
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM
Więcej informacji o algorytmach KEM, KDF i AEAD znajdziesz w RFC 9180.
Chociaż nie jest już to zalecane, Tink obsługuje też niektóre odmiany ECIES, zgodnie z opisem w normie ISO 18033-2 firmy Victor Shoup. Poniżej znajdziesz kilka obsługiwanych typów kluczy ECIES:
ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
Minimalne właściwości
- Zwykły tekst i informacje kontekstowe mogą mieć dowolną długość (w zakresie 0,.232 bajtów)
- Ochrona przed adaptacyjnymi atakami wybranymi przez tekst szyfrowany
- 128-bitowe zabezpieczenia dla schematów opartych na krzywych eliptycznych
Przykłady użycia
Zobacz, jak chcę wymieniać dane.