古典暗号

ヴィジュネル暗号とは?仕組み・解読法と約300年という歴史的評価の扱い

更新: 織部 沙耶
古典暗号

ヴィジュネル暗号とは?仕組み・解読法と約300年という歴史的評価の扱い

机の上に紙とペンを置いて、まずは短い単語をひとつ暗号化してみてください。ヴィジュネル暗号は、鍵語に合わせて複数のシーザー暗号を切り替える多表式換字式暗号で、そこに古典暗号としての新しさがありました。

机の上に紙とペンを置いて、まずは短い単語をひとつ暗号化してみてください。
ヴィジュネル暗号は、鍵語に合わせて複数のシーザー暗号を切り替える多表式換字式暗号で、そこに古典暗号としての新しさがありました。
この記事は、古典暗号を名前だけで終わらせたくない人に向けて、方陣と mod 26 の式を行き来しながら、その仕組みを手でつかむための案内です。

筆者はcodeに鍵armを重ねてCFPEになる瞬間を紙の上で追うと、この暗号が「表の遊び」ではなく、規則をもった計算でもあると腑に落ちると感じます。
平文から暗号文へ、そこから復号へと一往復たどれば、自分の言葉で説明できるところまで届きます。
なお、しばしば約300年と表現される「破れにくかった」という評判は当時の評価を示す言い回しであり、現代の安全性を肯定するものではありません。

ヴィジュネル暗号とは何か

ヴィジュネル暗号は、古典暗号の中でも代表的な多表式換字式暗号です。
ひとつの規則で全文をずっと置き換えるのではなく、鍵語に合わせて複数の換字表を切り替えながら文字を変えていくところに特徴があります。
もっと身近なたとえで言えば、単一のシフトだけで動くシーザー暗号を一本の物差しだとすると、ヴィジュネル暗号は鍵語の文字ごとに別々の物差しを持ち替えていく方式です。

この違いは、紙の上で一文字ずつ追うとよく見えます。
シーザー暗号では、たとえば平文の E は文中のどこに現れても同じ文字へ移ります。
ところがヴィジュネル暗号では、E という同じ平文文字でも、鍵の位置が違えば別の暗号文字になります。
筆者が初めて目で納得したのもそこでした。
平文の中に同じ E がいくつも並んでいても、鍵語を重ねてみると、ある E はひとつ先へ、別の E はもっと先へ押し出され、結果として暗号文ではばらばらの文字に散って見えます。
古典暗号に触れたことがない人でも、この「同じ文字が同じ顔で出てこない」感覚を一度目視すると、単純な置換ではないことが腑に落ちます。

仕組みそのものは意外なほど整然としています。
ヴィジュネル方陣は、アルファベットを1文字ずつ循環シフトして並べた 26×26 の表で、平文の文字と鍵文字の交点を読めば暗号文字が得られます。
計算として書くなら、A を 0、Z を 25 とみなして、暗号化は C = (P + K)mod 26、復号は P = (C − K)mod 26 です。
前のセクションで触れたcodeと鍵armからCFPEになる例は、この方陣で読んでも、mod 26 の式で計算しても同じ結果になります。
見た目は表の暗号、実体は足し算の暗号という二重の顔を持っているわけです。

シーザー暗号との違い

シーザー暗号との違いをひとことで言えば、シフトが一回で固定されるか、鍵語に応じて入れ替わるかです。
シーザー暗号では全文が同じ規則でずれていくため、文字頻度の偏りがそのまま残ります。
英語でも他の言語でも、よく出る文字は暗号文でもよく出るので、全体の頻度を眺めるだけで手掛かりが得られます。

ヴィジュネル暗号は、そこに鍵の周期を持ち込みました。
平文が鍵より長いときは鍵を繰り返して使うので、同じ平文文字でも毎回同じようには置き換わりません。
たとえば鍵長が3なら、1文字目と4文字目と7文字目は同じ鍵文字で処理されますが、2文字目や3文字目は別のシフトになります。
このため、暗号文全体をまとめて見たときの単純な頻度分析は効きにくくなります。
古典暗号史の文脈でヴィジュネル暗号がひとつ上の段階として扱われるのは、この「頻度をそのまま露出させない」工夫があるからです。

名前の印象と歴史上の位置づけ

ヴィジュネル暗号には長く「破りにくい暗号」という名声がつきまといました。
しばしば約300年破れなかったと表現されることがありますが、これは同時代以降の史評をまとめた言い回しであり、一次史料で厳密に300年を裏付けるものがあるわけではありません。
古典暗号としてはたしかに手強く、19世紀まで大きな突破が広く共有されなかったという歴史的評価があります。
ただし、現代の暗号として見ればこれは歴史的手法であり、すでに破られている方式です。
ここを取り違えると、歴史上の栄光をそのまま現代の安全性に読み替えてしまいます。

名称についても少し整理しておくと、現在ヴィジュネル暗号と呼ばれている方式の初出は 1553年 の記述にさかのぼるとされます。
一方で、名の由来になったブレーズ・ド・ヴィジュネルは 1523–1596年 の人物です。
この食い違いからわかる通り、名前と発案の履歴はきれいに一致していません。
古典暗号ではこうした誤帰属が珍しくなく、方式そのものの仕組みと、後世に定着した呼び名は分けて見たほうが実像に近づきます。

運用には前提がある

