古典暗号

シーザー暗号の解き方|総当たりと頻度分析で解読

更新: 桐生 遼介
古典暗号

シーザー暗号の解き方|総当たりと頻度分析で解読

謎解きイベントの会場で、紙片にKHOORとだけ書かれていたことがあります。筆者はその場で A から Z の円環を指でなぞり、3つ戻してHELLOを取り戻しました。シーザー暗号はこうして手で追えるくらい素朴な暗号ですが、解き方の筋道を知っているかどうかで、見える景色が変わります。

謎解きイベントの会場で、紙片にKHOORとだけ書かれていたことがあります。
筆者はその場で A から Z の円環を指でなぞり、3つ戻してHELLOを取り戻しました。
シーザー暗号はこうして手で追えるくらい素朴な暗号ですが、解き方の筋道を知っているかどうかで、見える景色が変わります。

この記事は、映画やパズルで見かけるシーザー暗号を自力で解いてみたい初心者に向けた実践ガイドです。
まずは 1 から 25 までのシフトを全部試して候補を必ず出す方法を押さえ、そのうえで頻度分析を使って当たりを早く絞る考え方へ進みます。

本文ではHELLOがKHOORになる手計算と、そこから逆に戻す確認まで丁寧にたどります。
IC やカイ二乗法にも触れますが、主役はあくまで総当たりと頻度の見方で、統計は迷ったときに背中を押す補助輪として使うのが、この暗号を一番気持ちよく解くコツです。

シーザー暗号とは何か

定義と分類

シーザー暗号は、平文の各文字を一定数だけずらして別の文字に置き換える暗号です。
分類としては単一換字式暗号に属します。
英語では monoalphabetic substitution cipher と呼ばれ、1つの対応表を文全体で使い続けるのが特徴です。
たとえばシフト3なら、A は D、B は E、H は K という具合に対応し、HELLOKHOOR になります。

ここで大切なのは、文字ごとに別々の規則を使うのではなく、全体で同じずらし方を保つ点です。
そのため暗号文の見た目は変わっても、元の言語が持つ文字頻度の偏りまでは消えません。
英語で e や t が出やすいという傾向は、文字そのものの位置が移るだけで、山の形はそのまま横にスライドします。
シーザー暗号が「仕組みはきれいだが、解析にも素直」という顔を持つのはこのためです。

筆者は古典暗号を説明するとき、シーザー暗号を「アルファベットのものさしを横にずらすだけの暗号」と考えています。
ルールが一目で追えるので、暗号の入口としてこれ以上ないほど親切です。
その一方で、規則が一定であること自体が弱点にもなります。
入門でよく扱われる理由は、このわかりやすさと脆さが同居しているからです。

鍵=シフト数と有効鍵25通り

シーザー暗号の鍵は、どれだけ文字をずらすかというシフト数です。
英字アルファベットを26文字で扱うなら、計算は 26 を法とする循環になります。
つまり Z の次は A に戻り、ずらし方は円環として考えます。

このとき数え方で迷いやすいのが鍵の個数です。
0 から 25 まで数えれば 26 通りありますが、0 シフトは何も変換しないので暗号になっていません。
26 シフトも結果は 0 シフトと同じです。
したがって、実際に意味のある鍵として押さえるなら有効鍵は25通りと整理するのが自然です。
総当たり攻撃で試す対象が 1 から 25 までで済む、という話にもそのままつながります。

この少なさは、現代の感覚では驚くほど小さい数字です。
25通りしかないなら、紙と鉛筆でも全部試せますし、プログラムなら一瞬で候補を並べられます。
シーザー暗号の解読が「難問」になりにくいのは、鍵空間そのものが狭いからです。

また、資料によって「右に3ずらす」「左に3ずらす」と表現が分かれることがありますが、混乱しないコツは平文と暗号文の対応を実例で見ることです。
本記事では HELLO → KHOOR という向きで統一して考えれば十分です。
方向の言い方が違っても、対応表が一致していれば同じ暗号を説明しています。

名称の由来と歴史的背景

名称の由来は、ローマの政治家・軍人であるガイウス・ユリウス・カエサルです。
英語圏ではGaius Julius Caesarの名にちなんで Caesar cipher と呼ばれます。
古代ローマで使われた暗号法として語られることが多く、歴史家スエトニウスの記述と結びつけて説明されるのが定番です。

古典暗号の世界では、この由来だけでもう少し面白くなります。
暗号というと現代は複雑な数学や巨大な鍵長を連想しがちです。
一方、シーザー暗号はその対極にあり、紙の上で追えるほど単純で、それでも「通信内容をそのまま読ませない」という発想がはっきり示されています。
暗号史の展示ケースに入っていても違和感のない、原型的な方式なのです。

シーザー暗号の中でも有名な特殊例がROT13です。
これは 13 文字ぶん回転させる方式で、A は N、B は O、H は U に対応します。
たとえば URYYB は ROT13 で戻すと HELLO になります。

筆者が CTF の入門問題で URYYB を見たとき、この 5 文字だけで ROT13 だと気づき、その場で HELLO にひっくり返った瞬間がありました。
総当たりというほどの手数もいらず、「あ、これは真ん中で折り返すやつだ」と分かると一気に景色が開けます。
シーザー暗号の中でも ROT13 がとくに広く知られているのは、見抜けた瞬間の気持ちよさがあるからだと思います。

ROT13 にはもう1つ、覚えやすい性質があります。
13 を2回足すと 26 になるので、2回適用すると元に戻ります
暗号化と復号が同じ操作になる、というわけです。
これは 26 文字のアルファベットのちょうど半周だけ回しているから起こる現象です。

さらに視野を広げると、シーザー暗号は複数回かけても本質的には強くなりません。
たとえばシフト3をしてからシフト5をすると、結果はシフト8を1回したのと同じです。
一般に、複数回の適用はシフト量の和を 26 で割った余りにまとめられます。
つまり、何重にもかけたように見えても、最終的にはただの1回ぶんのシフトに畳み込めます。
見た目だけ層を重ねても、鍵候補が 25 通りという事実は変わりません。

現代のセキュリティという尺度で見ると、シーザー暗号は保護手段ではなく学習用の題材に分類されます。
総当たりなら 1 から 25 を順に試すだけで候補が並び、単一換字式のため文字頻度の偏りが残るからです。
英語文では e、t、a、o、i、n といった高頻度文字が手がかりになり、長めの文ほど当たりがつきやすくなる傾向があります。
統計的な補助指標(IC やカイ二乗)と組み合わせると、解析の安定性は向上しますが、短文では候補が複数残ることがある点に留意してください。

