Klucze

W wielu bibliotekach kryptograficznych klucze są często identyfikowane tylko przez sekwencje bajtów. Rozważmy na przykład funkcje OpenSSL takie jak EVP_EncryptInit_ex, które oprócz bajtów kluczy wymagają też IV do obliczeń, lub metody Javax.crypto Cipher.init, która pobiera sekwencję zarówno klucza, jak i AlgorithmParameterSpec. Użycie tych funkcji często jest trudne, a przekazywanie nieprawidłowych parametrów może mieć poważne konsekwencje.

Tink chce, aby klucz był inny i zawsze oczekujeł, że klucz zawsze będzie zawierał zarówno materiał klucza, jak i metadane (parametry).

Na przykład pełny klucz AEAD szczegółowo wyjaśnia działanie szyfrowania i odszyfrowywania – określa 2 funkcje \(\mathrm{Enc}\) i\(\mathrm{Dec}\)oraz sposób kodowania tekstu szyfrowanego (np. wektor inicjujący, po którym następuje tag).

Klucz AES w Tink nie jest sekwencją bajtów o długości 128, 192 lub 256 bitów, ale przechowuje też odpowiednie specyfikacje algorytmu niezbędne do obliczenia klucza w postaci obiektu parametrów. Dlatego pełny klucz AES-EAX i pełny klucz AES-GCM to różne obiekty w Tink.