もうひとつ見逃せないのが、ヴィジュネル暗号はアルファベットを前提に整えられた方式だという点です。
基本形では A から Z までの文字を 0 から 25 に対応させて扱うので、実際に暗号化するときはスペース、句読点、記号を外し、大文字か小文字かをそろえてから処理するのが通例です。
つまり、元の文章をそのまま投げ込むというより、いったん「英字だけの列」に整形してから暗号にかける発想です。
このひと手間があるからこそ、方陣でも式でも同じ規則で扱えます。

紙の上で試すと、この前処理にも古典暗号らしい手触りがあります。
文として読むと自然な文章が、暗号化の前にはスペースを失い、記号を失い、ただの文字列になります。
そしてその列に鍵語が機械的に重ねられていく。
ヴィジュネル暗号は、言葉を文章からいったん切り離し、アルファベットの並びとして扱うことで成立しているのです。

なぜ生まれたのか——単一換字式暗号の限界

ヴィジュネル暗号が生まれた背景を理解するには、その前に長く使われていた単一換字式暗号の限界から見たほうが早いです。
ひとつのアルファベットを別のひとつのアルファベットへ固定的に対応させる方式は、考え方としては素朴で、運用もしやすいものでした。
ところが、その「固定されている」という性質そのものが弱点になります。
平文の文字頻度が、姿を変えながらも暗号文に残ってしまうからです。
英語なら E や T のような出現頻度の高い文字が、暗号文でも何か別の文字として目立つ。
そこを足がかりにすれば、手作業でも崩せる余地が生まれます。

筆者はこの弱点を説明するとき、紙の上でごく短い単一換字の例を作って数えてみることがあります。
たとえば E や T を意識して短文を置き換えてみると、暗号文の中でもある文字だけが不自然に何度も現れます。
読み手の立場で頻度を数えた瞬間、「これでは読まれてしまう」という感覚がすっと立ち上がります。
数学を持ち出さなくても、文字の偏りが消えていない事実だけで、防御側の不安は十分に伝わります。
当時の軍政や外交の現場で、相手が根気よく暗号文を集めていたとしたら、固定表ひとつでは心もとない。
多表式化への欲求は、理論以前に実務の切迫感から育ったと見たほうが自然です。

この流れの出発点としてまず置きたいのが、15世紀のレオン・バッティスタ・アルベルティです。
1460年代、彼はひとつの換字表だけに頼らず、途中で規則を切り替える発想を示しました。
ここで大事なのは、後世の完成形をいきなり作ったというより、単一換字では統計的な偏りが隠しきれないという問題に対して、表を複数使う方向を開いたことです。
暗号史では、この一歩がのちの多表式換字暗号の原型として位置づけられます。

そこから16世紀初頭のヨハネス・トリテミウスへ進むと、話はもう少し見通しのよい形になります。
Polygraphiaで示されたtabula rectaは、アルファベットを一文字ずつずらして並べた表を体系的に扱うための足場でした。
後にヴィジュネル方陣として親しまれる見た目の前史が、ここで整えられたわけです。
単一換字では一枚しかなかった「文字の対応表」を、必要に応じて切り替えるという発想が、道具として整理された段階と言えます。

その次に来るのが、1553年のジョヴァンニ・バッティスタ・ベラッソです。
現在ふつうに「ヴィジュネル暗号」と呼ばれている方式の初出は、このベラッソの記述に求められます。
鍵語に応じて複数の換字表を使い分ける枠組みが、ここで歴史上の輪郭をはっきり持ちます。
つまり、単一換字の弱点を避けるために、同じ平文文字を文中でいつも同じ暗号文字へ送らない、という工夫が具体的な技法として結実したのがこの段階です。

ではブレーズ・ド・ヴィジュネルは何者かというと、もちろん暗号史の重要人物です。
ただし、ここで整理しておきたいのは名称と初出は一致していないという点です。
ブレーズ・ド・ヴィジュネルは1523年生まれで、16世紀後半に活動しましたが、現在その名で呼ばれている方式そのものの初出は彼より前で、1553年のベラッソの記述に見られます。
19世紀になると、この方式がヴィジュネルへ誤って帰属され、その呼び名が定着しました。
いま私たちが使っている「ヴィジュネル暗号」という名称は便利ではあるものの、発明の系譜をそのまま写したラベルではありません。

こうして並べると、流れはすっきり見えます。
アルベルティが多表式の原型を示し、トリテミウスがtabula rectaによって表の構造を整理し、ベラッソが現在そう呼ばれる方式を1553年に記述し、のちにヴィジュネルの名がそこへかぶさった。
歴史を追うときに人物名だけを覚えると、この順番が曖昧になりがちです。
けれど、なぜその方式が必要とされたのかという問いに戻れば、一本の線でつながります。
単一換字式暗号では頻度分析に耐えられない。
だから文字対応を固定せず、鍵に応じて表を切り替える必要があったのです。

この発明の動機は、机上の遊戯というより通信実務の圧力に根ざしています。
軍政でも外交でも、盗み見られる前提で手紙を送らなければならない場面は珍しくありません。
相手の解読者が紙と時間を武器にしてくるなら、防御側は暗号文から見える規則そのものを散らす必要がある。
多表式換字暗号は、その要求に対する歴史的な回答でした。
単一換字では一枚しかない仮面を、場面ごとに付け替える。
その発想が、のちにヴィジュネル暗号として記憶される方式へつながっていきます。

仕組み——ヴィジュネル方陣と mod 26 の考え方

ヴィジュネル暗号の中身は、見た目には表を読む作業であり、同時にきれいな剰余計算でもあります。
紙の上で方陣を指で追うと直感がつかめ、A=0からZ=25へ写して式に置き換えると、なぜ暗号化と復号が成り立つのかが輪郭を持って見えてきます。
さらに、この方式の肝は、同じ平文文字でも鍵の位置によって別の暗号文字へ散っていくところにあります。