それでもシーザー暗号を学ぶ価値が薄いわけではありません。
むしろ、なぜ弱いのかを一目で理解できるところに教育的なおもしろさがあります。
鍵空間が小さいこと、規則が固定であること、頻度が保存されること、複数回かけても強度が増えないこと。
現代暗号が避けようとしてきた弱点が、ここには見本のように並んでいます。
古典暗号の最初の1本としてシーザー暗号が選ばれ続けるのは、その単純さの向こうに、暗号設計の基本原理がきれいに透けて見えるからです。

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

アルファベットの循環

シーザー暗号を頭でつかむコツは、AからZまでを一直線ではなく円環として見ることです。
A、B、C…と進んでZに着いたらその先で再びAに戻る。
このラップアラウンドがあるので、たとえば3文字分進める規則ならX→A、Y→B、Z→Cとなり、26文字をぐるりと回す操作として理解できます。

筆者は授業でアルファベットを二重の円盤にした簡単なディスクを厚紙で自作したことがあります。
外側に A〜Z、内側にも A〜Z を並べて、内側を 3 文字ぶん回すだけなのですが、そこで初めて Z の先が「途切れ」ではなく「つながっている」と手で分かりました。
紙の上では小さな規則でも、円盤を回すと遊園地の回転ドアのように自然に循環して見えます。
シーザー暗号が入門向きなのは、理屈より先にこの回る感覚を持てるからです。

例: HELLO→KHOOR を手計算

では、平文 HELLO をシフト +3 で暗号化してみます。ここでは平文から暗号文へ進むときに 3 文字足す、という書き方で統一します。

H は、H→I→J→K と 3 つ進めて K になります。
E は、E→F→G→H なので H ですね。
L は、L→M→N→O で O でしょう。
次の L も同じく O ですよ。
O は、O→P→Q→R で R です。

この結果、HELLOKHOOR になります。
1文字ずつ追うと、特別な計算は何もありません。
各文字に同じ操作をくり返しているだけです。
だからこそ、対応表が一度見えれば人の手でも追えますし、逆に言えば規則が単純なぶん破られやすい、という話にもつながります。

もし末尾付近の文字で試すなら、ラップアラウンドもすぐ確認できます。
たとえば Z+3 すると、Z→A→B→C となって C です。
ここで止まらず A に戻る動きが、シーザー暗号のいちばん大事な感触です。

逆変換: KHOOR→HELLO を手計算

復号はその逆で、暗号文から平文へ3 文字戻すだけです。KHOOR-3 でたどってみます。

K は、K→J→I→H と 3 つ戻して H になります。
H は、H→G→F→E なので E でしょう。
O は、O→N→M→L で L ですよ。
次の O も同じく L と思われます。
R は、R→Q→P→O で O です。

こうして KHOORHELLO に戻ります。
前のセクションでも触れた通り、会場で KHOOR という 5 文字だけを見て HELLO を取り戻せたのは、この逆向きの手計算がすぐ頭の中でできたからでした。
短い暗号文でも、円環を思い浮かべて数文字ぶん戻すだけで景色が開ける瞬間があります。

右/左シフト表記の注意

混乱を避けるには、方向の言葉より対応そのものを見るのが確実です。
本記事では 平文 HELLO暗号文 KHOOR を基準にして、平文から暗号文へは +3、暗号文から平文へは -3 と統一して説明します。
を基準にして、平文から暗号文へは +3、暗号文から平文へは -3 とそろえて考えます。

この形に固定すると、頭の中で迷子になりません。
右か左かを先に考えると、人によってはアルファベットの列を左から右へ見るのか、円盤をどちらに回すのかで解釈がぶれます。
けれど HK になる、K から H に戻る、という対応だけ押さえれば話は一直線です。
シーザー暗号では、方角の言い回しより対応表の向きのほうがずっと頼りになります。

ℹ️ Note

平文→暗号文を +3、暗号文→平文を -3 と固定しておくと、手計算でもプログラム実装でも迷いません。

文字種の扱い

古典的なシーザー暗号は、基本的にA〜Z の英大文字 26 文字を前提に説明されます。
小文字を扱う実装もありますが、その場合もふつうは a〜z を別の 26 文字として同じ規則で回します。
つまり、大文字は大文字の中で、小文字は小文字の中で循環させる形です。

一方で、空白、句読点、数字、日本語のかな、絵文字までまとめて何でもずらす実装は、古典暗号としてのシーザー暗号とは別の拡張です。
ツールとしては成立しますが、歴史的なシーザー暗号の説明とは切り分けて考えたほうが筋が通ります。
暗号の仕組みを理解する段階では、まず A〜Z の円環だけを見るほうがぶれません。

この整理をしておくと、HELLO, WORLD! のような文字列を見たときも扱いが明快です。
英字だけを +3 して、カンマや感嘆符や空白はそのまま残す、という実装が教育用ではよく使われます。
仕組みの中心にあるのは、あくまでアルファベットの循環シフトだからです。

総当たりで解く手順

前提と鍵空間

シーザー暗号を解くとき、いちばん確実なのは1 から 25 までの全シフトを順に試すやり方です。
理由は単純で、この暗号は 26 文字のアルファベットを一定数だけずらす仕組みなので、元に戻るだけの 0 と 26 を除けば、実質的な鍵候補は 25 通りしかないからです。
ヴィジュネル暗号のように鍵長とともに候補が爆発する方式とは違い、シーザー暗号は鍵空間が紙の上に並べ切れる大きさに収まっています。

ここが総当たりの強みです。
暗号文が 1 行でも 3 行でも、前提が「これはシーザー暗号だ」である限り、候補を出し切ること自体は難しくありません。
映画の金庫を開ける場面のように何万通りも試す話ではなく、25 枚のカードを順番にめくる程度の作業だと考えると感覚がつかめます。
しかも各候補は、同じ規則を全字に適用するだけで得られます。
手で追う方法としても、プログラムで回す方法としても、再現性が高い解法です。

手計算での総当たりステップ

手計算では、暗号文に対して復号シフトを 1、2、3……と順番に当てていきます。
ここで大切なのは、思いつきで飛ばさないことです。
3 から試したくなる気持ちはありますが、候補を見落とさないためには 1 から 25 まで機械的に進めるほうが堅実です。

