[暗号] ファイステルネットワーク
ITC Advent Calendar 3日目.
今日から数日間に分けてブロック暗号の構造を解説します.
今日はファイステルネットワークについてです.
誰も興味ないとか知らねーです.
ファイステルネットワーク
ファイステルネットワークはファイステル構造, ファイステル暗号とも呼ばれ, ブロック暗号の構造の一種である.
殆どのブロック暗号は, 実装コストを効率化するために同一のラウンドを繰り返すようになっており, ファイステルネットワークはそれを実現する代表的な構造である.
他の構造としては, SPN構造がある.
1977年にIBMのホルスト・ファイステル(Horst Feistel)が開発したDESに基本構造として使われていたことからこう呼ばれている.
DES以降, FEAL, MISTY1, Camelliaなど, 多くのブロック暗号でこの構造が採用されている.
ラウンド
ファイステルネットワークでは, ラウンドと呼ばれる暗号化の1ステップを何度も繰り返すようになっており, 下図はファイステル構造における1ラウンドを図式化したものである.
なお, DES(ブロック長: 64bit)を例としている.
K: サブ鍵. 鍵スケジュールにより, 入力された64bit長の鍵から48bit長のサブ鍵が16個生成される.
F: ラウンド関数. 右側32bitとサブ鍵を元に左側32bitを暗号化するためのビット列を生成する関数.
1. 入力された平文(64bit)を2等分し, 32bitずつに分割する.
2. 右側32bitとサブ鍵をラウンド関数Fに入力し, 32bitのビット列を生成する.
3. ラウンド関数Fから出力された32bitのビット列と左側32bitのXORを取る.
これで1ラウンドとする.
なお, 暗号化された左側32bitは次のラウンドの右側32bitの入力, 暗号化されていない右側32bitは次のラウンドの左側32bitの入力となる.
ラウンドは16回繰り返され, その度に左側と右側が交換されるが, 最終ラウンドの後では交換を行わない.
また, 暗号化と復号が全く同じ構造で実現できるのがファイステルネットワークの特徴である.
ファイステルネットワークにおける1ラウンドでは, 右側32bitに対して何の処理も行わないため一見無駄に見えるが, これにより復号が保証されることになる.
入れ子型構造
MISTYでは, ラウンド関数の内部にさらにファイステルネットワークを組み込んでおり, これを入れ子型構造と呼ぶ.
MISTYでは3段階の入れ子型構造を取っており, これは差分解読法や線形解読法などの暗号解読法に対する証明可能安全性を実現し, 規模の削減にも効果がある.
変形ファイステルネットワーク
MARSでは, 入力を4分割し, それぞれの間で処理を行うような構造となっている.
一般的にn(n > 2)分割するファイステルネットワークを変形ファイステルネットワークと呼ぶ.
ブロック暗号のブロック長が大きい場合にラウンド関数のビット幅を小さくすることができる.