方陣(tabula recta)で考える

ヴィジュネル方陣は、AからZまでを1文字ずつ循環シフトして並べた26×26の表です。
先頭の行はそのまま A から Z、次の行は B から始まって最後に A が回り込み、さらにその次は C から始まる、という具合に続きます。
ここでは行が鍵文字、列が平文文字、交点が暗号文字になります。
シーザー暗号を1枚だけ持つのではなく、26種類のシフト表を並べておき、鍵に応じて使い分ける姿がそのまま見える道具です。

筆者はこの表を初めて腑に落としたとき、印刷された図を見るより、自分で紙に描いたほうが早いと感じました。
好きな鍵文字の行を横に追い、平文文字の列を縦にたどって、交点に置かれた1文字を指先で確かめると、暗号化が「規則に従って文字を拾う動き」だと身体でわかります。
たとえば平文が code、鍵が arm なら、鍵は平文の長さに合わせて繰り返されるので arma と重なります。
そのうえで c と a、o と r、d と m、e と a の交点を順に読めば、暗号文 CFPE にたどり着きます。

この見方の利点は、鍵が短いときの動きもひと目でわかることです。
平文が鍵より長ければ、鍵は繰り返して適用されます。
つまり表の中で使う行が、一定の周期で再登場します。
暗号化する側には扱いやすい規則ですが、後で触れるように、この周期性は解読側にとっても手がかりになります。

数式(mod 26)で考える

方陣の読み取りは、そのまま数式へ移せます。
アルファベットをA=0〜Z=25と対応させると、平文文字を P、鍵文字を K、暗号文字を C として、暗号化はC=(P+K) mod 26で表せます。
復号は逆向きの計算なので、P=(C−K) mod 26です。
ここでの mod 26 は、26文字をひと回りしたら先頭へ戻る、という約束にほません。

筆者はこの対応を理解するとき、まず自分のノートに A=0、B=1、C=2 と Z=25 まで並べて書きました。
その一覧を横に置いて、足し算と引き算を手でやってみると、方陣で起きていたことが急に透明になります。
たとえば C は 2、鍵の A は 0 なので、2+0=2 で暗号文字は C のままです。
O は 14、R は 17 なので、14+17=31、ここで mod 26 を取ると 5 になり、F に戻ります。
D は 3、M は 12 だから 15 で P、E は 4、A は 0 だから 4 で E です。
こうして CFPE が式からも再現されます。

復号も同じだけ明快です。
暗号文の文字から鍵の値を引き、26文字の輪の中へ戻せば平文に戻ります。
たとえば F は 5、鍵の R は 17 なので、5−17 という負の値が出ますが、mod 26 の世界では 26 を足して 14 と見ればよく、これは O です。
方陣で左へ戻っていく感覚が、式では引き算として表現されているわけです。

同じ平文が鍵位置で散る理由

ヴィジュネル暗号が単一換字式暗号と決定的に違うのは、同じ平文文字でも、鍵位置が違えば別の暗号文字になる点です。
たとえば平文に E が何度も現れても、そこへ重なる鍵文字が A なら E のまま、B なら F、C なら G というように、送り先が変わります。
固定表ひとつで置き換えるのではなく、鍵の周期に従って複数の表を切り替えるため、文字の偏りがそのまま一つの暗号文字へ集まりません。

この「散り方」を紙で追ってみると、多表式暗号の狙いがよく見えます。
筆者は短い英文を自分で区切り、同じ文字だけに印を付けてから、鍵をずらして重ねることがあります。
すると、平文では同じだった文字が、鍵の位置ごとに別々の記号へ割れていきます。
目で見ると、一つの頻出文字が暗号文の中でばらけて配置される感覚があり、これが頻度の拡散です。

ただし、散るといっても無秩序ではありません。
鍵が短ければ、その並びは繰り返されます。
たとえば3文字の鍵なら、1文字目、4文字目、7文字目は同じ鍵文字で処理されます。
つまり暗号文全体では文字頻度が散って見えても、同じ鍵位置だけを縦にそろえると、そこには同じシフト規則が残ります。
ヴィジュネル暗号の巧妙さと弱点が同じ場所に宿るのはここで、表を切り替えることで全体の偏りを崩しつつ、鍵の周期が再び秩序を持ち込んでいるのです。

暗号化と復号を手でやってみる

ここでは、実際に紙の上でヴィジュネル暗号を往復させます。
短い語をひとつ暗号化してから同じ題材を復号すると、方陣で見えていた動きと mod 26 の計算がぴたりと重なり、規則が手触りとして残ります。
筆者自身、CODECFPE に変え、さらに CODE へ戻す一往復を追ったとき、この暗号の理解が定着しました。

準備:正規化と鍵の反復

まず入力をそろえます。
平文も鍵も英字を大文字にし、今回の例では codeCODEarmARM と見ます。
ヴィジュネル暗号は A から Z の 26 文字を 0 から 25 に対応させて扱うので、こうして形をそろえると、方陣でも数式でも同じ手順で追えます。

平文が鍵より長いときは、鍵を平文の長さまで繰り返します。
CODE は 4 文字、ARM は 3 文字なので、鍵は ARMA になります。
ここで読者の手元の紙にも、上の段に CODE、下の段に ARMA と書いてみてください。
この並びがずれると、その先の文字がすべて変わるので、最初の確認点になります。

非英字をどう扱うかも、実際に手でやる段になると気になります。
この節では英字だけで通しますが、少なくとも暗号化の前に「どこまでを文字列として処理するか」を決めておくと、途中で迷いません。
歴史上の運用でも、こうした前処理の揺れが結果の食い違いを生むことがありました。

