DES 鍵の拡張ラッピングのラッピング鍵導出

ラッピング鍵は、現在 CCA で使用されているものとまったく同じ鍵ですが、1 つの異なる点があります。 基本鍵自体 (マスター鍵または鍵暗号鍵) を使用する代わりに、ICSF は、その基本鍵から導出する鍵を使用します。 導出鍵は、標準的な CCA の方法で適用される制御ベクトルを持つことになり、結果の鍵を、新規フォーマットのターゲット鍵トークンをラップするために使用します。 導出鍵を使用する理由は、既存の CCA 機能を使用したこのラップ方式に対する攻撃を確実に不可能にすることです。 例えば、ラッピング鍵をその導出鍵の代わりに使用した場合に、ラップされた鍵を ECB CCA 鍵トークンにコピーすると、攻撃が可能になったことが観察されています。

鍵は、NIST 規格の SP 800-108「Recommendation for Key Derivation Using Pseudorandom Functions」(2009 年 10 月) で定義されている方式を使用して導出させます。 導出は、疑似乱数関数 (PRF) HMAC-SHA256 を使用する、「カウンター・モードの KDF」という方式を使用します。 この方式は、使用されるアルゴリズムの導出鍵に十分な強度を提供します。

HMAC アルゴリズムは、以下のように定義されます。
HMAC(K, text) = H((K0 XOR opad ) || H((K0 XOR ipad) || text))

ここで、opad は、K0 と同じ長さのストリングを形成するために繰り返される定数 0x5C であり、ipad は、K0 と同じ長さのストリングを形成するために繰り返される定数 0x36 です。 鍵 K の長さがハッシュ関数の入力ブロック・サイズの長さと等しい場合 (SHA-256 の場合は 512 ビット)、K0 は K の値に設定されます。そうでない場合、K0 はハッシュまたは埋め込み (あるいはその両方) により K から形成されます。

KDF を指定すると、2 バイトのストリングであるラベルとコンテキストを含む入力がオプションで必要になります。 コンテキストは使用されません。 ラベルには、CCA が将来さまざまな目的で使用する可能性がある他の導出と区別するために、この鍵の使用法に関する情報が含まれます。 導出プロセスのセキュリティーは、導出鍵のセキュリティーおよび HMAC 関数と KDF 関数そのものに基づいているので、このラベル・ストリングが特定の最小サイズである必要はありません。 NIST 文書で指定されている分離標識バイト 0x00 がラベルに続きます。

ラベル値は、この鍵ラッピング・プロセスの導出に固有となるように定義されます。 つまり、同じ KDF を使用する将来のどのような設計においても、ICSF はラベルに異なる値を使用しなければならないということです。 このラベルは、以下の ASCII 文字で構成される 16 バイトの値です。
ENHANCEDWRAP2010  (X‘454E4841 4E434544 57524150 32303130’)
SP 800-108 で定義されているカウンター・モード KDF のパラメーターは、以下のとおりです。
  • 固定値:
    • h (PRF の出力の長さ) = 256 ビット
    • r (カウンターのビット単位の長さ) = 32 - カウンターは符号なしの 4 バイト値になります。
  • 入力:
    • KI (入力鍵) は、導出元の鍵になります。
    • ラベルは、上に示す値になります (ASCII ENHANCEDWRAP2010)。
    • 区切りバイト 0x00 には、ラベル値が続きます。
    • コンテキストは、ヌル・ストリングになります (コンテキストは使用されません)。
    • L は生成される導出鍵の長さになり、256 の次の倍数まで切り上げられます。
    • PRF (疑似乱数関数) は HMAC-SHA256 になります。

KDF 関数は、256 の倍数である疑似乱数ビット・ストリングを生成し、生成される鍵に必要なだけのビット数を使用します。 鍵のビットは、疑似乱数ストリングの左端ビット側から取られ、右側の未使用のすべてのビットは廃棄されます。