Chaves

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.