暗号化ステップ

では CODE を鍵 ARM で暗号化してみます。
方陣で追うなら、鍵文字の行と平文文字の列の交点を読むだけです。
1 文字目は鍵が A、平文が C なので、A の行と C の列の交点は C です。
2 文字目は R の行と O の列で F、3 文字目は M の行と D の列で P、4 文字目は A の行と E の列で E になります。
ここで C、F、P、E と並べば、方陣の読み取りは正しく進んでいます。

同じ流れを数式でも確かめます。
A=0 から Z=25 の対応で、C=2、O=14、D=3、E=4、A=0、R=17、M=12 と置きます。
暗号化は C=(P+K) mod 26 なので、順に計算すると、2+0=2 で C、14+17=31 は mod 26 で 5 になり F、3+12=15 で P、4+0=4 で E です。
方陣で拾った結果と数式の結果が同じ CFPE になれば、二つの見方が一致したことになります。

筆者はこの段階で、読者にいったん手を止めて暗号文を声に出してみてほしいと思います。
CODECFPE へ変わる瞬間は、単なる置換ではなく、文字ごとに別のシフトがかかっていることを実感できる場面だからです。
特に 2 文字目の O が F へ飛ぶところは、単一のシーザー暗号とは違う多表式らしさがいちばん見えます。

💡 Tip

手計算では 2 文字目が最良の検算点です。O=14R=17 を足して 31、そこから 26 を引いて 5、つまり F になっていれば、mod 26 の回り込みを正しくつかめています。

復号ステップ

次に、今できた CFPE を同じ鍵 ARM で復号します。
ここで往復してみると、暗号化と復号が裏返しの関係にあることがはっきりします。
鍵は暗号化と同じく ARMA に並べます。

方陣で復号するなら、今度は鍵文字の行の中から暗号文字を探し、その列見出しを読みます。
A の行で C を探せば列は C、R の行で F を探せば列は O、M の行で P を探せば列は D、A の行で E を探せば列は E です。
こうして CODE が戻ります。
暗号化では交点を拾い、復号では同じ行の中を横にたどって元の列を見つけるわけです。

数式では P=(C−K) mod 26 を使います。
C は 2、F は 5、P は 15、E は 4、鍵は A=0、R=17、M=12、A=0 です。
順に引くと、2−0=2 で C、5−17 はそのままだと負になりますが 26 を足して 14 と見て O、15−12=3 で D、4−0=4 で E です。
ここでも CODE に戻れば正解です。

この一往復を自分の手でやると、理解が一段深くなります。
暗号化だけだと「表から文字を拾った」感覚で終わることがありますが、復号まで通すと、引き算で元へ戻る構造が体に入ります。
筆者も最初は方陣の操作だけで満足していましたが、同じ CFPECODE に戻したとき、式が単なる飾りではなく、方陣の動きをそのまま言い換えたものだと腑に落ちました。

追加例:MESSAGE/SECRET→EIUJEZW

もうひとつ、鍵の反復が見えやすい補助例として、平文 MESSAGE と鍵 SECRET を重ねます。
平文は 7 文字、鍵は 6 文字なので、鍵は SECRETS ではなく、先頭に戻って SECRETS ならぬ SECRETS と見たくなるところですが、実際には SECRET を繰り返して 7 文字にそろえた SECRETS ではなく、SECRETS という結果になる形で先頭の S が 7 文字目に重なります。
手元では MESSAGE の下に SECRETS と書けば並びが確認できます。

この例の暗号文は EIUJEZW です。
検算の要所をいくつか押さえると、途中でずれにくくなります。
1 文字目は M と S の組み合わせで E、2 文字目は E と E で I になります。
ここで「同じ E でも鍵が変われば別の文字になる」という性質がまた見えてきます。
7 文字目は E に S が重なって W になるので、末尾まで気を抜かずに鍵を反復できているか確認できます。

この補助例は、短い CODE の例より少しだけ長いため、鍵の周期を意識する練習にも向いています。
SECRET という 6 文字の鍵を 7 文字の平文に重ねると、どこで鍵が先頭へ戻るのかが目でわかります。
その感覚を持っておくと、後に鍵の周期性が弱点になる理由も、単なる理屈ではなく、紙の上の規則として見えてきます。

なぜ強かったのか——頻度分析を拡散した多表式の発想

ヴィジュネル暗号の強さは、ひとことで言えば頻度分析の標的を散らしたことにあります。
単一換字式では、たとえば平文の E は暗号文でもつねに同じ一文字へ写ります。
だから長い文書を集めれば、その文字だけが目立ってきます。
ところがヴィジュネル暗号では、E であっても鍵位置が違えば別々の文字へ送られます。
同じ E が、ある位置では C に、別の位置では F に、また別の位置では H に、と分かれて現れるので、暗号文全体をひとまとめに数えても、単一換字のような鋭い突出が出にくくなります。

筆者はこの性質を説明するとき、短い英文を用意して、鍵の開始位置だけを1周期ずらしながら何度か暗号化したことがあります。
すると、同じ E が並んでいても、暗号文の側では C、F、H とばらけて現れました。
紙の上でそれを横に並べて眺めると、単一換字なら一か所に集まるはずの癖が、鍵の反復によって細かく散っていく様子がよく見えます。
しかも、その散り方は無秩序なノイズではなく、鍵に従った規則正しい分散です。
ここに多表式の面白さと、当時としての実用的な強みが同時にあります。

