Cryptography-feistel-block-cipher

提供:Dev Guides
移動先:案内検索

Feistelブロック暗号

Feistel Cipherは、ブロック暗号の特定のスキームではありません。 これは、多くの異なるブロック暗号が派生する設計モデルです。 DESはFeistel Cipherの一例です。 Feistel暗号構造に基づく暗号化システムは、暗号化と復号化の両方に同じアルゴリズムを使用します。

暗号化プロセス

暗号化プロセスは、プレーンテキストの複数ラウンドの処理で構成されるFeistel構造を使用します。各ラウンドは、「置換」ステップとそれに続く置換ステップで構成されます。

Feistel構造は、次の図に示されています-

Feistel Structure

  • 各ラウンドへの入力ブロックは、左半分と右半分をLとRで表すことができる2つの半分に分割されます。
  • 各ラウンドで、ブロックの右半分、Rは変更されずに通過します。 ただし、左半分のLは、Rと暗号化キーに依存する操作を実行します。 まず、キーKとRの2つの入力を受け取る暗号化関数「f」を適用します。 この関数は、出力f(R、K)を生成します。 次に、数学関数の出力をLとXORします。
  • DESなどのFeistel暗号の実際の実装では、各ラウンドで暗号化キー全体を使用する代わりに、暗号化キーからラウンド依存キー(サブキー)が派生します。 つまり、これらのサブキーはすべて元のキーに関連していますが、各ラウンドでは異なるキーが使用されます。
  • 各ラウンドの最後の置換ステップは、変更されたLと変更されていないRを交換します。 したがって、次のラウンドのLは現在のラウンドのRになります。 そして、次のラウンドのRは、現在のラウンドの出力Lです。
  • 上記の置換と置換のステップは「ラウンド」を形成します。 ラウンド数は、アルゴリズム設計によって指定されます。
  • 最後のラウンドが完了すると、2つのサブブロック「R」と「L」がこの順序で連結され、暗号文ブロックが形成されます。

Feistel Cipherの設計で難しい部分は、ラウンド関数「f」の選択です。 破壊不可能なスキームであるためには、この関数には、議論の範囲を超えたいくつかの重要なプロパティが必要です。

復号化プロセス

Feistel暗号の復号化プロセスはほぼ同じです。 平文のブロックで開始する代わりに、暗号文ブロックはFeistel構造の開始点に送られ、その後のプロセスは、与えられた図で説明したものとまったく同じです。

このプロセスはほとんど同じであり、まったく同じではないと言われています。 復号化の場合、唯一の違いは、暗号化で使用されるサブキーが逆の順序で使用されることです。

Feistel Cipherの最後のステップでの「L」と「R」の最終的な交換は不可欠です。 これらが交換されない場合、結果の暗号文は同じアルゴリズムを使用して復号化できませんでした。

ラウンド数

Feistel Cipherで使用されるラウンドの数は、システムに必要なセキュリティによって異なります。 ラウンドの数が多いほど、システムの安全性が高まります。 しかし同時に、ラウンド数が増えると、暗号化および復号化プロセスの効率が遅くなります。 したがって、システムのラウンド数は、効率とセキュリティのトレードオフに依存します。