実際の流れは次の通りです。

  1. 暗号文をそのまま紙に書き写します。
  2. 1 文字戻す候補を 1 行ぶん作成しておきますよ。
  3. 次に 2 文字戻す候補、3 文字戻す候補という順で並べます。
  4. 各行を見て、英語として読めるかをざっと判定してみます。
  5. 読めそうな候補に印を付け、単語や文法の自然さで絞り込みます。

3 行ほどの暗号文を相手にしたとき、筆者はこの方法をよく使います。
実際に 25 候補を紙に書き出したことがあり、そのときは 3 つの候補が「どれも英語としては読める」と感じられました。
ところが本文の中に日付らしい並びがあり、月名と数字のつながり方に注目すると 1 つだけ自然に読めたのです。
単語単体ではなく、文の中でどう噛み合うかを見ると、候補の景色が変わります。

長い文なら途中で当たりのシフトが目に飛び込んできますが、短文ではそうはいきません。
そのため、1 行ごとに「the」「and」「of」のような頻出語が現れるか、冠詞と名詞の並びが成立しているか、前置詞の後ろにそれらしい語が続くかを見ていきます。
英語は文字列の寄せ集めではなく、語順の癖を持った文章なので、読める候補は数文字見ただけでも手触りが違います。

💡 Tip

紙で試すなら、25 行を最初から作っておき、読めた候補に丸を付ける方式だと迷いません。頭の中だけで候補を保持すると、似た行がすぐ混ざります。

読める平文の選別ポイント

総当たりは「候補を出す」段階までは機械的ですが、「正解を見抜く」段階では人間の目が効きます。
選別の基準は、単に辞書にありそうな単語が含まれるかどうかだけではありません。
文章全体の自然さを見ます。

まず効くのは、英語の頻出語です。
theandof のような短い語は、当たり候補に顔を出しやすい代表格です。
2 語か 3 語の短文でも、冠詞 athe、前置詞 inof が自然な位置に置かれているかを見るだけで、当たりと外れの差が出ます。
暗号文が文の形を保っているなら、空白の位置も強い手がかりになります。
単語境界をまたいで変な綴りが続く候補は、読めそうに見えても落としてよい場面が多いです。

さらに見逃せないのが、文法のつながりです。
たとえば「the apple」のような並びはすっと読めても、「the quickly」では引っかかります。
名詞・動詞・前置詞の位置関係が崩れていないか、句読点の前後が自然か、文頭の大文字や固有名詞がそれらしい姿になっているかも判断材料になります。
日付表記、曜日、月名、人名、地名はとくに効きます。
筆者が 3 候補まで絞ってから正解に届いたときも、決め手は語彙の珍しさではなく、日付の並びが英語の文としてきれいに収まっていたことでした。

読める候補を選ぶ場面では、辞書語の有無より文として息をしているかを見る感覚が役立ちます。
暗号は 1 文字ずつずらして作られますが、正解の平文は 1 文字ずつではなく、語と文のまとまりとして自然に立ち上がります。

短文で複数候補が残るケース

短い暗号文では、総当たりをしても候補が 1 つに決まらないことがあります。
これは失敗ではなく、シーザー暗号の長さ依存の性質です。
文字数が少ないと、たまたま別のシフトでも辞書語らしい並びが生まれるからです。
英語では短い単語ほど衝突が起きやすく、2 語や 3 語だけの断片だと「読めるが文脈が足りない」候補が残ります。

たとえば 1 語だけの暗号文では、あるシフトで人名らしく見え、別のシフトで動詞らしく見えることがあります。
短い例語は紙の上で要検算になりやすく、見た目だけで断定すると外しやすいところです。
単語単体でぴたりと決めにいくより、周辺の文脈があるか、日付・曜日・地名・定型句のような強い手がかりがあるかで判断したほうが精度が上がります。

この曖昧さは、むしろ総当たりの正直なところでもあります。
頻度分析のような統計的な補助は中長文で力を発揮しますが、短文では統計がまだ育っていません。
その点、総当たりは必ず候補を出せます。
ただし短文では、正解がただ 1 つに見えないことがある
だからこそ、候補を並べたあとに文法、単語境界、句読点、固有名詞、日付表記のような人間の読みを重ねる必要があります。

(付録)擬似コードでの実装

紙で 25 行を書き出す手順は、そのままプログラムに移せます。
教育向けなら、文字を数値に直して 26 で折り返す形がいちばん追いやすいのが利点です。
Python風に書くと、考え方は次のようになります。

def caesar_decrypt(text, shift):
    result = ""

    for ch in text:
        if 'A' <= ch <= 'Z':
            base = ord('A')
            x = ord(ch) - base
            p = (x - shift) % 26
            result += chr(base + p)
        elif 'a' <= ch <= 'z':
            base = ord('a')
            x = ord(ch) - base
            p = (x - shift) % 26
            result += chr(base + p)
        else:
            result += ch

    return result

ciphertext = "KHOOR"

for shift in range(1, 26):
    candidate = caesar_decrypt(ciphertext, shift)
    print(shift, candidate)

この擬似コードでやっていることは、手計算と同じです。
shift を 1 から 25 まで変えながら、各文字をその数だけ戻しています。
英字以外をそのまま残しているので、空白や句読点の位置も候補判定に使えます。
紙の上で「この行は英語っぽい」と見ていた作業を、出力一覧を眺める形に置き換えただけです。

人手で候補を見分ける基準も、そのまま実装後の確認項目になります。
辞書語が含まれるか、冠詞や前置詞が不自然な位置にないか、単語境界が崩れていないか、句読点の前後が読める形か。
自動化で候補を出し、人間が最終判定する。
この役割分担が、シーザー暗号の総当たりではいちばん素直に機能します。

Welcome to Python.org www.python.org

頻度分析で鍵を推定する

頻度分析の原理

総当たりが「全部の鍵を順に試す」方法だとすれば、頻度分析は「文章のくせを手がかりに、当たりの方向を先に絞る」方法です。
シーザー暗号のような単一換字式では、文字そのものは別の文字に置き換わっても、出現頻度の偏りはそのまま移ります。
平文でよく出る文字は、暗号文でも別の文字としてよく出るわけです。

英語には文字ごとの偏りがあります。
よく現れる側には e, t, a, o, i, n があり、逆にめったに出ない文字もあります。
この偏りが残るので、暗号文をざっと数え、「やたら多い文字は何か」を見るだけでも、鍵の見当がつきます。
総当たりより一段抽象的ですが、やっていることは意外と素朴です。
暗号文を“文字の並び”ではなく、“分布の形”として眺める発想だと思うとつかみやすいはずです。

