多くの暗号ライブラリでは、キーは多くの場合、一部のバイト シーケンスでのみ識別されます。たとえば、鍵バイトのほかに、計算用に IV を必要とする EVP_EncryptInit_ex などの OpenSSL 関数や、鍵シーケンスと AlgorithmParameterSpec の両方を受け取る Javax.crypto メソッド Cipher.init について考えてみます。このような関数は多くの場合、正しく使用するのが困難であり、誤ったパラメータを渡すと、深刻な結果をもたらす可能性があります。

Tink は異なるものを目指しており、キーは常にマテリアルとメタデータ(パラメータ)の両方で構成されていることを前提としています。

たとえば、完全な AEAD 鍵は、暗号化と復号の仕組みを正確に指定します。2 つの関数 \(\mathrm{Enc}\) と\(\mathrm{Dec}\)、暗号テキストのエンコード方法を指定します(例: 初期化ベクトル、その後に暗号化、タグ)。

Tink の AES 鍵は、長さが 128 ビット、192 ビット、または 256 ビットのバイト シーケンスであるだけでなく、鍵の計算に必要なアルゴリズム仕様をパラメータ パラメータの形式で格納します。したがって、完全な AES-EAX 鍵と完全な AES-GCM 鍵は Tink 内の異なるオブジェクトです。