アフィン暗号
E(x) = (ax + b) mod 26 でエンコード・デコードします。aとbを入力すると、aが元に戻せるかを確認し、逆元を求め、すべての文字の計算過程を示します。鍵がわからない場合、デコードモードでは312個すべてを試し、結果がどれだけ英語らしく見えるかで順位付けします。
26と共通の因数を持たない値にしてください — 下の12個から選べます。
任意の整数です。26を法として扱われます。
この鍵での計算過程
エンコード:E(x) = (5x + 8) mod 26
デコード:D(y) = 21(y − 8) mod 26
21 は 5 の逆元です。5 × 21 = 105 で、これは26の倍数より1大きい数だからです。
有効なaとその逆元の一覧
| a | 1 | 3 | 5 | 7 | 9 | 11 | 15 | 17 | 19 | 21 | 23 | 25 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a⁻¹ | 1 | 9 | 21 | 15 | 3 | 19 | 7 | 23 | 11 | 5 | 17 | 25 |
1文字ずつの計算 — 最初の12文字
| 文字 | x | a·x + b | mod 26 | 結果 |
|---|---|---|---|---|
| A | 0 | 8 | 8 | I |
| F | 5 | 33 | 7 | H |
| F | 5 | 33 | 7 | H |
| I | 8 | 48 | 22 | W |
| N | 13 | 73 | 21 | V |
| E | 4 | 28 | 2 | C |
| C | 2 | 18 | 18 | S |
| I | 8 | 48 | 22 | W |
| P | 15 | 83 | 5 | F |
| H | 7 | 43 | 17 | R |
| E | 4 | 28 | 2 | C |
| R | 17 | 93 | 15 | P |
アフィン暗号の使い方
- 1. モードを選んでテキストを入力します。 エンコードは平文を暗号文に変換し、デコードはその逆を行います。
- 2. 鍵を設定します。 乗数aとシフト量bを入力します。aは入力欄の下に並ぶ12個の値のいずれかでなければならず、クリックすればその値が入ります。bは任意の整数で、26を法として縮約されます。
- 3. 計算過程を読みます。 結果の下のパネルには、鍵に対応する2つの式、aの逆元、各文字の計算が表示されます。
- 4. 鍵がわからない場合は、すべて試します。 デコードモードで312個の鍵をすべて試すにチェックを入れます。結果は文字の出現数がどれだけ英語に近いかで順位付けされ、この鍵を使うでどの鍵でも読み込めます。
アフィン暗号の公式
文字に0から番号を付けます。A = 0、B = 1 … Z = 25 です。文字xを暗号化するには、aを掛け、bを足し、26で割った余りを取ります:E(x) = (a·x + b) mod 26。文字yを復号するには、その手順を逆にたどります。bを引き、aのモジュラ逆元であるa⁻¹を掛けます:D(y) = a⁻¹·(y − b) mod 26。逆元とは、aに掛けると余りが1になる数のことです。a = 5 の場合は21です。5 × 21 = 105 = 4 × 26 + 1 だからです。
aが12個の値しか使えない理由
aを掛けても、2つの文字が同じ位置に移ってはいけません。そうなると、復号の答えが2通りになってしまうからです。これは、aが 26 = 2 × 13 と共通の因数を持つときに必ず起こります。たとえば a = 2 の場合、2 × 13 = 26、つまり mod 26 で0になるため、A(0)とN(13)がどちらもbに移ります。そのため、aは奇数で、かつ13であってはならず、下に示す12個の数が残ります。これはまさに、法26で逆元を持つ数です。bの選択肢が26通りあるため、12 × 26 = 312個の鍵ができ、そのうち1つ(a = 1、b = 0)は何も変えません。
| a | 1 | 3 | 5 | 7 | 9 | 11 | 15 | 17 | 19 | 21 | 23 | 25 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a⁻¹ | 1 | 9 | 21 | 15 | 3 | 19 | 7 | 23 | 11 | 5 | 17 | 25 |
具体例:a = 5、b = 8
a = 5、b = 8 のとき、AFFINE CIPHER は IHHWVC SWFRCP に暗号化されます。これはツールのサンプルです。AFFINEの各文字の計算は次のとおりです。
| 文字 | x | 5x + 8 | mod 26 | 結果 |
|---|---|---|---|---|
| A | 0 | 8 | 8 | I |
| F | 5 | 33 | 7 | H |
| I | 8 | 48 | 22 | W |
| N | 13 | 73 | 21 | V |
| E | 4 | 28 | 2 | C |
デコードでは、ツールは a⁻¹ = 21 を掛けます。I(8)は 21 × (8 − 8) = 0 でAになり、H(7)は 21 × (7 − 8) = −21 で、これは mod 26 で5、つまりFになります。この段階で負の値が出るのは普通のことです。mod 26 とは、数が0から25の間に収まるまで26を足したり引いたりすることにすぎません。
よく知られた2つの暗号は、実はアフィン暗号です。a = 1 のとき式は x + b で、bだけずらすシーザー暗号になります。a = 25、b = 25 のときは、アルファベットを逆順に読むアトバシュ暗号になります。
アフィン暗号の解読方法
何かを変える鍵は311個しかないため、最も単純な攻撃はすべて試すことで、総当たりのオプションならほんの一瞬で終わります。難しいのは正解を見分けることなので、ツールは各結果の文字の出現数を典型的な英語と比較するカイ二乗検定で、すべての結果を順位付けします。1文以上あれば正しい鍵が先頭に来ますが、短いフレーズでは来ないこともあります。たとえば IHHWVC SWFRCP だけでは、本当の鍵(5, 8)は4位になります。そのため、最初の行を信用せず、リストを下まで読んでください。
暗号解読者は、代数を使えばもっとうまくやれます。アフィン暗号は単一換字式暗号、つまり各文字が常に同じ文字になるため、頻度分析からどの暗号文字がEとTにあたるかが推測でき、2つの推測から2つの方程式が得られます。上の鍵では、E(4)がC(2)に、T(19)がZ(25)になるので、4a + b ≡ 2 と 19a + b ≡ 25(mod 26)です。2つ目から1つ目を引くと 15a ≡ 23 となり、15の逆元である7を掛けると a ≡ 161 ≡ 5、そして b ≡ 2 − 20 ≡ 8 になります。既知の平文が2文字あれば、鍵全体がわかるのです。
よくある質問
- アフィン暗号とは何ですか?
- 各文字の番号xを (a·x + b) mod 26 に変える換字式暗号で、すべての文字にaを掛け、さらにbだけずらします。鍵は組 (a, b) です。ある文字は常に同じ暗号文字になるため、単一換字式であり、シーザー暗号より強そうに見える親戚ですが、解読の難しさは変わりません。
- aは26と互いに素でなければならないのはなぜですか?
- 復号では、法26でのaの逆元を掛けますが、この逆元はaと26が共通の因数を持たない場合にしか存在しません。共通の因数があると、異なる2つの文字が同じ文字に暗号化され、メッセージを確実に読み戻せなくなります。そのため、すべての偶数と13が除外され、1、3、5、7、9、11、15、17、19、21、23、25が残ります。
- aのモジュラ逆元はどうやって求めますか?
- aに掛けて26で割った余りが1になる、1から25の間の数を探します。a = 7 なら15です。7 × 15 = 105 = 4 × 26 + 1 だからです。ケースは12個しかないため、上の表から読み取るのが最も早く、大きな法の場合は、拡張ユークリッドの互除法で逆元を直接求められます。
- アフィン暗号にはいくつの鍵がありますか?
- 312個です。aの選び方12通りとbの選び方26通りの積です。そのうち1つ、a = 1、b = 0 はテキストを変えないため、実際に暗号化するのは311個です。午後の時間があれば手作業で全部試せ、コンピューターなら一瞬で済む数です。
- シーザー暗号はアフィン暗号の一種ですか?
- はい。a = 1 とすると式は x + b となり、bだけずらすシーザー暗号になります。ROT13は a = 1、b = 13 です。アトバシュも a = 25、b = 25 のアフィン暗号です。どちらも、総当たりが試す312個の鍵に含まれています。
- アフィン暗号は安全ですか?
- いいえ。総当たりにも、頻度分析にも、上の代数が示すように、わずか2文字の既知の平文にも破られます。剰余算術の練習には優れていますが、重要なものには現代の暗号が必要です。