シーザー暗号では、ある文字が一定数だけずれて別の文字になるだけなので、頻度の山もそのまま横にずれます。
平文で e が多ければ、暗号文では「e が移った先の文字」が多くなります。
このため、最頻文字を起点にシフト量を逆算できます。
人手でも試せるのが、この方法の面白いところです。

高頻度文字と最頻=e仮定

初歩の頻度分析でよく使うのが、暗号文の最頻文字を平文の e に対応づけるやり方です。
英語では e の出現率が高いため、まずそこに仮置きしてみると、候補のシフトが一気に絞れます。
次に taoin も視野に入れて、「そのずれ方で単語らしい形が立ち上がるか」を見ていきます。

この手法は、最初の一歩としては優秀です。
25通りを全部並べなくても、有力候補から先に試せるからです。
とくに中くらい以上の長さの英文なら、最頻文字が本当に e 由来であることが多く、そこから一気に読める形まで届きます。

ただ、ここで筆者は一度きれいに外しました。
8語ほどの短い暗号文を前にして、最頻文字を素直に e へ当てたところ、冠詞も前置詞も妙にねじれた文しか出なかったのです。
そこで出現回数が3番目の文字を e に見立ててずらし直したら、今度は文の骨格が通りました。
短文では、たまたま e が目立たず、別の文字が上に来ることがあります。
頻度分析は勘ではなく統計ですが、統計はサンプルが少ないと揺れる、という当たり前の事実をそのとき痛感しました。

ℹ️ Note

最頻文字を e に置くのは出発点として有効ですが、1位だけで決め打ちしないのがコツです。2位や3位の文字も e 候補に入れて数通り試すと、短文での取りこぼしが減ります。

th, he, the などの連接パターン

文字を1文字ずつ見るだけでなく、連続して現れる組み合わせを見ると精度が上がります。
英語では thheiner のようなバイグラム、the のようなトリグラムが強い手がかりになります。
頻度分析が「山の位置」を見る方法だとすれば、連接パターンは「地形の形」を見る方法です。

たとえば、あるシフトで復号候補の中に the が自然に現れ、その周辺にも heth が散っているなら、その候補はぐっと有力になります。
逆に、最頻文字の対応は合っていそうでも、qzxj のような英語で出にくい連接ばかり並ぶなら、どこかで見立てを間違えています。

ここで役立つのは、単語を丸ごと当てようとしすぎないことです。
the は有名なので目を奪われますが、実際には thhe が別々の位置で何度か現れるだけでも十分に強い材料になります。
短い文では the が一度も出ないこともあるので、anreou のようなありふれた組み合わせまで視野を広げると、候補の見分け方が安定します。

総当たりの節で触れた「文として息をしているか」という感覚も、ここでは連接パターンとして言い換えられます。
文字列が英語らしい呼吸をしているかどうかは、1文字の頻度だけでなく、隣り合う文字のつながりにも表れるからです。

長文で有効・短文の限界

頻度分析は、文章が長いほど当たります。
文字数が増えるほど、英語本来の偏りが暗号文にもきれいに残るためです。
長文なら et の山が見えやすく、ththe も観察しやすくなります。
逆に短文は揺れます。
数語しかない断片では、固有名詞や同じ母音の偏りなどで結果がゆがむことがあり、経験的には6文字前後で当たりが付く場合もありますが、テキストの性質に大きく依存して不安定です。
候補が1つに収束するより、いくつかの「それらしい」候補が並ぶことが多いのです。
頻度分析は短文では単独で決め切ることが難しいと捉えると整理しやすいのが利点です。
短文では複数の仮定を並べ、連接や空白位置など他の手がかりと併用することが現実的です。

歴史的言及:キンディー

頻度分析は、古典暗号の中でも歴史の厚みを感じる技法です。
9世紀には、アラブの学者キンディー(Al-Kindi)がこの考え方を体系的に記していました。
単語の意味を当てずっぽうで探すのではなく、文字の出現回数という観察可能な事実から攻める。
現代の感覚でいえば、データを数えて仮説を立てる発想です。
古典暗号の世界に、すでに統計的なものの見方が芽生えていたわけです。

この歴史を知ると、頻度分析は単なる小技ではなく、暗号解読を“ひらめき”から“方法”へ押し進めた一歩だったことが見えてきます。
シーザー暗号のような単純な方式が、なぜ長い目で見ると守り切れないのかも、ここで腑に落ちます。
文字の偏りという人間の言語のくせは、思っている以上にしぶとく、置換しただけでは消えません。
だからこそ後の時代には、その偏りを散らす多表式暗号が工夫されていくのです。

より確からしく当てる補助指標

