キー

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

Tink は、鍵マテリアルとメタデータ(パラメータ)の両方から常に構成されるキーを想定しています。

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

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