暗号の用途は分かりましたが、 それでは実際にどんな暗号があるのでしょうか? まず先に、認証を目的とする暗号には、 先ほど挙げた「山」「川」というような 合言葉 があります。 一方、 秘密情報の伝達を目的とする暗号には、 先ほど挙げた 隠語文 の他に、シーザー暗号(詳しくは後述します) と呼ばれるものなどが有名です。
ところで、この隠語文。 暗号化を行う単位を 「文」 としているのは分かるでしょうか。 つまり秘密に伝えたい 「文」 を 当事者同士が事前に秘密に取り決めておいた別の 「文」 に置き換えて伝えているということです。 例えば、 「二時に来て!」 という文を伝えたい時には 「たい焼き焼いた」 という全く連想できない文を伝えるように取り決めておくのです。 こうして様々な状況を想定し、 より多くの文に対する暗号文の対応表を作っておきます。
しかし、これでは限界があります。 当初予想されなかった事態が発生し、 対応する暗号文を事前に取り決めてない文を伝えたくなった場合には 暗号化することができないのです。 そこで、もう少し自由な文を送れるようにするにはどうしたらよいでしょうか? とりあえず、暗号化を行なう単位を 「文」 ではなく 「単語」 へと縮めてみたらどうでしょうか。
これは、「渡辺さん」 → 「ナベ」、「とても」 → 「チョ〜」、 「むかつく」 → 「MM」 などと言い、 「ギリギリになってキャンセル」 することを 「ドタキャン」 などと言う女子高生に例えることができます。 女子高生が 「ナベがドタキャンしてさぁ、チョ〜MM」 などと言った場合、 単語の置き換えルールを知っている同じ女子高生同士には意味が通じますが、 ルールを知らないおぢさんたちには全く意味不明です。 これなら、もし文を 「渡辺さん」 ではなく 「内山さん」 にしたもので伝えたくなっても、 事前に 「内山さん」 を 「うっちゃん」 とさえ対応づけておけば、 「うっちゃんがドタキャンしてさぁ、チョ〜MM」 と置き換えた単語を組み合わせることで、 違う文を送りたい場合の暗号化にも対応できるのです。 こうして、暗号化する単位を「単語」に縮めれば、 本来予定していなかったより多くのメッセージを 伝達することができるようになります。
しかし、これでもやっぱり限界があります。 事前に置換方法を取り決め忘れた単語を使いたくなった場合には どうしようもないのです。かと言って、 世の中に存在する全ての単語の置換パターンを取り決めておくのは困難です。 なんとか完全に自由な文を暗号化することはできないでしょうか? そこで、いっそのこと置換の単位を「単語」よりもさらに短く、 「文字」にしてしまったらどうでしょう。 つまり、秘密にメッセージを伝え合いたい当事者間で、 「あ」 は五十音順で一文字後にずらして 「い」 に、 「い」は「う」に、 「う」は「え」に…などというように 置き換えて伝えるよう取り決めてしまうのです。
例えば、「池袋で待て」と言う言葉を伝えたい場合は、
のようになります。 これなら、どんなメッセージでも暗号文に置換して伝えることができます。 しかも、五十音順で後にずらす文字数を一文字ではなく、 二文字、三文字などに変えることで、 暗号化した結果が異なる暗号文を作り出すことができます。 こうして暗号化する単位を文字とし、 五十音順のような公開された文字の順番付けに従って、 各文字を事前に取り決めた数だけずらした別の文字に置き換えて 暗号化する方法が、冒頭に述べたシーザー暗号と呼ばれる暗号なのです (※1) 。
秘密情報を伝達する暗号には、 隠語文のように事前に取り決めた文しか暗号化できないものと、 シーザー暗号のように自由な文を暗号化できるものとがあります。 ただ、現代の情報ネットワーク社会に求められる暗号は、 シーザー暗号のように自由な文を暗号化できるものでなければ役に立ちません。 そのため学術的には、 隠語文のように特定の文しか暗号化できないものは 暗号とは呼ばず、自由な文を秘密に伝えられる方法だけを 暗号と呼んでいます。