Klucze

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.