PHP Manual
/
セキュリティ

カエサルの暗号 - 仕組み

23. 08. 2019

> **注意:** この記事は何年も前に書かれたもので、情報が古かったり間違っていたりすることがあります。このことを念頭に置いてお読みください。

シーザー暗号は、最も簡単なハッシュ関数の一つである。当時はほとんど壊れなかったが、現代のコンピュータの時代には、数十秒、数分もあれば壊せる。これは鍵に基づいており、それに従ってメッセージが暗号化され、再び展開することができます。そのため、鍵は秘密です。暗号化された時点で、メッセージは見ることができ、何の意味もない(ただ文字がごちゃごちゃしている)ことになる。暗号を破るには、鍵を当てるしかない。

キーポイント

鍵は、メッセージ自身よりも桁数の少ない任意の整数を使用することができます。通常、有効な3桁の数字が与えられる(つまり999通りの組み合わせがある)。桁が増えるごとにセキュリティが向上します。2者が通信するためには、両者がこの秘密鍵を知っている必要がある(そのため、何らかの方法で安全に受け渡す必要がある)。もし、鍵が相手に知られることなく、相手に知られた場合、潜在的な攻撃者はメッセージを取り戻す手順を知らないので、メッセージは安全でなくとも広まり、潜在的に内容を損なうことはないでしょう。

デモのために、キー123を使用します。通常は、それほど簡単に推測できないことを想定した他の乱数が使用されます。

暗号化手順

原理は、メッセージの文字を鍵を使って別の文字に置き換えるというものです。私はそれを「キャラクターシフト」と呼んでいます。

例えば、こんなメッセージを暗号化したいとします。

TAJNA ZPRAVA

ここで、各キャラクターに番号を割り当ててください。一般的にはアルファベット(そのシリアル番号)で。英語のアルファベットを使うので、このシリーズの文字。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

各文字に数字を割り当てると、次のようになります。

20-1-10-14-1 26-16-18-1-22-1

さて、ここからが本題です。個々の数字を取り出して、それにキーを加えていくのです。どこに何を追加したのか、カラーでハイライトしています。

1 2 3

21 3 13 15 3 3 17 20 4 23 3

なお、Z文字を暗号化するときは、数字の3を書きます。これは、Zがアルファベットの最後の文字であるため、末尾に達すると、行頭からカウントし直すためです。

メッセージの送信

これで、好きなようにメッセージを渡すことができるようになりました。時には公の場でさえも。他の人は非論理的な数字の羅列を見るだけなので、それが何らかの暗号であることにすら気づかないでしょう。また、鍵自体も秘密であるため、セキュリティが強化されています。数字の羅列で送信するのが適切な場合もあれば、それらの数字を文字に変換して(これも同じアルファベットの羅列に従って)、文字の羅列を送信するのが適切な場合もあります。状況によって大きく異なります。しかし、一般的には、暗号化されたメッセージであることを疑う人がほとんどいないため、数字列の方が良い。

受信者側での復号化

受信者は同じ手順で復号化する。個々の文字を取り込み、キーに応じた数値を引き算し、得られた数値をアルファベットで文字に戻すというものです。ちょうど逆暗号化する手順です。重要なのは、キーキャラクタセット、つまり、文字がどのように順番に並んでいるかを知ることです。

クラッキングとデクリプション

クラッキングのための唯一の可能な手順は、すべての可能なキーの考えられるすべての組み合わせを試すことです。鍵の長さがわからないと、全体の処理はさらに複雑になります。しかし、一般に現在のコンピュータは1秒間に100個のキーを試すことができるので、3文字のランダムキーを解読するのに1分くらいかかってしまうんです。

しかし、鍵が元のメッセージと同じかそれ以上に長い場合、個々の文字が独自の鍵を持っているため、文字ごとにすべての組み合わせを試さなければならず、解読することができない。

もし「TAKE MESSAGE」というメッセージがあった場合、11文字になります(スペースはカウントされません)。仮に11文字の鍵が欲しいとして、26文字のアルファベットを使った場合、11^26 = 1.191817654*10²⁷の組み合わせがあり、平均的なコンピュータはこの鍵を1.310999419×10²⁶秒 = 10^20 日で解読します:)。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
4.
Status:
All systems normal.
2024