Chiavi

In molte librerie di crittografia, le chiavi sono spesso identificate solo da alcune sequenze di byte. Prendi ad esempio le funzioni OpenSSL come EVP_EncryptInit_ex, che, oltre ai byte della chiave, richiede anche l'IV per il calcolo; oppure il metodo javax.crypto Cipher.init, che accetta sia una sequenza di chiavi sia un AlgorithmParameterSpec. Spesso è difficile utilizzare correttamente queste funzioni e passare i parametri sbagliati può avere conseguenze gravi.

Tink mira a essere diverso e si aspetta che una chiave sia sempre composta sia dal materiale della chiave sia dai metadati (i parametri).

Ad esempio, una chiave AEAD completa specifica in dettaglio il funzionamento della crittografia e della decrittografia: specifica le due funzioni \(\mathrm{Enc}\) e\(\mathrm{Dec}\)e come viene codificata la crittografia (ad es. vettore di inizializzazione, seguito dalla crittografia, seguito dal tag).

Una chiave AES in Tink non è solo una sequenza di byte di lunghezza 128, 192 o 256 bit, ma memorizza anche le specifiche dell'algoritmo corrispondenti necessarie per calcolare la chiave, sotto forma di oggetto parameters. Di conseguenza, una chiave AES-EAX completa e una chiave AES-GCM completa sono oggetti diversi in Tink.