暗号について 暗号と聞くと色々なことを思い浮かべることができる。例えば、現代社会のコンピュータを使った通信には暗号技術が使われている。これを破ることができれば、自分の銀行口座の預金額を5000兆円に書き換えることもできるかもしれない。また歴史関係で言えば、ドイツ国防軍が使用していたエニグマ暗号機は有名だ。しかし、例によってこのエニグマは連合国側によって解読されてしまっている。 暗号は送信者と受信者以外の第三者に情報が渡らないようにするための工夫である。しかし、暗号は常に解読される定めにある。どんなに巧妙な工夫を凝らして暗号化しても、解読者はあらゆる工夫を凝らして解読を試み、歴史上のあらゆる暗号は解読されてきた。現代でよく利用されている、非常に強固なRSA暗号ですら解読可能である。(具体的には、鍵長1024bitであれば現代の技術と莫大なリソースを割けばおそらく解読できるだろう、というもの) ここでは歴史上で昔から使われてきた暗号を実際に使ってみて、昔の人の気分を少しだけ感じてみようというものである。今回は分かりやすいように、アルファベット大文字を暗号文、アルファベット小文字を平文としている。また、ピリオドやコロン、空白文字などは無いものとして考える。 (暗号と復号の例文は十分注意を払って作成しているが、間違えているかもしれないのでご注意ください) シーザー暗号 シーザー暗号は、おそらく世界で一番有名で簡単な暗号である。暗号化の手順は、平文の文字を任意の数ずらすだけだ。復号化するときは、任意の数を鍵として暗号とは逆方向にずらせば良い。アルファベットを使用するとして任意の数を「3」とすれば、「a」という文字は「D」となり、「i」という文字は「L」となる。そして、「z」という文字は一周回って「C」になる。 例えば、鍵を「3」として「sekaishibeta」を暗号化すると、「VHNDLVKLEHWD」となる。パッとこの文字列を見せられると、意味のない文字列としか思えないが、「暗号化の手順」と「鍵」がわかっているのであれば復号できる。つまり、「シーザー暗号」という手順と「3」という鍵が渡されると、それぞれのアルファベットの3つ前を書き出せばいいことがわかる。最初の文字「V」は「s」と復号でき、「H」は「e」に対応する。 この暗号の問題点は第三者が暗号化手順を知っていた場合、すぐに解読されてしまうところにある。 ここに「TDWJRQJQNWCJR」という暗号文があったとする。もしあなたが「これはどうやらシーザー暗号で暗号化されている」と知っていた場合、どのくらいの時間で解読できるだろうか? アルファベットであれば文字の種類は26であるため、0文字ずらしたものから25文字ずらしたもの全てを書き出して意味を持ちそうな文章を見つけてしまえばいいのだ。つまり、総当たりで人間が解読できる程度には短い時間で可能である。この問題点を解決するために工夫したものが、次の暗号化の手順である。 (ちなみに、上記に書いた暗号文は重要機密であるため、ここで複合した文章は示さない。間違っても復号することのないように!) ちなみに、暗号化の手順が知られてしまうがゆえに脆弱なのであるから、その手順を秘密にしてしまえばいいのではないかと思った人もいると思う。しかし暗号界隈では、この手順を秘密にすることは機密性に全く関与しないことが指摘されている。その理由は、その手順が本当に安全であるかどうか検証ができないことにある。わざわざ自作するくらいなら、世界中の研究者が解読を試みて検証され続けてきた暗号化手順を使用した方がよっぽど安全である。 単一換字式暗号 単一換字式暗号は平文の文字と暗号文の文字が一対一に対応する暗号である。平文「a」が「C」であるなら、暗号文「C」は必ず「a」になる。つまり、シーザー暗号も単一換字式暗号の一種であるが、ここではシーザー暗号を少し改良したものをつかう。 シーザー暗号は暗号化のパターンが単純で、26種類しかなかったのが問題であった。そのため、第三者の解読者が総当たりを試みる場合、その試行回数をべらぼうに増やすことを考える。 今回は、アルファベットそれぞれに対応する文字をランダムに決めた表を作成し、その表に従って暗号化と復号化を行うこととした。この場合、「a」に対応する文字を「D」と決めても、必ず「b」は「E」になるわけではなく、D以外の文字のどれかということになる(「a」に対応する文字が「D」であることがわかってるため)。もちろん、たまたま「b」が「E」に対応することもあるだろう。 これも実際に試してみよう。「sekaishibeta」を下記の表を鍵として暗号化すると「PQMFUPIUNQGF」となる。当然復号した文は、この表を見ながら文章を作っていけば良い。 さて、前提として第三者は暗号化手順はわかっているが鍵である対応表は持っていない。手順だけ分かっている解読者が、この暗号を解読するために総当たりで検証すると一体どれほどの時間がかかるか? シーザー暗号はずらすことしかしていないため26パターンであった。しかし、今回の方法は全部で26の階乗パターン存在する。つまり、最大「26 x 25 x 24 x … x 2… Continue reading 昔のかんたんな暗号を試してみる