SPネットワーク
暗号学では、SP-network、または置換順応ネットワーク(SPN)は、AES(Rijndael)、3ウェイ、Kalyna、Kuznyechik、PRESENT、SAFER、SHARK、およびSquareなどのブロック暗号アルゴリズムで使用される一連の連結された数学演算のことです。
このようなネットワークは、平文と鍵のブロックを入力とし、代入箱(S-boxes)と順列箱(P-boxes)を交互にいくつかの「ラウンド」または「レイヤー」を適用して暗号文ブロックを生成します。S ボックスと P ボックスは入力ビットの (サブ) ブロックを出力ビットに変換します。これらの変換は、排他的または(XOR)やビット単位の回転など、ハードウェアで実行するのが効率的な操作であることが一般的です。鍵は、各ラウンドで導入され、通常は、それから派生した「ラウンド鍵」の形で導入される。(いくつかのデザインでは、S ボックス自体がキーに依存します)。
復号化は、単純に処理を逆にする(SボックスとPボックスの逆数を使用し、丸いキーを逆順に適用する)ことで行われます。
S-boxは、小さなビットブロック(S-boxの入力)を別のビットブロック(S-boxの出力)で置換します。この置換は、反転可能性を保証するために、1対1でなければなりません(したがって、復号化)。特に、出力の長さは入力の長さと同じでなければなりません(右の図は、入力と出力の4ビットを持つS-boxを持っています)が、これは、例えばDES(Data Encryption Standard)のように、長さを変更することができる一般的なS-boxとは異なります。S-boxは通常、単にビットの並べ替えではありません。むしろ、良いS-boxは、1つの入力ビットを変更すると出力ビットの約半分が変更されるという性質を持っています(または雪崩効果)。また、各出力ビットはすべての入力ビットに依存するという特性を持っています。
P-boxは、すべてのビットの並べ替えです。あるラウンドのすべてのS-boxの出力を受け取り、そのビットを並べ替え、次のラウンドのS-boxに供給します。良いP-boxは、任意のS-boxの出力ビットが可能な限り多くのS-box入力に分配されるという特性を持っています。
各ラウンドでは、ラウンドキー(例えば、SボックスやPボックスを用いたいくつかの単純な操作で得られたキーから得られた)が、何らかのグループ操作、典型的にはXORを用いて結合される。
S-box は置換暗号として考えられ、P-box は転置暗号として考えられます。しかし、S-boxとP-boxの交互ラウンドをいくつか持つよく設計されたSPネットワークは、すでにシャノンの混乱と拡散の特性を満たしています。
- 拡散の理由は以下の通りです。平文の 1 ビットを変更すると、それが S-box に送られ、その出力は数ビットごとに変化しますが、これらの変更は P-box によって複数の S-box に分散されます。これを数回繰り返すことで、各ビットが数回前後に変化するため、最後には暗号文は疑似ランダムに完全に変化していることになります。特に、ランダムに選択された入力ブロックについて、i 番目のビットを反転させた場合、j 番目の出力ビットが変化する確率は、i と j のいずれかで約半分になります。逆に、暗号文の1ビットを変更して復号化しようとすると、結果は元の平文とは全く異なるメッセージとなります。
- 混乱の理由は、拡散と全く同じです:鍵の1ビットを変更すると丸い鍵のいくつかが変更され、すべての丸い鍵のすべての変更がすべてのビットに拡散し、非常に複雑な方法で暗号文が変更されます。
- 攻撃者が何らかの方法で 1 つの暗号文に対応する 1 つの平文を手に入れたとしても (既知の平文攻撃、さらに悪いことには選択された平文や選択された暗号文攻撃)、混乱と拡散により、攻撃者は鍵を回復することが困難になります。
S-box(DESなど)を使用するFeistelネットワークはSPネットワークとよく似ていますが、状況によってはこれかこれかの違いがあります。ある程度の混乱と拡散に対しては、SPネットワークの方が「固有の並列性」が高いため、実行単位の多いCPUではFeistelネットワークよりも高速に計算できます。ほとんどのスマートカードのような実行単位の少ないCPUでは、この固有の並列性を利用することはできません。また、SP暗号ではS-boxは(復号化を行うために)反転可能である必要がありますが、Feistelの内部関数にはそのような制限はなく、一方向関数として構築することができます。