Claves

En muchas bibliotecas criptográficas, las claves se suelen identificar solo por algunas secuencias de bytes. Por ejemplo, considera las funciones de OpenSSL como EVP_EncryptInit_ex, que, aparte de los bytes de claves, también necesitan el IV para el procesamiento o el método Cipher.init de java.crypto, que toma una secuencia de claves y un AlgorithmParameterSpec. Esas funciones suelen ser difíciles de usar correctamente, por lo que pasar los parámetros incorrectos puede tener consecuencias graves.

El objetivo de Tink es diferente y espera que la clave siempre esté formada por material de clave y metadatos (los parámetros).

Una clave AEAD completa, por ejemplo, especifica con detalle cómo funcionan la encriptación y la desencriptación: especifica las dos funciones \(\mathrm{Enc}\) y\(\mathrm{Dec}\)y cómo se codifica el texto cifrado (p.ej., el vector de inicialización, seguido de la encriptación, seguido de la etiqueta).

Una clave AES en Tink no es solo una secuencia de bytes de 128, 192 o 256 bits de longitud, sino que también almacena las especificaciones de los algoritmos correspondientes que se necesitan para calcular la clave, en forma de objeto parameters. Por lo tanto, una clave completa de AES-EAX y una clave completa de AES-GCM son objetos diferentes de Tink.