シーザー暗号とは
シーザー暗号は、各アルファベットを、アルファベット順で決まった数だけ先にある文字に置き換える暗号です。ずらし幅が3なら、A は D に、B は E になります。アルファベットの最後まで来ると先頭に戻るので、X は A に、Y は B に、Z は C になります。
名前の由来はユリウス・カエサル(ジュリアス・シーザー)です。ローマの歴史家スエトニウスによると、カエサルは私的な手紙で3つずらす方法を使っていました。知られている中で最も古い暗号のひとつで、今でも多くの人が最初に学ぶ暗号です。
ずらし幅が鍵になります。鍵を知っていれば、同じ数だけ逆にずらしてメッセージを元に戻せます。
このツールが扱うのは英語のアルファベット26文字です。日本語のテキストを暗号化したい場合は、ローマ字にしてから入力してください。
ツールの使い方
暗号化する。 「平文」欄にメッセージを入力します。入力に合わせて「暗号文」欄に暗号化された結果が表示されます。
復号する。 暗号化されたメッセージを「暗号文」欄に貼り付けます。「平文」欄に読めるテキストが表示されます。
鍵を変える。 「ずらし幅」のスライダーを動かすか、マイナスとプラスのボタンで1つずつ変更します。最後に入力した方の欄はそのまま固定され、もう一方の欄が更新されます。
鍵がわからないメッセージを解読する。 メッセージを「暗号文」欄に貼り付け、「暗号文の25通りのずらし」という見出しのリストを見てください。考えられる答えがすべて表示されます。最も英語らしいものには「英語の可能性が最も高い」というタグが付きます。各行の横にある番号ボタンを押すと、スライダーがそのずらし幅に設定されます。
どちらかの欄の上にある「コピー」でテキストをコピーし、「クリア」でやり直せます。
変換例
以下は、このページで暗号を実際に実行した結果です。
| 平文 | ずらし幅 | 暗号文 |
|---|---|---|
| Hello, World! | 3 | Khoor, Zruog! |
| Hello, World! | 7 | Olssv, Dvysk! |
| Meet me at the old oak tree | 3 | Phhw ph dw wkh rog rdn wuhh |
| ATTACK AT DAWN | 13 | NGGNPX NG QNJA |
| Zebra crossing | 1 | Afcsb dspttjoh |
| The quick brown fox | 23 | Qeb nrfzh yoltk clu |
23ずらすのは、3つ逆向きにずらすのと同じです。そのため「The」は「Qeb」になります。
Phhw ph dw wkh rog rdn wuhh を総当たりしたリストの冒頭は次のとおりです。
| 試したずらし幅 | 結果 |
|---|---|
| 1 | Oggv og cv vjg qnf qcm vtgg |
| 2 | Nffu nf bu uif pme pbl usff |
| 3 | Meet me at the old oak tree |
| 4 | Ldds ld zs sgd nkc nzj sqdd |
ツールは、ずらし幅3を最も英語らしいものとしてタグ付けします。
仕組み
各アルファベットは0から25の数値に置き換えられます。そこにずらし幅を足し、25を超えたら0に戻ります。文字の位置を x、ずらし幅を n とすると、式は次のようになります。
- 暗号化:(x + n) mod 26
- 復号:(x - n) mod 26
最も可能性の高いずらし幅を選ぶために、ツールは25通りの候補それぞれで各文字の出現回数を数え、英語の典型的な文字の出現頻度と比べます。英語では E、T、A がよく使われ、Q、X、Z はまれです。このパターンに最もよく合う候補にタグが付きます。1文以上の長さがあればうまく機能します。1単語だけのような非常に短いメッセージでは、複数のずらし幅で実在の単語ができることがあるので、リストを自分で確認してください。なお、この判定は英語の文字頻度にもとづいているため、ローマ字の日本語では正しい候補にタグが付かないことがあります。その場合もリストを目で確認すれば見つけられます。
制限と安全性
シーザー暗号は本当の意味での暗号化ではありません。鍵が25通りしかないので、誰でもすべて試せます。コンピューターがなくても、長めのメッセージなら文字の出現頻度からすぐに鍵がわかってしまいます。
向いている用途:
- 謎解きイベント、脱出ゲーム、ジオキャッシングのヒント
- 暗号と鍵の仕組みを教えるとき
- ネタバレや答えを、ちらっと見られないように隠すとき
パスワード、個人的なメッセージなど、守る必要があるものには使わないでください。そうした用途には、信頼できるアプリに組み込まれた最新の暗号化を使ってください。
そのほかの方法
Linux、macOS、Git Bash では、tr コマンドで一定のずらしをかけられます。次の行は3つずらします。
echo 'Hello, World!' | tr 'A-Za-z' 'D-ZA-Cd-za-c'
Khoor, Zruog! と表示されます。復号するには2つの文字範囲を入れ替えるか、tr 'A-Za-z' 'X-ZA-Wx-za-w' で23先にずらします。
Python で大文字だけを対象にした1行版は次のとおりです。
''.join(chr((ord(c)-65+3)%26+65) if c.isupper() else c for c in 'HELLO')
これは KHOOR を返します。Excel でも同じ考え方で各文字に CODE、MOD、CHAR を使えますが、文章全体となると式が長くなります。
関連する暗号
ずらし幅13には専用のページがあります:ROT13 エンコード・デコード。アルファベットを順番の数字に置き換えるなら A1Z26 暗号を使ってください。文字ではなく信号でできた符号なら、モールス信号変換を試してみてください。