Em muitas bibliotecas criptográficas, as chaves geralmente são identificadas por apenas algumas sequências
de bytes. Considere, por exemplo, funções do OpenSSL, como EVP_EncryptInit_ex
,
que, além dos bytes de chave, também precisa do IV para computação; ou o
método javax.crypto Cipher.init
, que recebe uma sequência de chaves e um
AlgorithmParameterSpec
. Essas funções geralmente são difíceis de usar corretamente
e transmitir os parâmetros errados pode ter consequências graves.
O objetivo do Tink é ser diferente, e ele espera que uma chave sempre consista do material da chave e dos metadados (os parâmetros).
Por exemplo, uma chave AEAD completa especifica exatamente como a criptografia e a descriptografia funcionam. Ela especifica as duas funções \(\mathrm{Enc}\) e \(\mathrm{Dec}\)e como o texto criptografado é codificado (por exemplo, vetor de inicialização, seguido pela criptografia, seguido pela tag).
Uma chave AES no Tink não é apenas uma sequência de bytes de comprimento 128, 192 ou 256 bits, mas também armazena as especificações do algoritmo correspondente necessárias para calcular a chave, na forma de um objeto parameters. Portanto, uma chave AES-EAX completa e uma chave AES-GCM completa são objetos diferentes no Tink.