ToySPN Builder - SPN体験ミニツール

S-Box・P層・鍵加算で学ぶ現代ブロック暗号の仕組み

S-Box(4bit,全単射)?4ビット入力を別の4ビット値に置換する非線形変換表です。
0x0〜0xFの16個の値を重複なく並べてください。
線形暗号の弱点を補う重要な要素です。

0x0〜0xF の置換を入力(重複不可)。変更すると逆S-Boxは自動生成されます。
💡 全単射 = すべての入力が異なる出力に1対1対応(重複なし・欠落なし)

対応関係の可視化

入力 出力

P層(ビット置換,16bit)?16ビットのビット位置を入れ替える線形変換層です。
各ビットiをP[i]番目の位置に移動させます。
S-Boxで生じた変化をブロック全体に拡散させる役割があります。

ビット i(0..15)を P[i] 番目へ。全単射である必要があります。

対応関係の可視化

入力 出力

ラウンド設定

?暗号化を繰り返す回数です。
ラウンド数が多いほど安全性が高まりますが、処理時間も増えます。
一般的なブロック暗号は10〜14ラウンド程度です。
?暗号化・復号に使う秘密鍵です。
16進数4桁(16ビット)で指定します。
この鍵から各ラウンドで使う鍵を自動生成します。

暗号化 / 復号

ステップ詳細

なだれ効果テスト(Avalanche Effect)?入力の1ビットを変えたとき、出力が平均して何ビット変化するかを測定します。
理想的には約50%(8ビット)が変化するべきで、これが暗号の拡散性能を示します。
※アバランシェ効果とも呼ばれます。


        

学習コンテンツ

SPN(Substitution-Permutation Network)は、現代ブロック暗号の基本構造の一つです。

  • Substitution(置換): S-Boxによる非線形変換で、線形解読を困難にする
  • Permutation(転置): P層によるビット拡散で、局所的な変化を全体に広げる
  • 鍵加算: ラウンド鍵とのXORで秘密性を付与

これらを複数ラウンド繰り返すことで、強固な暗号化を実現します。AESもSPN構造を採用しています。

S-Box(Substitution Box)は、入力を非線形的に変換する lookup テーブルです。

なぜ非線形性が必要?

古典的なヒル暗号などの線形暗号は、行列演算のみで構成されるため、既知平文攻撃に弱いという致命的な欠陥があります。S-Boxは非線形変換を導入することでこの問題を解決します。

良いS-Boxの条件

  • 全単射(bijection): すべての入力が異なる出力に対応(復号可能性)
  • 差分耐性: 入力差から出力差を予測しにくい
  • 線形耐性: 入出力間の線形関係が少ない
  • SAC特性: 入力1ビット変化で出力の約半分が変化

P層(Permutation Layer)は、ビット位置を入れ替える線形変換です。

拡散(Diffusion)とは?

平文の1ビットの変化が、暗号文全体に影響を及ぼす性質を拡散と呼びます。S-Boxだけでは局所的な変換に留まるため、P層でビットをシャッフルして影響範囲を広げます。

設計のポイント

  • 全単射性: すべてのビット位置が一意に対応(可逆性)
  • 遠距離混合: 近いビット同士だけでなく、遠くのビットも混ぜる
  • 高速性: ハードウェア実装で配線のみで実現可能

本ツールのデフォルトP層は、ニブル単位で列方向に並び替える設計です。

マスター鍵から各ラウンドで使うラウンド鍵を生成する仕組みが鍵スケジュールです。

本ツールの簡易実装

k = rotate_left(k, (round % 5) + 1) ⊕ RC[round]
  • 回転: ビットを左シフトして拡散
  • ラウンド定数(RC): 各ラウンドで異なる定数とXOR

実用暗号では

AESなどでは、S-Box適用やより複雑な変換を含む強固な鍵スケジュールが使われます。関連鍵攻撃への耐性が重要です。

なだれ効果(アバランシェ効果)は、入力の小さな変化(1ビット)が出力の大きな変化(約50%のビット)を引き起こす性質です。

測定方法

  1. ランダムな平文を暗号化 → 暗号文C1
  2. 平文の1ビットだけ反転させて暗号化 → 暗号文C2
  3. C1 ⊕ C2 のハミング距離を計測
  4. 多数回試行して平均を取る

理想値

16ビットブロックの場合、平均8ビット(50%)が反転するのが理想です。これより少ないと拡散が不十分、多すぎても偏りがあります。

本ツールでヒストグラムを確認し、分布が中央(8付近)に集中しているか観察してください。

古典暗号の時代

  • シーザー暗号: 単純な文字シフト(線形)
  • ヴィジュネル暗号: 多表式置換だが周期性あり
  • ヒル暗号: 行列演算(線形代数攻撃に脆弱)

現代ブロック暗号

  • DES(1977): Feistel構造、56ビット鍵(現在は脆弱)
  • AES(2001): SPN構造、128/192/256ビット鍵(現在の標準)
  • その他: Blowfish, Twofish, Serpentなど

SPNとFeistel構造が現代ブロック暗号の二大潮流です。

⚠️ 注意: このツールは教育用であり、実運用には使用できません。

主な制限

項目 ToySPN Builder AES(実用暗号)
ブロックサイズ 16ビット 128ビット
鍵長 16ビット 128/192/256ビット
ラウンド数 8(デフォルト) 10/12/14ラウンド
S-Box設計 任意編集可能 数学的に最適化済み
鍵スケジュール 単純な回転+XOR S-Box適用含む複雑な変換

学習目的での使い方

  • S-Boxの全単射性を崩すと復号できなくなることを確認
  • P層の設計を変えてなだれ効果がどう変化するか観察
  • ラウンド数を減らすと拡散が不十分になることを体験

💡 各項目をクリックして詳細を展開してください。