W wielu bibliotekach kryptograficznych klucze są często identyfikowane tylko za pomocą niektórych sekwencji bajtów. Rozważ na przykład funkcje OpenSSL, takie jak EVP_EncryptInit_ex
, która oprócz bajtów klucza wymaga również IV do obliczeń, lub metoda javax.crypto Cipher.init
, która przyjmuje zarówno sekwencję klucza, jak i AlgorithmParameterSpec
. Z takich funkcji często trudno jest prawidłowo korzystać, a podanie nieprawidłowych parametrów może mieć poważne konsekwencje.
Tink chce być inny i oczekuje, że klucz zawsze będzie składać się z kluczowego materiału i metadanych (parametrów).
Pełny klucz AEAD dokładnie określa, jak działa szyfrowanie i odszyfrowanie – określa 2 funkcje \(\mathrm{Enc}\) i \(\mathrm{Dec}\)oraz sposób kodowania tekstu zaszyfrowanego (np. wektor inicjalizacji, a następnie szyfrowanie i tag).
Klucz AES w Tink to nie tylko sekwencja bajtów o długości 128, 192 lub 256 bitów, ale też odpowiednie specyfikacje algorytmu potrzebne do obliczenia klucza w postaci obiektu parameters. Dlatego pełny klucz AES-EAX i pełny klucz AES-GCM to różne obiekty w Tink.