この「散り方」は、実際に数えてみるとさらに腑に落ちます。
筆者は暗号文全体の文字頻度を自分の手で数え、単一換字のときに立っていた山が、ヴィジュネルではなだらかになる感覚を確かめました。
もちろん頻度そのものが消えるわけではありませんが、全体を一枚で見たときに、すぐ犯人扱いできる文字が減るのです。
手作業で解読する側から見れば、これは厄介でした。
まず「この文字が E だろう」と決め打ちする足場が崩れるからです。

16世紀から18世紀の実務を想像すると、この差は小さくありません。
いまなら機械的に試せる操作も、当時は人が目で拾い、紙に写し、列を分け、仮説を戻して確かめるしかありませんでした。
ヴィジュネル暗号は、鍵の周期が見えないかぎり、暗号文をそのまま眺めても単一換字として扱えません。
解読者はまず「何文字ごとに鍵が繰り返されているか」をつかまなければならず、その前段階だけで手間が一段増えます。
周期が割り出せなければ、頻度分析そのものをどこに適用するか決められないのです。

ここで効いてくるのは、方式そのものの美しさだけではありません。
現場の条件も大きかったはずです。
十分な長さの暗号文が毎回そろうとは限らず、同じ鍵で大量の文書を比較できるとも限りません。
鍵の管理が統一されていなければ資料の束はばらけ、人員が潤沢でなければ地道な比較作業は進みません。
そうした事情が重なると、ヴィジュネル暗号は理論上というより、実務上「解きにくい」暗号として立ち現れます。
そうして広まったのが、le chiffre indéchiffrable、すなわち「解読不能な暗号」という評判でした。

ただ、この呼び名は当時の評価としては理解できても、文字通りの絶対安全を意味しません。
前述の通り、鍵を繰り返す以上、周期性そのものは残ります。
そこをつかまれれば、多表式で散った頻度は列ごとに再び集め直され、各列を単一換字として扱う道が開けます。
評判が高かったのは、それが魔法の仕組みだったからではなく、同時代の文書量、鍵運用、作業環境の中で、解読者に要求する手間を一気に押し上げたからです。
ヴィジュネル暗号の強さは、この歴史的な条件込みで見ると、いっそう実像に近づきます。

なぜ破られたのか——鍵の周期性とカシスキー法

繰り返し列を探す

鍵が反復されるヴィジュネル暗号では、平文のある並びが、たまたま同じ鍵位置に重なってもう一度現れると、暗号文側にも同じ文字列が出ます。
ここに周期性の弱点があります。
暗号文は一見ばらけていますが、鍵の回転は機械の歯車のように同じ間隔で戻ってくるため、長めの文ではその痕跡が繰り返し列として残ります。

筆者はこの説明をするとき、まず短い暗号文を紙に写して、目で同じ並びを探す演習をよくします。
たとえば ABCTYZABCQRS のようなサンプルを置くと、先頭付近の ABC が少し後ろにもう一度現れているのがすぐ見つかります。
ここで大げさな計算はまだ要りません。
ただ「同じ3文字列がどこに、何文字離れて現れたか」を余白にメモしていくと、暗号文の表面に隠れていた周期の手触りが出てきます。

もちろん、同じ3文字が出たからといって、必ず鍵周期をそのまま示すわけではありません。
平文に同じ断片があっただけかもしれませんし、偶然の一致もあります。
それでも、繰り返し列が複数見つかり、それらの間隔に共通した割り切れ方が見えてくると、鍵長を推定する材料として一気に意味を持ち始めます。

間隔の公約数で鍵長を推定

Kasiski examinationの核心は、繰り返し列そのものではなく、その出現間隔に注目する点にあります。
同じ鍵位置で同じ平文断片が暗号化されたなら、2つの出現位置の差は鍵長の倍数になりやすい、という発想です。
そこで複数の繰り返し列について間隔を集め、その公約数を見ていくと、鍵長の候補が浮かび上がります。

手作業で試すと、この考え方は驚くほど素朴です。
先ほどの ABCTYZABCQRS なら、ABC の1回目と2回目の開始位置の差を数えて、間隔をメモします。
別の繰り返し列も拾えたら、同じように差を並べます。
筆者はこの段階で、子どものころの算数に戻ったような気分になります。
複数の数の最大公約数を紙の端で計算し、「3か、6か」と候補を書き出していくと、暗号解読が特別な魔術ではなく、周期の観察であることがよくわかります。

ここで出てくるのは「唯一の正解」ではなく、たいてい複数の候補です。
鍵長が6なら、間隔は3の倍数にも見えることがあります。
したがって、公約数はそのまま確定値ではなく、鍵長候補の絞り込みとして扱います。
この手順を歴史的に公表したのが1863年のFriedrich Kasiskiで、同じ原理にCharles Babbageも独立に到達していました。
ただ、後者は公刊しなかったため、解読法の名として残ったのはカシスキーの方でした。

列ごとの頻度分析で復号

鍵長が見えた瞬間、ヴィジュネル暗号は再び扱いやすい形に戻ります。
暗号文を鍵長ごとに縦へ並べ、同じ鍵位置で暗号化された文字だけを集めると、各列はひとつのシフトだけで動く単一換字になります。
言い換えると、各列はシーザー暗号として読めるようになるのです。
暗号文全体では散っていた頻度が、列単位ではまた集まり直します。

