Affine CipherLab

古典暗号「アフィン暗号」を学習・体験できるツール

暗号化 (Encrypt)

暗号文

復号 (Decrypt)

復号結果

総当たり解読 (Crack)

候補結果

📊 score=総合スコア(高いほど良い) | hits=英単語数 | chi=文字頻度一致度(低いほど良い)

座学 (Learn)

定義

アフィン暗号は以下で定義されます。ただし、n=26とします。
暗号化: Enc(m) = (a·m + b) mod n
復号: Dec(c) = a⁻¹·(c − b) mod n

なぜ a と n の互いに素が重要か

gcd(a,n)=1 を満たさないと逆元 a⁻¹ が存在せず、復号できません。
n=26の場合、aは{1,3,5,7,9,11,15,17,19,21,23,25}である必要があります。

直感的な理解

アフィン暗号の式 Enc(m) = (a·m + b) mod n において:

  • b:文字を一定数だけシフト(ずらす)
  • a:文字の対応関係を変更
    • a=1 の場合:Enc(m) = (m + b) mod n となり、シフト暗号と同じ
    • a≠1 の場合:単純なシフトではなく、より複雑な文字変換になる

シーザー暗号・シフト暗号との関係

シーザー暗号シフト暗号は、アフィン暗号の特殊例です:

  • シーザー暗号: a=1, b=3 の場合(古代ローマのカエサルが使用)
  • シフト暗号: a=1, b=任意の値(0~25)の場合

つまり、Enc(m) = (1·m + b) mod n = m + b mod n となり、単純な文字シフトになります。

総当たり解読の仕組み

このツールの総当たり解読は以下の手順で動作します:

  1. 全パラメーター試行:有効なaの値12個 × bの値26個 = 312通りの組み合わせを全て試す
  2. 復号実行:各(a,b)で暗号文を復号し、平文候補を生成
  3. 英語らしさ判定:生成された平文候補を以下2つの指標で評価
    • よく使われる英単語(THE, AND, TO等)の出現回数
    • 英語の文字頻度(Eがもっとも多い等)との一致度(カイ二乗検定)
  4. スコア計算・順位付け:上記2指標を組み合わせて総合スコアを算出し、高得点順に表示

スコア表示の見方:

  • score:総合スコア(大きいほど正解に近い可能性が高い)
  • hits:一般的な英単語(THE, AND, TO等)の出現回数
  • chi:カイ二乗値(小さいほど英語の文字頻度に近い)

例:score=40.64 / hits=0 / chi=11.3
→ 英単語は見つからなかったが、文字頻度はそれなりに英語に近い

※この手法は平文が英語である場合に効果的です。日本語や他言語では精度が下がります。

関連暗号

  • ヴィジュネル暗号(多表式換字)
  • プレイフェア暗号(2文字換字)