紀元前58年頃、ジュリアス・シーザー(ユリウス・カエサル)は軍事作戦で特別な技法を用いて、自身の命令が敵に伝わらないようにしました。その技法とは、命令の各文字を一定の数だけずらして別の文字にするというものです。
敵は、命令を盗んで解読するのに通常よりも手間取ることになります。
これが、現在知られている限りで世界初の換字式暗号です。その後、この技法は暗号化の方式として広く使われるようになり、発明者の名を取って「シーザー暗号」と名付けられました。
このブログ記事では、シーザー暗号の概要、仕組み、特徴、規則、長所と短所、シーザー暗号解読のヒントをご紹介します。
シーザー暗号は、情報を当事者間で安全に伝達するために使用されてきた最も古い暗号化技法の1つです。シーザー暗号という呼び名が一般的ですが、カエサル式暗号、シフト暗号、シーザーコード、シーザーシフトなどと呼ばれることもあります。
シーザー暗号では、平文の各文字を、アルファベット順で特定の文字数分ずらす(シフトする)ことにより、別の文字または記号に置き換えます。この方法から、シーザー暗号は換字式暗号の一種に分類されます。
これは知られている限り最古で最もシンプルな暗号化技法であり、軍事作戦時の通信を保護するためにジュリアス・シーザーが使用し、その後、多くの軍事指導者に受け継がれました。
シーザーは3文字シフトを好みましたが、今日一般的なのは「ROT13」と呼ばれる方式です。これは「ROTate by 13 places」の略で、各文字をアルファベット順で13文字分ずらすことを意味します。
ただし、シーザー暗号は現在ではあまり使われません。それは、解読が容易であるためです。この点については後ほどご説明します。
(関連記事:エンドツーエンドの暗号化)
シンプルで使いやすいシーザー暗号は、今日の暗号化技法の基礎を築きました。
シーザー暗号は、ある文字を別の文字に置き換えるという考え方を取り入れた最初の手法です。これは暗号法において、基本的でありながら重要な原則です。このシンプルな考え方を基盤に、より高度で安全な暗号化方式が作られています。
シーザー暗号は、暗号化と復号化の基礎を学ぶための教育プログラムでよく取り上げられます。シーザー暗号を学べば、以下のような、より複雑な暗号化技法を理解しやすくなります。
シーザー暗号で固定数だけシフトするという考え方は後に進化し、キーワードに基づいて文字ごとにシフト数を変えるヴィジュネル暗号のような、より高度な技法が誕生しました。このシンプルな固定方式から複雑な可変方式への変遷は、安全性に対するニーズの向上に合わせて暗号化技法がいかに高度化してきたかを物語っています。
メッセージを暗号化するには、シフト数と呼ばれる整数値が1つ必要です。シフト数は、メッセージの各文字を何文字分ずらすかを示します。文字を次のように数字に変換しておくことで、暗号化の方法を合同式を使って表すことができます。
シフト数を𝑛としたときの文字xの暗号化は次のように表されます。
En(x)=(x+n)mod26 (シフト数𝑛で暗号化)
Dn(x)=(x−n)mod26 (シフト数𝑛で復号化)
シーザー暗号の仕組みをより深く理解できるように、簡単な例をご紹介します。
デビッドとノラがシーザー暗号を使ってメッセージをやり取りするとします。まずは、使用するシフト数を決める必要があります。そこで「3」を選びました。つまり、デビッドは、ノラへのメッセージを暗号化するために、各文字をアルファベット順で3文字分ずつ後ろにずらす必要があります。
この場合、「A」は「D」、「B」は「E」などとなります。この暗号化されて一見意味をなさないメッセージをノラに送ります。
ノラは、受け取ったメッセージを復号して元のメッセージを読み取るために、各文字を3文字ずつ前にずらします。

たとえば、「Go to Valley」というメッセージをシフト数「9」で暗号化するとしましょう。
各文字に割り当てた数字にシフト数を足したときに、その結果が26を超える場合は、その結果を26で割った余りを取ることでアルファベット内で循環します。
最終的に、暗号化されたメッセージは「Px Cx EJUUNH」になります。