筆者はこの段階で、推定した鍵長を仮に3として暗号文を3列に分け、まず1列だけを眺めます。
そこで英語なら E が出やすいという前提を置き、列内で最も目立つ文字を E の暗号化結果だと仮定して、シフトをひとつ試します。
この「まず1列だけ」というやり方が手作業では効きます。
全列を一気に片づけようとすると混乱しますが、1列でそれらしい語の断片が見え始めると、鍵の一文字が定まり、残りの列にも同じ調子で手が伸びます。

ヴィジュネル方陣を使って暗号化していたときは複数の表を切り替えているように見えたものが、列に分けた途端、実態はシーザー暗号の束だったとわかる瞬間があります。
ここがこの方式の転換点です。
強さの源だった「多表式」は、鍵長がわからない間だけ解読者を惑わせます。
周期が割れると、その複雑さは列ごとの単純さへほどけていきます。

短文での限界と注意点

もっとも、カシスキー法はいつでも同じ精度で働くわけではありません。
暗号文が短いと、繰り返し列そのものがほとんど見つからず、間隔の材料が足りません。
たまたま同じ3文字が揃っただけの偶然一致を本物の手がかりと見間違えることもありますし、平文の癖によっては間隔がきれいに並ばないこともあります。
鍵長推定が不安定になるのは、方式の欠点というより、観察できる痕跡が少ないからです。

この不安定さは、紙の上で試すとよくわかります。
繰り返し列をひとつ見つけただけでは、鍵長3にも6にも読めます。
列分割しても、短い列では文字頻度がまだらで、E を軸にしたシーザー復号も決め手に欠けます。
そこで複数の候補を並行して試し、列ごとの復号結果が単語として自然につながるかを見ていく必要が出ます。

つまり、ヴィジュネル暗号が破られたのは「実は単純だった」からではありません。
繰り返し鍵が残す周期性を見抜く方法が整い、暗号文を正しい幅で裂く手順が知られたからです。
その裂け目の先で待っているのは、もはや多表式の迷路ではなく、シーザー暗号の列でした。
ここに、長く難攻不落と見られた方式が19世紀に古典的解読の対象へ変わっていく、歴史上のはっきりした転換点があります。
ここで多表式の迷路が、手順を整理することで列ごとのシーザー暗号へと分解され始めたのです。
暗号文の長さや鍵の運用など、条件が揃えばこの分解はよりはっきりと現れます。

派生形とその先——Beaufort、Autokey、Running Key、ワンタイムパッドへ

ヴィジュネル暗号が破られたとき、古典暗号の歴史はそこで終わりませんでした。
むしろ、弱点がはっきり見えたからこそ、「同じ多表式でも別の運用はできないか」「鍵の繰り返しそのものを薄められないか」という発想が次々に現れます。
Beaufort、Autokey、Running keyはその試行錯誤の連なりであり、その先には、鍵を反復せず、乱数で、しかも使い捨てにするワンタイムパッドという極点が見えてきます。

Beaufortの特徴と違い

Beaufort暗号は、見た目にも仕組みにもヴィジュネル暗号と近い親族です。
どちらも複数のシーザー暗号を切り替える多表式の系統に属しており、文字を 0 から 25 に対応させて法 26 で扱うという骨格も同じです。
違いは計算の向きにあり、ヴィジュネルが平文に鍵を足す形で動くのに対して、Beaufortは鍵から平文を引く形で表されます。

この差は手作業では意外に印象を変えます。
ヴィジュネルでは暗号化と復号で逆向きの手順を意識しますが、Beaufortには自己逆変換の性質があり、同じ規則で戻せるという扱いやすさがあります。
机上で方陣をたどると、操作感は少し違って見えるのに、解読史の目で見ると本質的な強さはほとんど変わりません。
鍵を反復して使うかぎり周期性は残り、列に分ければ単一換字の束へ還元できるという事情も同じだからです。

そのため、Beaufortは「ヴィジュネルの弱点を根本から解決した新方式」というより、同じ地平での別流儀と見るほうが正確です。
暗号表の読み方や運用の感触に個性はあっても、解読者の前に現れる構造的な課題はほぼ共通しています。
歴史的に見ても、これは改良というより変奏です。

Autokeyの発想と利点・弱点

そこで一段踏み込んだのがAutokeyです。
この方式の核心は、短い鍵語を延々と繰り返すのではなく、途中から平文そのもので鍵列を延長する点にあります。
ヴィジュネル暗号の最大の弱点が反復鍵の周期性にあった以上、周期そのものをぼかしてしまおうという発想は、とても自然です。

筆者は同じ平文を通常のヴィジュネルとAutokeyで並べてみたとき、暗号文の表情が変わるのを実感しました。
反復鍵のヴィジュネルでは、長めの文になると同じ鍵位置がめぐってくるため、繰り返し列の芽がところどころに顔を出します。
ところがAutokeyでは、鍵列の後半が平文に引っぱられて伸びるので、同じ断片が同じ鍵位置で再登場する場面がぐっと減ります。
カシスキー法や一致指数のように、周期の痕跡を足場にする解析がそのぶん働きにくくなるのです。

ただし、ここで安全になったと言い切るのは早計です。
Autokeyは周期性を薄めますが、鍵列の一部が平文に由来するという別の癖を抱え込みます。
反復鍵という弱点を避ける代わりに、自己参照的な構造を持ち込んでしまうわけです。
平文の言語的な偏りや、文頭からの手がかりが連鎖すると、そこから鍵列の復元へつながる余地が生まれます。

この点がAutokeyの面白さでもあります。
ヴィジュネル暗号に対する不満に真正面から答えつつ、解読者には別の入口を渡してしまうからです。
歴史上の改良案は、古い欠点を消す代わりに新しい癖を露出させることが多いのですが、Autokeyはその典型と言えます。

