Chiavi

In molte librerie crittografiche, le chiavi sono spesso identificate solo da alcune sequenze di byte. Prendi ad esempio le funzioni OpenSSL come EVP_EncryptInit_ex, che a parte i byte di chiave, richiede anche l'IV per il calcolo; o il metodo javax.crypto Cipher.init, che prende sia una sequenza di chiavi che un AlgorithmParameterSpec. Queste funzioni sono spesso difficili da usare correttamente e trasmettere i parametri sbagliati può avere gravi conseguenze.

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

Una chiave AEAD completa, ad esempio, specifica nel dettaglio come funzionano la crittografia e la decrittografia: specifica le due funzioni \(\mathrm{Enc}\) e \(\mathrm{Dec}\)e come viene codificato il testo di crittografia (ad esempio il 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 archivia anche le specifiche dell'algoritmo corrispondenti necessarie per calcolare la chiave, sotto forma di oggetto parametri. Pertanto, una chiave AES-EAX completa e una chiave AES-GCM completa sono oggetti diversi in Tink.