Feistel構造

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Feistel構造(フェイステルこうぞう、Feistel Structure)は、ブロック暗号の構成法の一種である。ほとんどのブロック暗号は、実装コストを効率化するため、同一のラウンド関数を繰り返す、繰返し暗号になっていて、Feistel構造は繰返し暗号の代表的な構成法である。他の構成としてはSPN構造がある。

概要[編集]

1977年にIBMホルスト・フェイステルが開発したDESの構造からFeistel構造と呼ばれる。暗号に求められる性質の一つに、暗号文から平文を復号できること(復号可能性)があるが、Feistel構造は、逆変換が自分自身と同じ形になる性質がある(インボルーション)ために、ラウンド関数に任意の関数を用いても復号可能性が保証できるという特徴がある。

DES以降、FEALMISTY1Camelliaなど多くのブロック暗号でFeistel構造は採用されている。

構造[編集]

基本的な構造[編集]

Feistel構造

DESで採用された構造は、2つのラウンド変数L_r, R_r(初期入力をL_0, R_0とする)とラウンド鍵k_rおよびラウンド関数Fから以下の計算を繰り返し施す。

暗号化

R_{r+1}=L_r\oplus{}F(R_r,k_r)
L_{r+1}=R_r

復号

L_{r}=R_{r+1}\oplus{}F(L_{r+1},k_r)
R_{r}=L_{r+1}

暗号化と復号で使用するラウンド関数Fは、暗号化の出力を復号の入力に代入して式変形すれば容易に確認できるが、任意の関数を用いても復号可能性が保証される。暗号化と復号の違いは、ラウンド鍵k_rの順番が逆になるだけである。

言うまでもないが、安全なブロック暗号を任意の関数で保障できるわけではない。

入れ子型構造[編集]

MISTYでは、ラウンド関数Fの内部にさらにFesitel構造を組み込んでいる。これを入れ子型構造と呼ぶ。MISTYでは3段階の入れ子構造をとっている。入れ子構造は差分攻撃および線形攻撃に対する証明可能安全性を実現するとともに、回路規模の削減に効果がある。

変形Feistel構造[編集]

MARSでは、入力を4つに分割しそれぞれの間で計算を行うような構造で構成されている。一般にn (n>2)分割する場合を変形Feistel構造と呼ぶ。ブロック暗号全体のブロック長が大きい場合にラウンド関数のビット幅を小さくすることができる。

利点・欠点[編集]

Feistel構造以外に広く知られている構造にSPN構造がある。SPN構造と比較した場合の利点および欠点を述べる。

利点[編集]

  • 解析実績が多い
  • ラウンド関数の選択の自由度が大きい
  • 暗号化と復号のルーチンを共通化でき(ラウンド鍵の順番だけを入れ替えればよい)、コードサイズ・回路規模などの点で、ソフトウェアおよびハードウェアでの実装性に優れる
  • 一度に処理するデータ長がブロック長の半分(変形Feistel構造の場合は半分以下)になるため、ラウンド関数のビット幅を小さくすることができる。これはSボックスの個数を少なく出来る等を意味し、回路規模や消費電力など点で、ハードウェアでの実装性に優れる

欠点[編集]

  • 1ラウンドあたり攪拌されるのはブロックのうち一部のみである
  • SPN構造と同様の攪拌性を得るためにはラウンド数を増やす必要がある

関連項目[編集]