Running keyと長鍵化の狙い

Running key暗号は、さらに露骨に「鍵を長くしてしまおう」と考えた方式です。
短い鍵語を反復するから周期が見えるのなら、最初から長い鍵文を使えばよい。
典型的には書籍や文章の一節を鍵として用い、平文と同じくらい長い鍵列を確保しようとします。
この方式の記述は 1892 年には見られ、ヴィジュネル暗号の弱点が知られた後に、どの方向へ発想が伸びたかをよく示しています。

筆者がこの方式を考えるとき、まず頭に浮かぶのは新聞の見出しです。
たとえば一行ぶんの見出しを鍵にしたらどうなるかと想像すると、反復鍵のようなきれいな周期は目に見えて崩れます。
三文字おき、六文字おきに同じ鍵位置が戻ってくるわけではないので、暗号文の表面から鍵長を拾う作業は急に難しくなります。
カシスキー法がつかまえる「規則正しい間隔」は、ここでは輪郭を失います。

とはいえ、Running keyも万能ではありません。
鍵に使う文章が自然言語である以上、そこには語の偏り、文字頻度、言い回しの癖があります。
乱数列ではなく、人間が読む文章であること自体が統計的な痕跡を残します。
鍵を長くしたことで周期性は抑えられても、鍵文の言語性という別の弱点は残るのです。
書籍の一節も新聞見出しも、一見ばらけて見えて、実際には人間の言葉のリズムから逃れていません。

それでも、この方式が示した方向は明快でした。
暗号の強さを上げるには、単に方陣の読み方を変えるだけでは足りず、鍵そのものを非反復に近づける必要がある
Running keyは、その思想を古典暗号の枠内で押し広げた試みでした。

ワンタイムパッドとの接点

Running keyの発想をさらに押し進めると、ワンタイムパッドに行き着きます。
鍵は本文と同じ長さを持ち、反復せず、しかも真にランダムで、使ったら二度と再利用しない。
この条件がそろったとき、多表式換字は理論的安全性を持つ地点へ達します。
ここではもう、「周期があるか」「鍵文が自然言語か」という古典暗号の悩みが消えます。

AutokeyもRunning keyも、ヴィジュネル暗号の弱点を見つめた末に、鍵列をできるだけ反復から遠ざけようとした方式でした。
その延長線上で、「ならば鍵を反復しないように(例えば鍵を一度しか使わないなど)し、言語性も捨て、乱数にすればよい」という結論が現れるのは自然です。
歴史の流れとして見ると、ワンタイムパッドは突然の飛躍ではなく、ヴィジュネル型暗号が抱えた周期性との長い格闘の果てにある到達点です。

ただし、その代償は大きいです。
本文と同じ長さの乱数鍵を毎回用意し、安全に相手へ渡し、再利用を絶対に避ける運用は、理論の美しさとは別の重さを持ちます。
紙とペンの暗号として眺めると、ワンタイムパッドは古典暗号の夢の完成形に見えますが、現実の運用では鍵配送の負担が一気に前面へ出ます。
ここで暗号の歴史は、数式や方陣だけでなく、通信路と管理の問題へ深く踏み込んでいきます。

比較でわかる位置づけ

ヴィジュネル暗号の位置づけは、単純なシーザー暗号の延長でありながら、その弱点に対するひとつの歴史的回答だった点にあります。
単一のずらしでは露出してしまう文字頻度を、複数のシフトへ散らして見えにくくしたのが革新で、同時にその「繰り返し鍵」が次の弱点も生みました。

シーザー暗号との対比

シーザー暗号は、平文の全文字に同じシフトをかけるだけの単一換字です。
構造は明快ですが、その明快さゆえに、長めの暗号文では言語の文字頻度がそのまま顔を出します。
英語ならよく現れる文字の偏りが、暗号文でも一つの文字へ集まりやすく、全体頻度を見るだけで手がかりが得られます。

ヴィジュネル暗号は、この弱点に対して「一つのシフトで足りないなら、鍵に応じて複数のシフトを切り替えよう」と応じました。
方陣の見た目は表ですが、中身は 0 から 25 への写像に基づく mod 26 の計算で、各文字ごとに別のシーザー暗号を当てているのと同じです。
シーザー暗号を捨てたのではなく、複数本を束ねて運用したのがヴィジュネル暗号だと言えます。

筆者はこの違いを確かめたくて、同じ平文をシーザー暗号とヴィジュネル暗号で暗号化し、出現回数の棒グラフを手で描いて比べたことがあります。
シーザー暗号では、平文で多い文字がそのまま別の一文字へ横滑りしただけなので、棒の高低差が比較的くっきり残りました。
ところがヴィジュネル暗号では、同じ文字が鍵位置ごとに別の暗号文字へ振り分けられるため、棒がいくつもの列に散り、ぱっと見で「この文字が怪しい」と言いにくくなります。
この「頻度を拡散する感じ」は、紙の上でグラフにするとよく見えます。

ただし、ここで起きているのは無秩序化ではありません。
ヴィジュネル暗号は 26×26 の方陣を使う多表式換字で、規則は一貫しています。
シーザー暗号より一段複雑になったとはいえ、解読不能な別世界へ飛んだのではなく、単一換字から多表式へ進んだ歴史上の一歩として眺めると輪郭がはっきりします。

多表式派生の比較

ヴィジュネル暗号のあとに現れる派生形は、どれも「複数の換字表をどう使うか」という問いへの別解です。
系譜として見ると、中心にあるのはあくまでヴィジュネル型の発想で、そこから鍵の扱いを変えて癖を調整していった流れが見えます。

