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.