シーザー暗号の特徴を理解すれば、メッセージを暗号化したいときに、この技法が目的に合っているか、または別の技法を使う方がよいかを適切に判断できます。
シーザー暗号では、メッセージの各文字をアルファベット順で特定の文字数分ずらすことによって別の文字に置き換えます。そのため、換字式暗号の一種とされます。シーザー暗号の主な特徴は以下のとおりです。
| 長所 | 短所 |
設計、実装、使用がシンプルである 柔軟性に優れ、複数のシフト数やキーワードを使用することで安全性を高めることができる 事前に共有する情報が最小限で済む 暗号化の基礎を学べる
|
最新の復号化技法に対して脆弱である 暗号文と平文の組み合わせを解読の手がかりにする既知平文攻撃に対して脆弱である 使用できる鍵の数に制限があるため、ブルートフォース攻撃で簡単に突破される クラッキングが容易なため、長いメッセージの暗号化には適さない 解読が容易なため、高い安全性が求められる通信には適さない メッセージの機密性、正確性、真正性が保証されない |
シーザー暗号は、シンプルですが、解読する際は戦略的に考える必要があります。シーザー暗号を使った暗号文を復号化するときは、どの戦略が効果的であるかを見極めることが重要です。
どの手法にも独自の強みがあり、どれが最適かは、通常、メッセージの長さと性質によって決まります。
ブルートフォース攻撃は、シーザー暗号を破るために最もよく使われる手法です。この手法では、シフト数になり得る1から25を使った解読を、意味のあるメッセージが得られるまで順に試します。シーザー暗号で使えるシフト数は26種類しかありません。そのため、順に試せばどこかで必ず正解にたどり着きます。
適した場面:短いメッセージに対して特に効果的です。メッセージが短ければ、すべてのシフト数を試すのにさほど時間がかかりません。
頻度分析では、日常の言葉で使われる頻度が高い文字を見つけます。たとえば、英語では「E」が最も頻繁に使われます。暗号文で出現頻度が高い文字と、英語で使われる頻度が高い文字を照合すれば、暗号に使われたシフト数を推測できます。
適した場面:長いメッセージを解読するのに最適です。長いメッセージでは、文字の出現頻度の分布が明確に表れます。
クリブドラッギングでは、暗号文の中で既知または推測される語句(クリブ)を見つけてシフト数を割り出します。
たとえば、メッセージに「the」という単語が含まれると推測される場合、暗号文の中でその単語に該当しそうな並びを順に照合します。一致するものが見つかったら、そこからシフト数を割り出して、メッセージ全体を復号化します。
適した場面:メッセージの内容がある程度推測できる場合に効果的です。
既知平文攻撃は、元の平文とその暗号文のサンプルを入手できる場合に非常に効果的です。平文と暗号文を照合することにより、使われているシフト数を簡単に特定できます。
適した場面:平文と暗号文が手に入れば、直接照合するだけなので、すばやく簡単にメッセージを解読できます。
テクノロジーが進歩した今、シーザー暗号やROT13のような技法は本格的な暗号化方式としては実用的ではありません。これらの技法を使った暗号文をコピーアンドペーストするだけで解読できるツールがインターネットで簡単に見つかります。
しかし現在でも、シーザー暗号は、より複雑な技法の一部として使われることがあります。また、セキュリティや暗号化について学ぶ場で、初心者に基本を理解してもらうためによく取り上げられます。
さまざまな暗号化方式がある中で、単一換字式暗号は、この数百年の間で簡単に解読できるようになりました。特に、今日のソフトウェアを使えば一瞬で破られてしまいます。それでも、これらの暗号化方式は、数独のように、余興や暇つぶしに楽しめるパズルとして親しまれています。また、より複雑な暗号化方式を理解するための材料として使われることもあります。つまり、シーザー暗号は、今日の暗号化ニーズには適していませんが、活躍する場面はまだまだあるということです。
このブログはこちらの英語ブログの翻訳です。
この記事について誤りがある場合やご提案がございましたら、splunkblogs@cisco.comまでメールでお知らせください。
この記事は必ずしもSplunkの姿勢、戦略、見解を代弁するものではなく、いただいたご連絡に必ず返信をさせていただくものではございません。