Beaufort暗号は、構造がヴィジュネル型にきわめて近く、歴史上も同じ系統の変奏として理解するのが自然です。
見かけの手順に違いはあっても、解読上の性質はおおむね同じ場所にあり、反復鍵を使うかぎり周期性の問題からは自由になれません。
前節で触れた通り、これは改良というより、同じ楽器で別の旋律を弾いたような違いです。

Autokeyは一歩踏み込み、反復鍵そのものを薄めようとしました。
短い鍵語のあとを平文で埋めるため、通常のヴィジュネル暗号のような規則正しい周期が前面に出にくくなります。
その代わり、鍵列の内部に平文由来の構造が入り込み、別の方向からほころびが生まれます。
周期性を削ったぶん、自己参照的な性質が前へ出るわけです。

Running keyは、さらに「鍵を長くする」側へ舵を切った方式です。
平文と同じくらい長い鍵文を用意できれば、短い鍵の反復で生まれる周期は目立たなくなります。
ただし、鍵が自然言語の文章である以上、そこには言語の偏りが残ります。
ヴィジュネル暗号より先へ進んではいるものの、まだ人間の言葉の統計から離れきってはいません。

この並びの中でヴィジュネル暗号は、古典多表式暗号の代表としてちょうど中間に立っています。
シーザー暗号よりは一段込み入っており、AutokeyやRunning keyほど鍵運用を先鋭化させてもいない。
古典暗号の授業でしばしば基準点になるのは、そのためです。
単一換字の弱点、複数表の効果、そして反復鍵の限界が、ひとつの方式の中にまとまって見えるからです。

長い鍵という発想の行き着く先

ヴィジュネル暗号を比較の中心に置くと、古典暗号がどこへ向かったかも見えてきます。
答えは単純で、「もっと長い鍵、もっと反復しない鍵」です。
短い鍵を繰り返すかぎり、鍵長はいつか暗号文に影を落とします。
そこから逃れるために、Autokeyは鍵列を平文で延長し、Running keyは鍵文そのものを長くしました。

この流れを考えると、長い鍵への憧れは理論だけでなく、実感としても理解できます。
たとえば鍵長を 3 文字から 6 文字へ伸ばすだけで候補数は 26 の累乗で膨らみ、8 文字になると組合せは一気に重くなります。
筆者はこの種の計算を紙に書き出すたび、短い覚えやすい単語を鍵にしたくなる人間の心理と、解析側がそこを突いてくる現実の距離を感じます。
人がそのまま覚えられるランダムな 8 文字は、四桁の暗証番号よりずっと記憶の負担が大きく、そこで多くの人は意味のある語へ戻ってしまうからです。

その先端にあるのがワンタイムパッドです。
平文と同じ長さの鍵を用い、反復せず、使い回さない。
この地点まで行くと、ヴィジュネル暗号以来の「周期がばれる」という問題は消えます。
歴史の流れとして眺めれば、これは突然の断絶ではなく、ヴィジュネル型暗号が抱えていた反復鍵の悩みを、ひたすら押し詰めた先に現れた帰結です。

こうして比べると、ヴィジュネル暗号は古典暗号史の途中駅としてきわめて見通しのよい場所にあります。
シーザー暗号より進んだ理由も、その先にAutokeyRunning keyワンタイムパッドが生まれる理由も、この方式をひとつ丁寧に追うだけで見えてくるのです。

まとめ

ヴィジュネル暗号は、単一換字では隠しきれなかった文字頻度を散らすために生まれ、手作業の時代にはそのひと手間が解読側の負担を押し上げました。
けれども鍵を繰り返す以上、周期は暗号文に影を落とし、そこを突かれて敗れます。
だからこそこれは現代の実用暗号ではなく、暗号がどう強くなり、どこで破れるのかを一つの流れで学べる、暗号史と学習用の題材としてよくできた方式です。

参考文献・外部リンク:

  • Britannica(Vigenère cipher の解説)
  • Kasiski 検査法(手順と例)

シェア

織部 沙耶

科学史・技術史を専門とする歴史研究者。エニグマ解読からWWII暗号戦まで、暗号が歴史を動かした瞬間を一次資料に基づいて描きます。

関連記事

古典暗号

紙とペンを手にCATと書き、その場で二通りいじってみると、古典暗号の景色が一気に開けます。文字そのものを別の文字に替えれば換字になり、同じ三文字のまま並びだけを入れ替えれば転置になる――同じ平文でも、前者ではFDWのように姿が変わり、後者ではTCAのように位置だけが動きます。

古典暗号

ピッグペン暗号は、図形記号を使う単一換字式暗号です。筆者も最初は紙に二つの3×3格子と二つのX字を書き、HELLOを一文字ずつ記号に置き換えてみましたが、読めない形が並んでいるのに自分だけは意味を知っている、その妙な手応えが強く残りました。

古典暗号

古代スパルタで使われたと伝えられるスキュタレーは、棒に細長い帯を巻いて文字を書き、ほどくと読めなくなる道具であり、そのまま方式名としても語られる古典暗号です。文字を別の文字に置き換えるのではなく、順序だけを入れ替える転置式暗号で、鍵になるのは送受信者が同じ直径の棒、

古典暗号

映画で見た光るランプの列を思い出しながら、筆者が紙の上で追ってみると、エニグマの1文字は右から左へ進み、反射して、また左から右へ戻る小さな旅をしています。その往復のあいだに、キーボード、プラグボード、ローター、リフレクター、ランプがどう噛み合うのかまで見えてくると、この機械は「複雑な箱」ではなく、