Chaves

Em muitas bibliotecas criptográficas, as chaves geralmente são identificadas apenas por algumas sequências de bytes. Considere, por exemplo, funções OpenSSL, como EVP_EncryptInit_ex, que além dos bytes de chave, também precisam do IV para computação, ou do método Cipher.init do javax.crypto, que usa uma sequência de chaves e um AlgorithmParameterSpec. Muitas vezes, essas funções são difíceis de usar corretamente, e passar os parâmetros errados pode ter sérias consequências.

O objetivo do Tink é diferente e espera que uma chave sempre consista no material da chave e nos metadados (os parâmetros).

Uma chave AEAD completa, por exemplo, especifica em detalhes 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 128, 192 ou 256 bits, mas também armazena as especificações de algoritmo correspondentes 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.