在許多加密編譯程式庫中,鍵通常只會透過某些位元組序列來識別。舉例來說,請考慮 EVP_EncryptInit_ex
等 OpenSSL 函式,除了金鑰位元組之外,也需要 IV 來進行運算;或者,請考慮 javax.crypto 方法 Cipher.init
,該方法會同時使用金鑰序列和 AlgorithmParameterSpec
。這類函式通常不易正確使用,而且傳遞錯誤的參數可能會造成嚴重後果。
Tink 的目標是提供不同的服務,因此預期鍵一律會包含金鑰內容和中繼資料 (參數)。
舉例來說,完整的 AEAD 金鑰會明確指定加密和解密的運作方式,包括 \(\mathrm{Enc}\) 和\(\mathrm{Dec}\)這兩個函式,以及密文的編碼方式 (例如初始化向量、加密和標記)。
Tink 中的 AES 金鑰不僅是長度為 128、192 或 256 位元的位元組序列,還會以 參數物件形式儲存計算金鑰所需的對應演算法規格。因此,完整的 AES-EAX 金鑰和完整的 AES-GCM 金鑰在 Tink 中是不同的物件。