要約

  • RFC 3394 は n 個の64ビットデータブロックを n+1 個の暗号文ブロックにした。完全性レジスタは6パスを巡り、後付けパディングではなく先頭の変換状態になった。
  • アンラップは、回収したレジスタが期待する初期値と一致するときだけ鍵データを返せた。この証拠は身元、権限、鮮度、KEKの保管、後続利用を証明しない。

入力より出力が一ブロック長い。その差が RFC 3394 の物語だった。追加ブロックは処理の外側に置かれた包装材ではない。荷物と一緒に全工程を通り、最後に出口を守る状態だった。

文書は2002年9月に Informational RFC として公開され、NIST の AES Key Wrap 仕様をインターネットの記録へ移した。本文の多くが NIST 由来で、安全性の主張は米国政府によるものだと明記した。新たな発見を装うのではなく、再現可能な変換を提供したのである。

「鍵データ」は一つの鍵だけでなく、複数の鍵や関連情報も含められた。KEK は AES の128、192、256ビットを使える。入力は少なくとも二つの64ビットブロックに分けられ、出力には同じ大きさのブロックが一つ増えた。

データは R[1] から R[n] に入り、別の A レジスタが初期値を持った。全 R を6回巡るため、AES 操作は 6n 回となる。各段階で A | R[i] を暗号化し、下半分を新しい R[i]、上半分とカウンタ t の XOR を新しい A にした。

最後の A が C[0] になった。暗号化後に追加された詰め物ではなく、すべてのブロックと位置に関与した状態である。データ改変、誤った KEK、順序変更、異なる IV 契約があれば、逆方向の計算は期待した出発点を回復できないはずだった。

アンラップは演算とカウンタを逆順にした。しかし得られた R はまだ候補でしかない。回復した A が適切な初期値なら出力でき、違えばエラーを返して鍵データを一切返してはならない。完全性検査は、実装がこの出口規則を守って初めて権限を持つ。

既定 IV は64ビットすべてに A6 を繰り返した値だった。RFC はこれが回復した場合に破損データである確率を 2^-64 としたが、それは構成の仮定内の評価である。実測事故率でも、送信者署名でも、周囲の鍵管理が安全だったという保証でもない。

成功が示すのは暗号文、KEK、変種、IV の整合性である。対称 KEK から人間の作成者は分からない。権限、再送でないこと、KEK が複製されていないこと、回復した鍵が次のアルゴリズムと用途に合うことも分からない。漏えいした KEK は完全に受理される包みを作れる。

テストベクトルが証明する範囲もバイト変換に限られる。サイドチャネル耐性、隔離、エラーの一様性、運用上の秘密管理は別の証拠が必要だ。RFC 自身、KEK が侵害されればそれで保護したすべてのデータが露出し得ると警告した。

元の入力領域は n >= 2 で64ビットの倍数だった。他の完全性範囲や長さに備え、代替初期値の余地が用意された。A は固定装飾ではなく、将来の契約を置く面だった。

RFC 5649 は Key Wrap with Padding でその面を使った。AIV は32ビット定数と32ビット長を結合し、アンラップ時には定数、妥当な長さ、ゼロパディングを検査する。一ブロック向けの特別経路もある。長さについて新しい主張をするため、受領証も変えた。

RFC 3565、JOSE、COSE は後にプロトコル識別子を加えた。識別子は変種と KEK サイズを選ばせるが、A を身元証明にはせず、KW と KWP を交換可能にもしない。正誤表は文言、配列添字、古い参照を直すが、6パスと解放境界は変えない。

Lu Heng の最小初期仕様という原則で見れば、ブロック、状態、カウンタ、パス、IV、失敗規則だけを共通化した節度が分かる。保管と権限は実際にそれを所有するシステムに残した。稼働コードの優位はさらに、失敗時に実装が本当にデータを出さないという運用証拠を求める。

追加レジスタは、もっともらしいバイトと解放された鍵を分けた。その権限は重要だが狭い。包みが期待した内部形状へ戻ったことは言えても、誰が内容を受け取るべきか、開いた後に成功したかまでは言えなかった。

出典