Vigenère ソルバー
Vigenère の暗号文を貼り付けるだけで、鍵を知らなくてもキーワードと元のメッセージを復元できます。ソルバーは一致指数から鍵の長さを見つけ、カシスキー法でそれを裏付け、各列をシーザー暗号として解読し、最も英語らしく読める復号結果を選びます。すべてブラウザ内で動作します。
サンプルを試す:
上に Vigenère の暗号文を貼り付けると、復元された鍵・復号されたメッセージ・鍵長の分析がここに表示されます。与えるテキストが多いほど、答えの信頼性は高まります。
ヴィジュネル暗号ソルバー の使い方
- 1
暗号文を貼り付ける
Vigenère で暗号化されたテキストをコピーしてボックスに貼り付けます。1段落以上あれば最良の結果が得られます。文字は大文字小文字を問わず読み取り、解読中はスペース・数字・記号を無視します。
- 2
復元された鍵を読む
ソルバーは最も可能性の高いキーワードを上部に表示します。ワンクリックでコピーできます — それを Vigenère 暗号ツールに貼り付ければ、同じメッセージを復号することを確認できます。
- 3
復号されたメッセージを読む
鍵の下に、元の大文字小文字・スペース・記号が復元された完全な平文が表示されます。コピーして結果を保存しましょう。
- 4
鍵長の根拠を確認する
一致指数チャートとカシスキーのパネルが、その鍵長が選ばれた理由を示します。結果がおかしく見える場合は、チャートで別の長さをクリックして強制的に解読するか、最大鍵長を広げてください。
- 5
共有またはクリア
あなたの暗号文そのままでツールを再び開く共有リンクをコピーします — テキストは URL のハッシュより後ろの部分に乗り、サーバーには決して届きません。クリアするとすべてがリセットされます。
Vigenère 暗号の解読を解説
このツールの機能
Vigenère 暗号は、繰り返されるキーワードに従って各文字を異なる量だけずらすことでメッセージを隠します。この単純な発想のおかげで、この暗号は3世紀ものあいだ le chiffre indéchiffrable — 解読不可能な暗号 — という異名を得ていました。文字頻度を数えるという定番の手口が通用しないからです。それでもこのツールは、あなたが鍵を渡さなくても、自動的にこれを解読します。暗号文を貼り付ければ、最も可能性の高いキーワードと復号されたメッセージを返します。
このツールは人間の暗号解読者と同じやり方で、ただしはるかに速く動作します。鍵の長さを割り出し、メッセージをその数だけの独立したシーザー暗号に分割し、それぞれを解いてから、結果が実際に英語らしく読めるかを確かめます。鍵も推測もいらず、何一つブラウザの外には出ません — 攻撃のすべてがあなた自身のマシン上で完結します。
Vigenère 暗号が解読できる理由
長さ L のキーワードは、L 文字おきにすべて同じシフトで暗号化します。つまり、1番目、(L+1) 番目、(2L+1) 番目……の文字を取り出すと、そのグループの文字はすべて同じ量だけずらされており — これらはごく普通のシーザー暗号を構成します。L 個ある開始位置のそれぞれについて、同じことが言えます。したがって Vigenère 暗号は1つの難しい問題ではなく、L 個のやさしい問題を積み重ねたものであり、あなたと平文の間に立ちはだかるものは L を見つけることだけです。
鍵の長さが分かれば、各列は英語の偏った文字頻度を、単一のシフトで付け替えただけの形でそのまま保っています。これはまさに古典的な頻度分析が対象とするために作られた状況です。つまり Vigenère を解読する技術のすべては、たった1つの問いに帰着します — 鍵はどれくらいの長さなのか?
一致指数で鍵の長さを見つける
一致指数は、あるテキストから無作為に選んだ2文字が同一である確率を測ります。通常の英語は文字の使われ方が非常に不均一なため約 0.066 に位置し、完全にランダムなテキストは 0.038 付近になります。暗号文を正しい数の列に分割すると、各列は単一換字式になり、その一致指数は英語の値へと跳ね上がります。誤った数に分割すれば、各列は平坦でランダムらしい 0.038 のままです。
このツールは、1からあなたが選んだ最大値までのすべての鍵長を試し、それぞれの平均列一致指数を測り、その結果を棒グラフとして描きます。真の長さは高い棒として際立ち — そしてその倍数もまた際立ちます。長さ10は、5文字ごとのグループもすべて揃えてしまうからです。この倍数による曖昧さこそ、このツールが単純に最も高い棒を信用しない理由であり、次の節で説明します。
カシスキー法
鍵の長さを見つけるには、フリードリヒ・カシスキーが1863年に発見した、もう1つの古い方法があります。THE のようなありふれた単語が、キーワードの同じ部分と2度揃うと、両方とも同じ暗号文の並びに暗号化されます。そうした2つの繰り返しの間の距離は、鍵長の整数倍でなければなりません — つまり鍵の長さはその距離を割り切ります。繰り返される並びをいくつか見つけ、間隔を測れば、鍵の長さはそれらの間隔の公約数の中に潜んでいます。
このツールは暗号文から繰り返される3文字の並びを走査し、それらの間の間隔を集め、各候補の約数がいくつの間隔を割り切るかを数えます。最も多く支持された約数が、最も可能性の高い鍵長です。これは一致指数とは独立した、別の根拠のパネルとして示されるので、2つの異なる手法が答えについて一致できるようになっています。
各列を解いてキーワードを読み取る
鍵の長さが定まれば、どの列もシーザー暗号であり、シーザー暗号は瞬時に陥落します。各列について、ソルバーは26通りすべてのシフトを試し、復号された文字が英語で期待される頻度に最もよく一致するものを、χ²検定で測って残します。ある列で勝ち残ったシフトが、キーワードの1文字です。シフト11は L、シフト4は E、という具合です。勝ち残ったシフトを順に読めば、キーワードがおのずと綴られます。
復元されたそのキーワードでメッセージ全体を復号すると、元の大文字小文字・スペース・記号がもとあった場所に正確に戻された平文が得られます。もし復元された鍵がたまたま繰り返しになっていたら — 本当の鍵が LEMON のときに LEMONLEMON のように — このツールはそれを最短の周期に畳み込むので、常に真の最小のキーワードが表示されます。
まず解き、それから検証する — バイグラムが重要な理由
素朴なソルバーは一致指数から鍵の長さを選んで、そこで止まります。これは2つのよくある場合に誤りに陥ります。繰り返しの多いメッセージは統計をゆがめることがあり、真の長さはその約数と混同されやすいのです。このツールはその罠を避けるために、すべての候補の長さで解いてから、各復号結果が実際にどれくらい英語らしく読めるかで判定します — まず解き、次に検証するのです。
判定に使うのは単一文字の頻度ではありません。それは驚くほど簡単にだまされ得ます。少しだけ間違った鍵でも、もっともらしい文字構成をたまたま持つ意味不明なテキストを生むことがあるからです。代わりにこのツールは、各復号結果をバイグラム — 隣り合うすべての文字ペアの尤度を、大量の英語コーパスから学習したもの — で採点します。本物の英語は TH、HE、ER のようなペアに富み、QJ や ZX はほとんど含みません。そのため鍵の1文字でも間違っていると、あり得ないペアが注入されてスコアが沈みます。最良のバイグラム適合度を持つ復号結果が勝ち、同点なら短い鍵が優先されます。これが、単純なシーザー暗号が正しく1文字の鍵に解決される理由です。
必要なテキスト量と、苦戦するとき
各列は頻度分析で解かれるため、重要なのは各列に何文字落ちるか — つまり全体の長さを鍵の長さで割った値です。1列あたりおよそ40文字以上あれば、鍵と平文の両方とも、復元はたいてい正確です。200文字の段落なら短い鍵は容易に解読できます。十数文字の長い鍵は、確実を期すには数百文字の暗号文を欲しがります。
暗号文が鍵に対して短いと、各列は薄くなり、列ごとの頻度集計はノイズを帯びます。それでもソルバーは何も返さないのではなく、最善の結果を返します — 鍵が1〜2文字ずれているがそれでも読める、惜しい結果であることがよくあります。結果がほぼ正しく見える場合、通常の対処は単純にもっと多くの暗号文を与えるか、チャートを使って手作業で鍵の長さを微調整することです。この暗号が抵抗するのは、測定するに足るテキストが本当に足りないときだけです。
よくある質問
鍵なしで本当に Vigenère 暗号を解読できるのですか?
ソルバーはどうやって鍵の長さを見つけるのですか?
一致指数とは何ですか?
カシスキー法とは何ですか?
復元された鍵がわずかに間違っていることがあるのはなぜですか?
暗号文はどれくらい必要ですか?
なぜこのツールは単なる文字頻度ではなくバイグラムを確認するのですか?
特定の鍵の長さを強制できますか?
Beaufort、Gronsfeld、その他の多表式暗号でも機能しますか?
暗号文はサーバーに送信されますか?
Vigenère 暗号ツールとは何が違うのですか?
関連ツール
こちらの便利なツールもどうぞ