Index of Coincidence(IC)は「その文字列に、自然言語らしい偏りがどれくらい残っているか」を測る指標です。
英語の一般文ではこの値が概ね 0.065〜0.067 に寄ることが多く、ランダムな文字列では約 0.038 前後になるのが目安です。
とはいえこれはあくまで経験則であり、言語や文体、サンプル長によって変動します(短文ではぶれやすい)。
詳しい定義や数式・例は外部解説を参照してください(例:

Caesarでのカイ二乗スコアリング

シーザー暗号で自動化に一歩踏み込むなら、カイ二乗法がよく合います。
考え方はシンプルで、全25候補を復号し、それぞれの文字頻度が英語の理想的な頻度分布とどれだけずれているかを比べ、ずれが最も小さい候補を有力とみなす、という流れです。
数式そのものを追いかけなくても、「英語らしさを点数化して順位をつける」と捉えれば十分です。

この方法のよいところは、人の目で見ていた「なんとなく英文っぽい」を数値に置き換えられる点です。
前の節では最頻文字や thhe を手がかりにしましたが、カイ二乗スコアはそれをもう少し機械的に、しかも25候補すべてに同じ物差しで当ててくれます。
総当たりが候補を漏らさず並べる方法だとすれば、カイ二乗はその候補に点数をつけて整列させる方法です。

筆者も、だいたい一段落ぶんの暗号文を相手にして、25通りの復号候補にカイ二乗値を付けて表に並べたことがあります。
そのときは上位3候補だけ読めば十分で、最上位は単語のつながりも自然、2位と3位も「惜しいが何かがおかしい」という並びになりました。
数字だけを見て決めたのに、人間の直感で読んだ感触ときれいに一致したのが印象に残っています。
統計が感覚を置き換えるというより、感覚の輪郭をはっきりさせる道具だと感じた瞬間でした。
数値による順位付けと人間の直感が一致した経験が印象に残っています。
統計は感覚を置き換えるのではなく、その輪郭をはっきりさせる道具だと言えるでしょう。

💡 Tip

カイ二乗法は「1位だけを絶対視する」より、「上位数候補を読んで意味の通り方を見る」と安定します。統計の順位と文としての自然さが重なると、誤判定がぐっと減ります。

必要な文字数と前提言語

ただし、ICもカイ二乗法も万能の探知機ではありません。
前提として、その暗号文がどの言語の文章かをある程度決めておく必要があります。
英語の頻度表を基準にしたスコアリングは、平文も英語であると仮定して初めて力を発揮します。
日本語のローマ字表記、固有名詞だらけの文、略語が多いメモのような文字列では、英語の「標準的な偏り」から外れるため、点数が素直に働きません。

文字数も効きます。
十分な長さがあると、et などの偏りが平均的な形に近づき、ICもカイ二乗も安定します。
逆に短い文では、たまたまある文字が多く出ただけでスコアが揺れます。
前の節で見た頻度分析の弱点が、そのまま数値化の手法にも残るわけです。
少なくとも数文字の断片でも当たりが出ることはありますが、その段階では「答えが一点に定まる」というより、「候補の順番が並ぶ」と考えたほうが実態に合います。

シーザー暗号では総当たりが主役で、頻度分析がその近くにあり、ICとカイ二乗は中級者向けの補助輪です。
とくにICは「単一換字式らしいかどうか」を見る道具、カイ二乗は「25候補のうちどれが英語らしいか」を順位化する道具、と役割を分けると混線しません。

(補足)短文での不安定さの具体例

短文で統計が揺れる感覚は、実際に触るとすぐ伝わります。
たとえば6文字前後の暗号文では、母音が偶然かたまっただけで特定のシフトがよく見えたり、逆に本命の候補が地味な順位に沈んだりします。
人間が目で読めば「こっちは単語になっている」と拾えるのに、スコアだけだと差が詰まり、上位候補が団子になる場面も珍しくありません。

筆者が短文で悩まされたのは、意味のある英単語が2つほど含まれているのに、文字頻度だけ見ると別の候補の点数が先に立ったケースです。
原因は単純で、文が短すぎて、その文特有の語彙の癖が英語全体の平均より強く出ていたからです。
こういう場面では、ICもカイ二乗も「答えを出す機械」ではなく、「候補をふるいにかけるふるい」だと思って扱うほうがうまくいきます。

シーザー暗号は候補数が25通りしかないので、この不安定さは致命傷になりません。
むしろ、短文では総当たりで全部出し、その上でカイ二乗の順位や英語の連接パターンを重ねると、統計と読解がきれいにかみ合います。
数字だけに寄り切らず、数字を読むために人間の目も使う。
このバランスが、中級者の解き筋としていちばん実践的です。

なぜシーザー暗号は破られるのか

鍵空間25の帰結

シーザー暗号が破られる第一の理由は、鍵空間が25通りしかないことです。
英字は26文字ありますが、0文字シフトと26文字シフトは元の文と同じなので、実際に試す価値があるのは1から25までに限られます。
現代の感覚で言えば、鍵というよりダイヤルを25段階で回すだけの仕掛けです。
候補を全部並べても一瞬で終わる規模なので、秘密を守る壁にはなりません。

しかもこの方式は、暗号文が短くても総当たりの成立を妨げません。
長文なら統計が効きますが、シーザー暗号はそこまで持ち込む必要すらなく、25通りを順に戻していけば必ず候補が出そろいます。
6文字前後でも実用上は鍵が見つかることが多いと言われるのは、この「候補数の少なさ」がそのまま解読の速さに直結しているからです。

古代や中世なら、全候補を紙で書き出すだけでも手間でした。
けれど今は事情がまったく違います。
人手で試しても数分、プログラムなら一瞬で終わるので、総当たりに耐える設計ではないという評価になります。
映画やパズルで見かけると雰囲気がありますが、セキュリティとして眺めると、鍵の扉というより薄いカーテンに近いものです。

頻度分布が保存される弱点

もうひとつの弱点は、シーザー暗号が単一換字式であることです。
これは、ある文字を別の文字に一対一で対応させるだけの方式なので、平文にあった文字頻度の偏りがそのまま暗号文へ移ります。
e が多い文章は、暗号化しても「別の何かの文字」が多い文章になるだけです。
文字の顔は変わっても、出現回数の癖は残ります。

この性質のせいで、頻度分析の手がかりが豊富に残ります。
英語なら et が目立ちやすく、thhe のような連接も消えることは少なく、一定程度残る傾向があります。
前の節で見たように、最頻文字を起点にシフトを逆算したり、候補をいくつか読んで英語として自然かどうかを見たりすると、ぐっと絞り込めます。
統計的な補助指標を使うまでもなく、人の目だけで当たりがつく場面も多いです。

ここで効いてくるのが、文字頻度が「保存される」という事実です。
たとえば多表式暗号のように、位置ごとに別の置換規則を使えば偏りは散りますが、シーザー暗号では全体を同じ分だけずらすだけです。
言い換えると、平文の指紋をそのまま横にスライドさせているにすぎません。
暗号文の表面は変わっても、文章の骨格は残っています。

複数回暗号化は強化しない

直感に反して見落とされがちなのが、複数回暗号化しても強くならないことです。
シーザー暗号は加算的なシフトなので、たとえば +5 のあとに +13 をかければ、結果は +18 を一度かけたのと同じです。
一般に、複数のシフトを重ねても シフトの和を26で割った余りにまとめられます。
見た目には何重にも鍵をかけたようでも、理論上は一つのシフトに畳み込まれます。

筆者も以前、何段階かシフトを重ねたという触れ込みの暗号文を受け取ったことがあります。
いかにも防御を増したような顔をしていたのですが、対応関係を少し追ったところで「これは合成すると +18 だな」と一発で見抜けました。
その瞬間、重ねがけが強化ではなく、単に回転を足し算しているだけだという感覚が腑に落ちました。
鍵を三重にしたつもりでも、実際には一つのダイヤルを18だけ回したのと同じだったわけです。

ROT13が象徴的な例です。
+13 を二回かけると元に戻るので、特殊な二段構えの暗号に見えても、構造はやはり単純なシフトの範囲から出ません。
ここにシーザー暗号の限界があります。
層を重ねても別の種類の暗号へ変身するわけではなく、同じ仕組みのまま数値が足し合わさるだけです。

⚠️ Warning

シーザー暗号は「重ねるほど強い」という発想が通用しません。同じ鍵穴に別の鍵を差しているのではなく、同じ円盤を続けて回しているだけだからです。

現代セキュリティの評価

こうした性質を合わせて見ると、シーザー暗号は現在のセキュリティ用途には推奨されないと断言できます。
鍵空間25では総当たりを止められず、文字頻度も残り、重ねがけでも強度は上がりません。
現代の暗号に求められる「現実的な計算量では破れない」という条件から見ると、土俵に立てていない方式です。

ただし、価値がないわけではありません。
歴史を学ぶ入口としては抜群で、暗号化・復号・総当たり・頻度分析という基本概念を一つの題材でまとめて体験できます。
謎解きイベント、教材、軽い難読化、CTFの導入問題で繰り返し使われるのはそのためです。
仕組みが透明なので、「暗号がなぜ破られるのか」を体感する教材としては今でも生きています。

評価を一言で置くなら、シーザー暗号は学ぶための暗号であって、守るための暗号ではありません。
古典暗号の入り口としては魅力的ですが、現代の通信や認証、機密情報の保護に持ち込む段階では役目を終えています。
用途の中心は、あくまで知的遊びとしての難読化、教育、そして古典暗号文化を味わう場面です。

手法の比較と使い分け

総当たり

シーザー暗号を実際に解く場面では、まず総当たりを軸に考えるのがいちばん現実的です。
理由は単純で、候補が 1 から 25 までに閉じているからです。
暗号文がシーザー暗号だとわかっているなら、全候補を並べるだけで土俵には上がれます。
短文でも成立するのがこの方法の強さで、文字数が少ないから何もできない、という展開になりません。

筆者がいちばん早く解けたのも、この総当たりを起点にしたときでした。
オンラインツールで 25 候補を一括表示させ、上から順に全部読むのではなく、英語らしい並びが見えた上位 3 候補だけを手で確認したところ、その場で正解に着地しました。
総当たりというと力任せに見えますが、実際には「全部出す」と「全部じっくり読む」は別です。
候補生成は機械に任せ、人の目は最終確認だけに使う。
この切り分けがいちばん速い場面は多いです。

比較するときの基準を先に置いておくと、各手法の役割は次のように整理できます。

項目総当たり頻度分析IC・カイ二乗手計算プログラム実装
前提暗号文がシーザー暗号だとわかっている平文の言語特性を仮定する英語などの基準分布を持つ道具を使わず文字対応を追う文字処理を自動化できる
必要な文字数短文でも可能長文ほど有利中〜長文で安定しやすい短文向き短文から長文まで対応
強み必ず候補を出せる人手で当たりを付けやすい全候補を順位付けできる仕組みが体でわかる反復作業をまとめて処理できる
弱み候補の読み分けが残る短文や偏った語彙に引っ張られる数学的な説明が一段増える長文では手間が膨らむ実装を組む手間がある
記事での扱い主役主役補助解説入門の理解補助実践の効率化

この表で見えてくるのは、総当たりが「まず候補を切らさない方法」だという位置づけです。迷ったらここから入る、という基準点になります。

頻度分析

頻度分析は、総当たりより一段だけ頭脳派の方法です。
暗号文の中でよく出る文字を見て、平文で出やすい文字に対応させる発想です。
英語の文章なら et が目立ちやすいので、最頻文字から鍵の当たりを付けられます。
候補を 25 通りすべて眺める代わりに、先に「このあたりのシフトが怪しい」と見当をつけるわけです。

ただ、この方法は文章の長さに左右されます。
短文では頻度の癖が安定せず、固有名詞や偏った単語が並ぶだけで見立てが外れます。
たとえば映画タイトルや人名のような短い文字列では、最頻文字が平文の e を反映しているとは限りません。
逆に、ある程度まとまった英文なら、文字の偏りが顔を出してくるので、総当たりの読む量を減らせます。

現実の運びとしては、頻度分析単独で決め切るより、総当たりの読む順番を決めるために使うと安定します。
まず最頻文字から有力なシフトを数個拾い、その候補だけ先に読む。
外れたら残りを見る。
この順番なら、人間の認知コストがぐっと下がります。
パズルを解くときに、部屋中を探し回る前に「鍵がありそうな場所」を絞る感覚に近いです。

IC・カイ二乗

IC とカイ二乗は、頻度分析をもう少し機械的にした補助輪です。
人の目で「英語っぽい」と判断していた部分を、スコアに置き換えて順位を付けます。
IC は文字分布の偏りを見て自然言語らしさを測る指標で、英語テキストならおおむね 0.065 から 0.067 あたりに寄ります。
ランダムに近い分布なら 0.038 前後に落ちます。
シーザー暗号は単一換字式なので、正しく戻した候補は自然言語の偏りを取り戻しやすく、統計値でも上に来ます。

カイ二乗はさらに実務向きで、各候補の文字分布が英語の標準的な頻度からどれだけずれているかを比べられます。
25 候補を全部並べて、人間が 25 行読む代わりに、まずスコア順に 3 つか 5 つまで絞る使い方ができます。
ここで大事なのは、統計が正解を「断言」するのではなく、読む順番を整列してくれることです。
候補の山を、上から読めば当たりに近づく山へ変えてくれる道具だと考えるとわかりやすいのが利点です。

シーザー暗号の範囲では、IC だけで十分な場面もありますが、候補の順位付けまで含めるならカイ二乗のほうが扱いやすいことが多いです。
人間の勘を数式で置き換えるというより、勘が向く先を整えてくれる補助線という位置づけです。

💡 Tip

実務感覚では、総当たりで全候補を出し、頻度で当たりを付け、カイ二乗で上位を並べ替え、人の目で最終判定する流れがいちばん無駄がありません。

手計算

手計算の価値は、速度より理解にあります。
紙の上でアルファベットをずらし、1 文字ずつ戻していくと、シーザー暗号が「複雑な秘密の箱」ではなく「円盤を一定量だけ回す仕組み」だと実感できます。
暗号円盤のような道具を使うと、さらに視覚的です。
外周と内周の対応をずらすだけで、暗号化と復号が同じ構造の裏返しだとすぐ見えてきます。

短文なら手計算でも十分に戦えます。
数語しかない暗号文なら、頭の中で数文字戻すだけで答えが見えることもあります。
謎解きイベントや授業でこの方法が強いのは、その場で仕組みを共有できるからです。
誰かが「K を 3 つ戻すと H になる」と言えば、全員が同じ景色を見られます。

その一方で、長文になると手計算は途端に疲れます。
1 行なら遊びでも、数段落になると写経に近くなります。
ここで無理に全部手でやるより、冒頭だけ手で触って構造をつかみ、残りはツールやプログラムに渡すほうが自然です。
手計算は主戦力というより、仕組みを腹落ちさせるための前線基地だと考えると位置づけがはっきりします。

プログラム実装

Pythonなら、教育用としては ordchr を使う実装が直感的です。
文字を数値に変えて、26 で循環させ、文字へ戻す。
この流れはシーザー暗号そのものです。
いっぽうで、処理量をまとめてさばくなら str.maketrans()str.translate() を使う実装が向いています。
文字列全体を一括で置換できるので、候補生成を繰り返す処理が軽くなります。
学ぶなら前者、回すなら後者、という切り分けがきれいです。

状況ごとの推奨フローも、この視点で考えると迷いません。
短文で時間もないなら、総当たりを先に出して人の目で読むのが最短です。
中くらいの文なら、頻度分析で当たりを付けてから総当たり候補を読むと、視線の移動が減ります。
長文なら、総当たりの全候補にカイ二乗をかけて上位だけ確認する流れが安定します。
授業や入門では手計算から入ると仕組みが残り、作業量が増える場面ではPythonへ移る。
この順番が現場ではいちばん自然です。

実際の組み合わせとしては、総当たりで 1 から 25 までの候補をまず出し、頻度分析で怪しいシフトに当たりを付け、カイ二乗で候補を順位付けし、文として自然かどうかを人手で決める、という流れがもっとも現実的です。
シーザー暗号は候補数が小さいぶん、「どの手法が唯一の正解か」を争うより、手法どうしをリレーのようにつなぐほうが速くて確実です。
ここまで見てきた各方法は競合関係ではなく、役割分担の違う道具箱だと捉えると、使い分けがすっきり見えてきます。

現代へのつながり

アルゴリズムと鍵という視点

シーザー暗号をいま学ぶ意味は、古い暗号を懐かしむことだけではありません。
いちばん大きいのは、手順そのものと、その手順に与える秘密の値を分けて考える感覚が身につく点です。
現代の暗号でも、公開された方式そのものより、鍵をどう管理するかが核心になります。
その原型が、一定の規則で文字をずらすという単純な仕組みの中に、もうきれいに入っています。

ここで見えてくるのは、アルゴリズムは共有されてもよく、秘密にすべきなのは鍵だという発想です。
シーザー暗号では、文字を循環させる規則は誰が見ても同じで、違いを生むのはどれだけずらしたかという値だけです。
仕組みと秘密を切り分けるこの考え方は、現代暗号へ進む入口としてとても出来がいいのです。
パズルでいえば、盤面のルールは全員が知っていて、勝負を分けるのは手元のカードだけ、という構図に近いです。

しかもシーザー暗号は、手で追える小ささがあるぶん、抽象論で終わりません。
紙の上で 1 文字ずつ戻していくと、「暗号とは魔法の箱ではなく、再現可能な操作である」という感覚が残ります。
この感覚を持っていると、のちにもっと複雑な方式を見たときも、何が公開情報で、何が秘密で、どこが攻撃対象になるのかを整理して眺められます。
古典暗号の入門として長く使われる理由は、まさにそこにあります。

ヴィジュネル暗号への発展

シーザー暗号を一歩進めると、Vigenère cipherのような多表式換字式暗号へ自然につながります。
発想は単純で、毎回同じだけずらすのではなく、鍵文字に応じてずらし方を変えるというものです。
1 本の定規で最後まで測るのではなく、場所ごとに別の定規へ持ち替えるイメージです。
単一の置換では残ってしまう文字頻度の癖を、複数のシフトへ分散させることで読みにくくするわけです。

この段階に来ると、前のセクションで触れた IC の見方がもう一度効いてきます。
シーザー暗号のような単一換字式は自然言語の偏りを比較的そのまま残しますが、多表式になると分布の表情が変わります。
暗号文全体をひと塊で見ると自然言語らしさが薄れ、ランダムな文字列に少し近づきます。
ところが鍵の周期ごとに列を分けると、それぞれの列はまた単一換字式として読めるようになります。
ここで IC やカシスキー法が、ばらけた糸をより分ける道具として働きます。

古典暗号を学ぶ面白さは、この「強くしたつもりの工夫にも、別の見方から穴が見つかる」流れを追体験できるところです。
シーザー暗号では総当たりが効き、ヴィジュネル暗号では鍵周期の推定が争点になります。
暗号の歴史は、隠す工夫と見抜く工夫の往復運動でできています。
単純なシフトから始めると、その流れが段差なく見えてきます。

ROT13と難読化の現在

現代に残っているシーザー暗号の影として、よく知られているのが ROT13 です。
文字を 13 だけ回す方式で、英字 26 文字のちょうど半周なので、もう一度かけると元に戻ります。
ここでの使い道は安全な通信ではなく、「見ようと思えばすぐ読めるが、ぱっと見では隠れている」という軽い目隠しです。
いわば鍵付き金庫ではなく、透明なカバーを一枚かける程度のものです。

筆者も、ソースコードの断片に ROT13 されたコメントが埋め込まれている場面に出会ったことがあります。
内容は機密情報ではなく、ネタバレ気味の説明や、初見で目に入ると雰囲気を壊す一文でした。
読もうと思えばすぐ戻せるのに、そのひと手間があるだけで不用意に目へ飛び込まない。
あれは「暗号」より「難読化」と呼ぶほうが現場の感覚に合っています。
相手を本気で防ぐためではなく、見せ方を一段だけコントロールするための道具です。

この違いは、古典暗号を学んでいると腑に落ちます。
シーザー暗号の延長にあるものでも、目的が秘匿なのか、単なる目隠しなのかで評価軸は変わります。
ROT13 は遊び心のある伏せ字、掲示板の軽いネタバレ防止、コード中の小さな隠しコメントといった文脈ではまだ居場所がありますが、保護手段として数えるものではありません。
古典暗号を知っていると、「これは守るための暗号ではなく、読み手への配慮としての難読化だな」と見分けがつきます。

Unicode拡張は定義上は別物

もうひとつ押さえておきたいのは、現代のプログラムで文字を扱うとき、Unicode 全体を相手にして「何でもずらす」実装が作れてしまうことです。
技術的にはそれで文字コードを変換できますが、古典的なシーザー暗号と同一視するのは無理があります。
もともとのシーザー暗号は、英字アルファベットの循環という限られた記号集合を前提にした方式です。
土俵が変われば、同じ「ずらす」という動詞でも中身は別物になります。

たとえばPythonordchr を使えば、文字コード上の位置を機械的に動かす処理はすぐ書けます。
けれどそれは、ラテン文字の 26 文字を円環として扱う古典暗号の再現とは限りません。
日本語、記号、絵文字までまとめてシフトする処理は、教育用の実験としては面白くても、シーザー暗号の歴史的定義を拡張したものではなく、別の文字変換ルールを作っているにすぎません。

この線引きが見えていると、古典暗号を学ぶ意義がいっそうはっきりします。
大切なのは「ずらすコードを書けた」ことではなく、どの文字集合に対して、どんな鍵の考え方で、どこまでが暗号として成立しているのかを言葉で区別できることです。
シーザー暗号は小さな題材ですが、アルゴリズム、鍵、統計、難読化、そして現代暗号との距離感まで見渡せる、意外に射程の長い入門編です。

練習と次の一歩

ステップ1:手作業で総当たり

ここでは、頭と手を使って一度きちんと解いてみましょう。
練習用の暗号文は WKLV PHVVDJH KLGHV D VKRUW VHFUHW です。
英字だけを見て、空白はそのままにして構いません。
課題は単純で、シフトをひとつずつ戻しながら、読める英語になる場所を探すことです。

紙にアルファベットを横一列に書いて、各文字をひとつ戻した結果、ふたつ戻した結果、という具合に並べていくと、暗号が「特別な謎」から「規則のある作業」に変わります。
最初はHELLOのような短い例で感覚をつかみ、次にこうした一〜二文の長さへ進むと、急に手応えが出ます。
筆者はこの段階で、文字の列がある瞬間に英文へ切り替わる感覚がいちばん好きです。
さっきまでただの記号だったものが、急に意味を持って立ち上がるからです。

この課題では、全候補を機械的に出すというより、「どこで言葉として読めるか」を目で拾ってください。
ひとつの単語だけで決めず、文全体の自然さを見るのがコツです。
冠詞や短い単語が噛み合うと、一気に平文らしさが出てきます。

ステップ2:頻度分析で鍵予想

次は、いきなり全部試さずに当たりをつけます。
暗号文の中でいちばん多く出ている文字を見つけて、それが平文ではどの文字だったかを想像するやり方です。
英語では頻出文字に偏りがあるので、そのズレから鍵候補を逆算できます。

ただし、この練習文くらいの長さだと、最頻文字だけでは答えがひとつに絞れないことがあります。
むしろそこが学びどころです。
短文では語彙の偏りがそのまま出るので、「いちばん多い文字はこれだから鍵はこれ」と一直線には決まりません。
候補がいくつか残る感覚を体験すると、頻度分析が万能ではなく、総当たりや統計補助と組み合わせて使うものだと腑に落ちます。

おすすめの進め方は、最頻文字をひとつ決めたら、そこから複数の鍵候補を書き出し、その候補で冒頭数文字だけ戻してみることです。
単語の切れ目や、英語らしい並びが見えた候補を残してください。
人間の目は、統計だけでは拾いきれない「言葉っぽさ」を案外よく見抜きます。

ステップ3:ツール/コードで検証

手で予想を立てたら、ここでPythonやオンラインツールを使って答え合わせに進みます。
やることは、すべてのシフト候補を並べて比較し、どの結果がいちばん英語らしいかを確かめることです。
人力で当たりをつけ、道具で検証する流れにすると、暗号解読の感覚がぐっと実践的になります。

Pythonなら、教育用としては ordchr を使う書き方が追いやすく、文字がどう巡回しているかを理解するのに向いています。
候補を一括で比較するだけなら str.maketrans()str.translate() を使う方法が軽快で、全文をまとめて変換できます。
すべてのシフト結果を出力し、それぞれについてカイ二乗の値を計算すると、英語の文字分布にいちばん近い候補が見えてきます。
自分の目で「これが読めそうだ」と思った候補が、統計でも最小スコアになっていたときは、推理と計算がぴたりと噛み合う気持ちよさがあります。

オンラインツールを使う場合も見方は同じです。
全候補表示があるものを選び、ひとつずつ読んでから、スコア順の並びも確認します。
手作業だけだと迷った候補が、統計を添えるだけで一段クリアになります。
逆に、短文では最小スコアでも不自然なケースがあるので、そこで「機械の順位を人間が読む」役割も見えてきます。

ℹ️ Note

まず自分で鍵を予想してからツールを開くと、当てずっぽうの作業になりません。推測が当たると嬉しいですし、外れても「どこで見誤ったか」が次の練習材料になります。

次に読むべき記事と発展課題

シーザー暗号を自力でほどけたら、次はVigenère cipherへ進む流れが自然です。
ひとつのシフトで全体を読む世界から、位置ごとに別のシフトが混ざる世界へ移るので、同じ換字でも景色が変わります。
鍵文字が繰り返されるだけで、単純な頻度分析がそのまま通らなくなる感覚は、古典暗号の面白さが一段深くなる判断材料になります。

もうひとつの発展先は、単一換字式暗号全般の解読です。
シーザー暗号は「規則が単純な入口」ですが、そこから先には、文字頻度、連接、単語の形、反復パターンを組み合わせて読む世界が待っています。
ここまで来ると、暗号は計算問題というより、言語の癖を観察するパズルになります。

筆者としては、まず今回の練習文を手で解き切って、「読めた」と実感するところまで到達してほしいです。
短い例題を眺めるだけでは得られない快感が、一〜二文を自力で復号した瞬間にあります。
その感触をつかめば、次にVigenère cipherや単一換字式の少し手ごわい問題へ進んでも、暗号は怖い題材ではなく、手順を積めばほどける知的遊びとして見えてきます。

シェア

桐生 遼介

サイエンスライター。暗号と映画・文学・パズル文化の接点を探るコラムを得意とし、暗号を「解く楽しさ」から伝えます。

関連記事

古典暗号

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

古典暗号

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

古典暗号

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

古典暗号

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