ヴィジュネル暗号の読み方と解き方入門
ヴィジュネル暗号の読み方と解き方入門
ヴィジュネル暗号は、鍵の文字数ぶんだけ異なるずれを使い分ける多表式暗号であり、シーザー暗号がずれ1種類なのに対して最大26種類のずれを順番に適用します。つまり、同じ平文の文字でも位置によって別の暗号文字に変わる仕組みで、見た目は難しくても「シーザー暗号の合わせ技」と考えるとぐっと掴みやすくなるはずです。
ヴィジュネル暗号は、鍵の文字数ぶんだけ異なるずれを使い分ける多表式暗号であり、シーザー暗号がずれ1種類なのに対して最大26種類のずれを順番に適用します。
つまり、同じ平文の文字でも位置によって別の暗号文字に変わる仕組みで、見た目は難しくても「シーザー暗号の合わせ技」と考えるとぐっと掴みやすくなるはずです。
鍵が分かっている場合の暗号化と復号は、HELLOをKEYでRIJVSに変えるような5文字の例でそのまま追えますし、鍵が分からない場合も、繰り返しや周期から長さの当たりをつけて解読へ進めます。
謎解きイベントで方陣の前に手が止まる初心者を何度も見てきた筆者からすると、表を暗記する必要はなく、A=0の足し算と引き算さえできれば紙とペンで十分です。
ヴィジュネル暗号とは何か:1つの鍵で26通りのずれを使い分ける暗号
ヴィジュネル暗号は、1つのずれを全体に当てはめるシーザー暗号とは違い、鍵の文字に応じてずれを切り替える多表式暗号です。
平文の同じ文字でも置かれる位置が変われば別の文字に化けるため、見た目は似ていても解き方の発想がまるごと変わります。
最初にここを押さえると、後の解読法まで筋道よくつながるでしょう。
シーザー暗号との違い:ずれが1種類か複数種類か
シーザー暗号はずれが1種類だけなので、アルファベットを何文字ずらしたかを総当たりで試せばたどり着けます。
これに対してヴィジュネル暗号は、鍵の各文字ごとに複数種類のずれを順番に使い分けます。
同じ「Aを何文字ずらすか」という発想に見えて、実際には1文字ごとに別の表を参照しているわけです。
筆者が初めて触れたときも、ついシーザー暗号の感覚で全通りを試して30分ほど溶かしました。
答えに近づく気配がなく、そこで初めて「鍵があるなら、ずれは固定ではない」と気づいたのです。
謎解きワークショップで「ずれが1個から複数個に増えただけです」と言い換えた瞬間に、参加者の表情がふっとほぐれたことがあります。
難物に見えても、実体はずれの種類が増えただけだと分かると、急に見通しが立つのです。
多表式暗号という考え方
多表式暗号とは、同じ平文に対して1枚の対応表を使い回すのではなく、複数の表を切り替えながら暗号化する方式です。
ヴィジュネル暗号を「シーザー暗号の表を何枚も切り替えて使う方式」と捉えると、仕組みがかなり見えやすくなります。
用語を覚えること自体が目的ではなく、切り替えのイメージを持つことが肝心です。
この切り替えがあるから、同じ平文文字が位置によって別の暗号文字になります。
たとえば平文の2つのLでも、対応する鍵文字が違えば化け先は変わります。
ここが頻度分析を弱める核心で、暗号文の文字の偏りを一つの表で追いにくくしているのです。
平坦に見える文字列の裏で、表の選択だけが静かに進んでいると考えると理解しやすいでしょう。
鍵が短いときは繰り返して使う
鍵が平文より短いときは、鍵を先頭から繰り返して使います。
鍵KEYを平文HELLOに当てるなら、対応はK、E、Y、K、Eとなり、KEYKEと巡回する形です。
つまり鍵は文字数分だけ伸ばしてから使うので、暗号化のたびに鍵文字を平文の位置へ順番に割り当てていきます。
この繰り返しは便利ですが、同時に弱点の入口にもなります。
周期がある以上、暗号文の中から同じ並びが再登場したときに、鍵の長さを推定する手がかりになるからです。
たとえばKEYでHELLOを暗号化するとRIJVSになり、同じ鍵で引き算すればHELLOに戻せます。
平文のLが、鍵文字YのときはJに、Kのときはvに変わるように、同じ文字でも位置で結果が変わる点を見ておくと、後の解読で「なぜ割り切れるのか」がつながります。
ヴィジュネル方陣(表)の読み方
ヴィジュネル方陣は、縦横26マスのアルファベット表です。
見た目は複雑でも、実際は1行目がAからZ、次の行はBから始まって1文字ずつずれていくだけなので、規則さえつかめば怖がる必要はありません。
暗号化でも復号でも、行・列・交点の3点を順に見るだけで処理できる、かなり素直な表だと押さえておくと理解が速くなります。
方陣はシーザー暗号の表を26段重ねたもの
方陣の正体は、シーザー暗号のずれ方を26段ぶん並べたものです。
1段ごとにずれが1ずつ増えるので、Aならずれ0、Bならずれ1、Cならずれ2という見方がそのまま成り立ちます。
筆者は説明するとき、まず1行目だけを指でなぞらせて「これならシーザー暗号と同じですね」と確認してから2段目に進めます。
そこで表への心理的な壁が下がると、あとは並びの違いを順番に見るだけで済むからです。
行・列・交点の選び方
読み方の手順は、平文の文字で行を選び、鍵の文字で列を選び、その交点の文字を暗号文として取るだけです。
復号では逆に、暗号文の文字を鍵の列の中から探し、その文字が載っている行の見出しを平文として読むことになります。
たとえばHELLOをKEYで暗号化するとKEYKEと鍵を繰り返してRIJVSになり、同じ鍵で引き算すればHELLOへ戻ります。
表を見ていると作業は直感的ですが、やっていること自体は「平文+鍵」「暗号文-鍵」を26で割った余りを取る計算にすぎません。
表がなくても足し算で代用できる
表が手元になくても、A=0からZ=25までを数字に置き換えれば同じ結果が出ます。
暗号化は足し算、復号は引き算で処理でき、26を超えたら26を引き、マイナスなら26を足せばよいだけです。
実際、印刷した方陣を会場に忘れた回がありましたが、A=0の計算だけで全員が解き切りました。
あの経験で、表は理解を助ける補助輪に過ぎず、現場では紙の隅の計算がいちばん強い場面もあると実感したのです。
暗号化の手順:HELLOを鍵KEYで暗号化してみる
HELLOを鍵KEYで暗号化する手順は、まず鍵を5文字の平文に合わせてKEYKEまで伸ばすところから始まります。
ここを飛ばすと、どの文字とどの文字を対応させるかがずれてしまい、計算の前提が崩れます。
暗号化の要点は、文字をいったん数字として扱い、足し算のあとで元の文字に戻すことです。
鍵を平文の長さまで伸ばす
鍵KEYは3文字しかないので、HELLOの5文字に合わせてKEYKEと並べます。
短い鍵をくり返して長さをそろえるのは、見た目以上に重要です。
1文字でも対応がずれると、後半の計算結果が全部変わってしまうからです。
筆者が暗号化を教えるときも、文字のまま足そうとして混乱した受講者に「一度ぜんぶ数字に直してから戻す」とルール化させたところ、正答率が一気に上がりました。
文字を数字に置き換えて足す
次に、A=0からZ=25の対応を使って、平文と鍵を数字にします。
HELLOはH=7、E=4、L=11、L=11、O=14、鍵KEYKEはK=10、E=4、Y=24、K=10、E=4です。
こうして並べると、暗号化は感覚ではなく機械的な手順として処理できます。
平文HELLO+鍵KEYKEは、H+K=R、E+E=I、L+Y=J、L+K=V、O+E=S となり、暗号文RIJVSが得られます。
5文字を最後まで計算し切ることで、表で見た対応と実際の答えが一致すると確かめられるでしょう。
26を超えたら26を引いて文字に戻す
つまずきやすいのは、足し算の結果が26を超えたときです。
L+Yは11+24=35ですが、そのままではZの次に飛んでしまうので、35-26=9として輪の中に戻します。
9番目の文字はJなので、ここで正しい暗号文字になります。
イベント制作の手伝いで暗号文を仕込んだ際も、26を引き忘れて出題ミスをしかけたことがあり、検算の大切さを痛感しました。
時計の文字盤のように、26を超えたら26を引いて元の範囲へ戻す、と覚えておくとおすすめです。
復号の手順:RIJVSを鍵KEYで元に戻す
復号は、暗号化の逆をそのままたどる作業です。
足し算だった暗号化に対して、復号では暗号文の番号から鍵の番号を引き、26の輪の中で平文へ戻していきます。
RIJVSをKEYで解く場合も考え方は同じで、計算の形を変えずに逆向きへ進めれば迷いません。
暗号文から鍵の番号を引く
まず、暗号文の各文字と鍵の各文字を対応させ、前の章で覚えた番号に直します。
R-Kは17-10で7になり、7はHです。
I-Eは8-4で4なのでE、J-Yは9-24で-15になりますが、この時点で止まらず、26の輪に戻して考えます。
V-Kは11-10で1ではなく11と見てL、S-Eは14-4で10ではなくOとして読めます。
こうしてRIJVSがHELLOに戻る流れを、1文字ずつ確かめるのが復号の基本です。
同じ例で検算すると、暗号化と復号がきれいに対になっていることがはっきりします。
足し算で作った暗号文は、引き算で元へ戻るだけです。
数字の動きが見えていると、暗号が特別な魔法ではなく、規則に従う処理だと分かります。
マイナスになったら26を足す
復号で唯一つまずきやすいのは、引き算がマイナスになる場面です。
J-Yのように9-24で-15になったら、そのままでは終わりません。
26を足して11に戻し、対応する文字としてLを取ります。
E-Yのように4-24=-20となる場合も同じで、26を足せば6になり、G相当の位置へ戻せます。
この処理は、暗号化で使った「26文字を一巡する」という考え方の裏返しです。
文字盤の外へ落ちた数を、同じ円環の中へ引き戻してやるだけで、計算は安定します。
復号で気をつけるのはここだけだと言ってよく、ここを押さえれば5文字程度の暗号は数十秒で追えます。
ℹ️ Note
復号の失敗は、計算そのものよりも引き算後の補正忘れで起こりやすいです。
鍵が分かれば一本道で戻せる
脱出ゲームで鍵となる単語を見つけた瞬間、残りの復号は一気に短くなります。
実際、筆者は鍵の語を見つけてから30秒ほどで最後まで戻せたことがあり、難所は計算ではなく鍵の発見だったと痛感しました。
だからこそ、復号は「解けるかどうか」より「どの鍵で解くか」が先に来ます。
謎解きの現場では、その鍵がフレーバーテキストやギミックの中に隠れていることが少なくありません。
鍵さえ分かれば、あとは同じ手順を1文字ずつ繰り返すだけで、手元の暗号文は素直に平文へほどけていきます。
復号でマイナス処理を忘れて1文字だけおかしくなったときも、検算を入れれば全文を救えます。
だから次の章では、いよいよその鍵をどう探すかに進みましょう。
鍵が分からないとき:繰り返しの間隔から鍵の長さを探る
暗号文だけが手元にあるなら、まず探すべきなのは同じ3文字以上の並びです。
平文で同じ語が同じ鍵位置に来ると、同じ置換がかかるため、暗号文にも似た並びが顔を出します。
見つけるべきは「意味のある長さのかたまり」で、そこから推理を始めるのがカシスキー法の入り口です。
同じ並びの繰り返しを探す
長めの暗号文を眺めていると、同じ3文字の並びが2か所で見つかることがあります。
筆者も、ひたすら目で追っていた暗号文の中に同じ断片を見つけた瞬間、急に糸口がつながった感覚を覚えました。
偶然に見えても、同じ位置関係で現れるなら「鍵の周期」と結びついている可能性が高いのです。
平文の同じ語が同じ鍵位置で処理されると、暗号化後も同じ3文字以上の並びとして残りやすくなるからです。
間隔の最大公約数で鍵の長さを推定する
次にやることは単純で、繰り返しの出現位置の間隔を数えます。
そこに鍵の長さの倍数が混じっているはずだ、と考えるのが基本です。
たとえば間隔が9と15なら、両方を割り切る3が第一候補になります。
鍵の長さを直接当てるのではなく、複数の間隔から共通因子を拾うので、抽象的な「最大公約数を取る」という操作が、かなり実戦的な意味を持つわけです。
列ごとに分ければシーザー暗号に帰着する
鍵の長さが n と分かれば、暗号文を n 文字ごとに拾い直してみてください。
すると各グループは同じ鍵文字で処理された集まりになり、ずれは1種類だけだと見なせます。
要するに、多表式暗号の厄介さが、解き慣れたシーザー暗号の束へ分解されるのです。
ここまで来ると、各列のずれを順にほどけばよいので、推理の負担は一気に軽くなります。
短い暗号文では繰り返しが出ず鍵が絞れないこともありますが、その場合は問題文のストーリーやギミックに鍵そのものが隠れていないか探すほうが早いでしょう。
筆者も一度、繰り返し探しにこだわって遠回りし、結局はキーワードが鍵だったと気づいて反省しました。
急ぐべきはどこか、切り替えの見極めが勝負です。
なぜ『解読不能の暗号』と呼ばれたのか:頻度分析が効かない理由
頻度分析は、普通の文章では特定の文字が偏って多く現れるという前提に立つ解読法です。
たとえば英語なら、暗号文でも出現回数が最も多い文字を手がかりに元の平文を推測できます。
ところがヴィジュネル暗号では、その前提が鍵の働きで崩れます。
頻度分析とは何か
頻度分析は、文字の出現回数の偏りを読む手筋です。
シーザー暗号のような単純な置換では、文字が別の文字にずれても出現順の偏り自体は残るため、山の位置を合わせれば突破口になります。
筆者も最初はその成功体験のまま挑み、ヴィジュネル暗号でも同じように当てにいきましたが、山そのものが見えず、手が止まりました。
そこがこの暗号の出発点だと言えるでしょう。
ヴィジュネル暗号が頻度を平らにする仕組み
ヴィジュネル暗号の厄介さは、同じ平文文字が位置によって別の文字へ化ける点にあります。
ひとつの文字が常にひとつの文字へ置き換わるのではなく、鍵の流れに応じて出力が分散するため、暗号文全体では特定の文字だけが突出しにくくなります。
鍵を長くするほどこの分散は強まり、文字の出方は均されて、頻度グラフは平らになっていきます。
歴史的にも長く解読を難しくしたのは、この平坦化が列ごとの偏りを見えにくくするからです。
筆者も列分解を知らない段階では、山が消えた暗号文を前に空振りしましたが、鍵の長さで列に分けてから各列に頻度分析をかけ直すと、消えていた偏りが列ごとに戻ってきました。
頻度分析が壊れたのではなく、見える単位が細かくなっていたのです。
唯一の弱点は鍵の繰り返し
ただし、ヴィジュネル暗号には鍵が周期的に繰り返されるという弱点があります。
この周期が同じ位置関係を作るので、暗号文を正しく切り分ければ、各列は再び単純な置換に近い形になります。
前章で扱った鍵の長さの推定は、この弱点を突くための準備でした。
周期さえ見抜ければ、平坦だった文字の分布は列単位で再び山を持ち、頻度分析が復活します。
強さの正体が平坦化なら、弱点の正体は周期性です。
ここを押さえると、なぜ「解読不能の暗号」と呼ばれたのかが、仕組みの側からすっきり見えてきます。
歴史の小話:名前の由来と『解読された日』
ヴィジュネル暗号の話は、名前の印象と実際の歴史がずれているところが面白いです。
多表式暗号の発想自体は15世紀のアルベルティに遡り、ドイツのトリテミウスらを経て洗練されていきました。
つまり、今日よく知られる呼び名から想像するほど、出発点は単純でも新顔でもありません。
アルベルティからベラソへ:本当の考案者
多表式暗号の原型をたどると、まず15世紀のアルベルティがいて、その後にドイツのトリテミウスらが理論と実践を広げました。
ここで押さえたいのは、暗号の工夫が一気に完成したのではなく、少しずつ「同じ文字でも別の文字に見せる」発想が積み重なった点です。
読者にとって重要なのは、ヴィジュネルという名前だけで歴史を切らないことだと言えるでしょう。
現在『ヴィジュネル暗号』と呼ばれる繰り返し鍵方式に近いものは、1553年にベラソが記述したものです。
にもかかわらず後世ではヴィジュネルの名が広まり、考案者の印象がずれてしまいました。
筆者が暗号史の本を読んだときも、この誤帰属には素直に驚かされ、謎解き仲間に話したら「名前で覚えると危ないね」と盛り上がったものです。
なぜ『ヴィジュネル』の名がついたのか
さらにややこしいのが、ヴィジュネル自身が1586年に発表したのは、平文自体を鍵に使う自動鍵方式だったことです。
つまり、後世に『ヴィジュネル暗号』と呼ばれる繰り返し鍵方式とは別物で、名前だけがひとり歩きした形になります。
ここには、技術の実体よりも書名や人物名が記憶を支配する、歴史資料の面白さがあります。
このずれを知ると、暗号名をそのまま機械的に受け取れなくなります。
実際、イベントのフレーバーテキストにこの小話を仕込んだときも、参加者が「名前の主が本当の考案者ではないのか」と背景ごと気にしてくれて、問題そのものへの愛着が増していました。
解く前に物語が立つと、体験はぐっと濃くなります。
300年破られなかった暗号を解いた人たち
解読の歴史では、1863年にカシスキーが解読法を公表し、それ以前の1846年頃にバベッジが独自に解いていたとされます。
長く「解読不能」と見なされていた仕組みが、ついに理屈で崩れたわけです。
300年近い神話が終わる瞬間には、暗号が永遠ではないことを示す鮮やかさがあります。
この流れを知ってから読むと、ヴィジュネル暗号は単なる古典暗号ではなく、誤帰属、命名の混乱、そして解読史まで含めた一つの読み物になります。
カシスキーとバベッジの名を並べて覚えておくと、技術の進歩がどう歴史を塗り替えるのかまで見えやすいはずです。
暗号の背景まで含めて楽しんでみてください。
謎解きイベント参加歴8年、累計300回以上の参加経験を持つ謎解きマニア。謎検1級取得。攻略テクニックの体系化をライフワークとしています。
関連記事
数字暗号の解き方|5つの型と見分け方
数字暗号は、数字を文字へ当てはめる換字式と、表の座標や何文字目かを指す位置参照式に大別できる暗号です。謎解きイベントで数字列に10分ほど詰まったときも、桁数と最大値を声に出して確かめた瞬間に型が割れ、解き筋が一気に見えました。
顔文字暗号の読み方と解き方の基本
顔文字暗号は、謎解きで使われる換字式暗号の応用であり、文字や数字の暗号は解けるのにここだけ手が止まる人へ向けて、ひらめき任せをやめて再現できる手順に落とし込むための記事です。
16進数暗号の読み方と解き方入門
16進数は、0〜9とA〜Fの16個の記号で数を表す記数法で、謎解きでは41 42 43のような羅列として出てきます。見た目は難しそうでも、まず2桁ごとに区切って単位をつかめば、紙とペンだけで十分に読み解けるのがこの暗号の面白さです。
五十音表暗号の解き方|数字とずらしの2系統入門
五十音表を使う暗号は、盤面の数字を電話番号のようにそのまま読んでしまうと解けず、表の位置と並び順を見分けるところから始まる暗号です。筆者も謎解きを始めたばかりの頃は、数字を丸読みして撃沈し、五十音表に当てはめる発想に気づけませんでした。