SPネットワーク(置換順応ネットワーク)とは — ブロック暗号の定義・構造とS/Pボックスの役割

SPネットワーク(置換順応ネットワーク)の定義・構造とS/Pボックスの役割を詳解。AESなど実例と暗号設計での混乱・拡散、実装特性までわかりやすく解説。

著者: Leandro Alegsa

暗号学における SP-network(置換順応ネットワーク、SPN) は、AES(Rijndael)、3-Way、Kalyna、Kuznyechik、PRESENT、SAFER、SHARK、Square など多くのブロック暗号で使われる基本的な構成です。平文ブロックと鍵ブロックを入力として、代入箱(S-box)と順列箱(P-box)を交互に適用するいくつかの「ラウンド(層)」を経て暗号文ブロックを出力します。各ラウンドでは通常、ラウンド鍵を追加する操作(典型的には XOR)が挟まれます。

SPN の基本構造(S 層 / P 層 / 鍵の追加)

典型的な SP ネットワークは次の3つの処理を繰り返します。

  • S 層(Substitution layer): 小さなビット単位のブロックを置換するS-box群を並列に適用する層。非線形性を導入して暗号を強固にする役割がある。
  • P 層(Permutation layer): S-box の出力ビットを並べ替えて、次のラウンドの異なる S-box に分配する層。ビットを広く拡散させる(diffusion)役割を持つ。
  • 鍵の追加(AddRoundKey): ラウンドごとに導出されたラウンド鍵とブロックを何らかの群演算(通常は XOR)で結合する操作。

実際の実装では、これらを組み合わせたラウンド関数を複数回(十分な回数)繰り返すことで、シャノンの「混乱(confusion)」と「拡散(diffusion)」を達成します。

S-box(代入箱)の性質と設計指針

S-box は k ビットを入力して k ビットを出力する置換(多くのSPNでは同長の一対一対応=可逆)です。良い S-box は以下の特性を持つことが望まれます。

  • 可逆性(通常の SPN では必須)— 復号のために逆写像が存在すること。
  • 非線形性が高い — 線形近似に対する耐性(線形暗号解析に対抗)。
  • 差分均一性が小さい — 差分(入力差)に対する出力差の偏りが小さいこと(差分解析への耐性)。
  • 雪崩効果(avalanche) — 単一ビットの入力変化が出力の多くのビットを変換する性質。
  • 各出力ビットが入力ビットのほぼすべてに依存すること(広い相互依存性)。

実例:AES の S-box は 8 ビット→8 ビットの可逆な置換で、代数的に逆元を取りアフィン変換を施したもので、強い非線形性と差分特性を持ちます。一方、DES の S-box は 6 ビット→4 ビットで可逆ではなく、Feistel 構造で用いられるために設計上の要件が異なります。

P-box(順列箱)と拡散

P-box は全ビットの位置を並べ替える操作で、S 層の出力を次ラウンドの S 層入力へ広く分配します。良い P-box は、ある S-box の出力ビットができるだけ多くの別の S-box の入力に流れるように設計され、これにより短いラウンド数のうちにビット差が多数に拡散します。

拡散(diffusion)の直感的な理由:

  • 平文の 1 ビットを反転すると、その影響はまず当該 S-box の出力数ビットに現れる。
  • P-box によりこれらの出力ビットが複数の S-box に分配され、次ラウンドでさらに多くのビットに広がる。
  • 数ラウンド重ねることで最終的に暗号文全体が擬似ランダムに変化し、単一ビットの影響が全体に波及する(雪崩効果)。

ラウンド鍵と鍵スケジュール

多くの SPN では単一のマスター鍵から各ラウンドに使う「ラウンド鍵」を派生させる鍵スケジュールを持ちます。ラウンド鍵は通常、XOR のような可逆で効率的な演算でブロックに加えられます。設計上は鍵スケジュール自体も解析に対して弱点とならないよう注意が必要です。

一部の設計では S-box が鍵依存(キー入力によって変化)にされたり、S-box と鍵の結合がより複雑に行われることもありますが、基本的にはラウンド鍵の導入により鍵とデータの関係に「混乱」を与えます。

混乱と拡散(シャノンの原理)

  • 拡散: 平文の小さな変化がラウンドを重ねるごとに広がり、暗号文の多くのビットに影響するようにすることで、入力の統計的な構造が隠される。
  • 混乱: 鍵と暗号文との関係を複雑化し、鍵の単純な統計的表現や関係を隠す。ラウンド鍵の分散と S-box の非線形性が寄与する。
  • 結果として、既知平文攻撃、選択平文攻撃、選択暗号文攻撃などで得られた情報から鍵を回復することが困難になることを目標とする。

SPN と Feistel 構造の違い

S-box を使った Feistel ネットワークは外観上 SPN と似ていますが、設計上の制約が異なります。主な違い:

  • 可逆性の要件: SPN では各ラウンドに使われる S-box(全体のラウンド関数)は可逆である必要がある(復号のため)。一方 Feistel 構造は部分関数が可逆でなくても全体が可逆となるため、内部関数に一方向的な(非可逆の)設計を用いる余地がある。
  • 並列性: SPN は S 層が並列性を持つため、ハードウェアや幅広い SIMD/パラレルユニットを活用できれば高速に実装できる。一方、Feistel は左右半分を交互に処理するため内在的な直列性が大きい場合がある。
  • 設計の柔軟性: Feistel は S-box 出力サイズの変更(例:DES の 6→4)や非可逆性を許容するため、異なる設計上のトレードオフを取れることがある。

セキュリティ考慮(攻撃と防御)

SPN の安全性は主に S-box と P-box の組合せ、ラウンド数、鍵スケジュールの強さに依存します。代表的な解析手法とそれに対する対策例:

  • 差分解析(Differential cryptanalysis): S-box の差分特性を小さくし、P-box によって差分が広がるよう設計することで、確率的な差分伝播を低く抑える。
  • 線形解析(Linear cryptanalysis): S-box の非線形性を高め、線形近似のバイアスを小さくする。
  • 代数攻撃: S-box の代数的表現の単純さや鍵スケジュールの線形性を避け、複雑さを持たせる。

実際の暗号(例:AES)では、これらを考慮した設計と十分なラウンド数により、既知の現実的な攻撃に耐える安全性が達成されています。

実装面の注意点

  • ハードウェア実装: S-box をルックアップテーブル(LUT)で実装し、P-box を配線で処理することで高い並列化と性能を得やすい。
  • ソフトウェア実装: キャッシュタイミング攻撃に対しては、テーブル参照を用いる実装は脆弱になり得るため、定時間実装やテーブルレスな方法(算術・ビット演算ベース)を採用することがある。
  • メモリと速度のトレードオフ: 大きな S-box テーブルは高速だがメモリを消費する。対象環境(スマートカード vs 高性能CPU)での最適化は異なる。

まとめ

SP ネットワークは、S-box による非線形な代入と P-box によるビットの並べ替え(拡散)を組み合わせ、ラウンド鍵を加えることでシャノンの混乱と拡散を実現する汎用的かつ効率的なブロック暗号構成です。S-box・P-box の設計やラウンド数、鍵スケジュールの強度がセキュリティの要となり、実装環境に応じた最適化も重要です。



百科事典を検索する
AlegsaOnline.com - 2020 / 2025 - License CC3