Claves

En muchas bibliotecas criptográficas, las claves suelen identificarse solo por algunas secuencias de bytes. Considera, por ejemplo, las funciones de OpenSSL, como EVP_EncryptInit_ex, que, además de los bytes de clave, también necesita el IV para el procesamiento, o el método javax.crypto Cipher.init, que toma una secuencia de claves y un AlgorithmParameterSpec. A menudo, estas funciones son difíciles de usar correctamente, y pasar los parámetros incorrectos puede tener consecuencias graves.

El objetivo de Tink es ser diferente y espera que una clave siempre consista en el material de clave y los metadatos (los parámetros).

Por ejemplo, una clave AEAD completa especifica con exactitud 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 y, luego, de la etiqueta).

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