サイバーセキュリティを考える市民の会
暗号とはなんだろうか。今回は、通信の秘密を支える技術である暗号について、具体的な例を通じて一緒に考えていきたい。
日本語版Wikipediaによれば「暗号(あんごう、cryptography、cipher、code)あるいは暗号化(あんごうか、Encryption)とは、第三者に通信内容を知られないように行う特殊な通信(秘匿通信)方法のうち、通信文を見ても特別な知識なしでは読めないように変換する表記法(変換アルゴリズム)のことである。通信だけでなく保管する文書等の内容を秘匿する方法としても用いることができる」とある。
モールス信号を思い浮かべてほしい。通信したい内容をトン・ツーの2つの合図に変換するそれは、変換方法を知らない人にとっては謎めいた音にしか聞こえないだろう。略称やニックネーム、隠語の使用も、広い意味では暗号と呼べるかもしれない。
シーザー暗号と呼ばれる比較的簡単な暗号があるので、それを具体例として暗号について解説していこう。シーザー暗号では、まずてきとうな自然数をひとつ決める。ここでは3にしよう。簡単のため暗号化する文章は英語とする。アルファベットは順番が決まっている。「abcdefghijklmnopqrstuvwxyz」の順番で26文字だ。これをさきほど決めた自然数個だけ左にずらすという対応を考えよう。すると「defghijklmnopqrstuvwxyzabc」となる。「a」は「d」に、「b」は「c」に、「p」は「m」、「z」は「c」にといった具合だ。この対応あるいは変換を使って「cookie」を暗号化すると「frrnlh」となる。もうすこし複雑な例として「Let’s abolish the emperor system of Japan!(天皇制を廃止しよう!)」を考えてみよう。実際に紙に書いてやってみてもいいだろう。答えは「Ohw’v derolvk wkh hpshuru vbvwhp ri Mdsdq!」となる。だいぶ暗号らしくなってきた。
さて、もう少しだけ例を見てみよう。「revolution(革命)」は「uhyroxwlrq」となり、「communism and anarchism(共産主義と無政府主義)」は「frppxqlvp dqg dqdufklvp」となる。
暗号化の逆の操作のことを復号化という。「uhyroxwlrq」を復号化すると「revolution」となるわけだ。この例には、暗号というものを考えるうえで大切な2つの概念が登場している。暗号化方式と鍵だ。この例では、暗号化方式はシーザー暗号で3というのが鍵になる。「鍵」とは、その名から連想する通り暗号化/復号化を行うための鍵のことだ。もしシーザー暗号を使ってセキュアなやり取りをしたいと考えるのであれば、この鍵を通信したい相手との間だけで適切に共有しなくてはならない。
実は鍵をセキュアに伝達することそれ自体難しいことで、一般に鍵配送問題と呼ばれたりもする。シーザー暗号は送信者と受信者が同一の鍵(ひとつの自然数)をもつため、共通鍵暗号とも呼ばれる。このタイプの暗号では常にどうやって鍵を伝達したらよいものか頭を悩ましてしまう。鍵を暗号化して送ろうとすれば、そのためにまた別の暗号化方式と鍵を定めなくてはならず、堂々巡りになってしまう。鍵を紙に書いてあるいは暗唱して相手のところまで直接持参するのというのも、素朴でそして安全な方法のひとつだ。こうした共通鍵暗号の弱点を克服したものに公開鍵暗号というものがあるが、それはまた次回以降に譲るとしよう。
また、もちろんシーザー暗号は単純すぎて現実には役に立たない。実際のメールや文書を暗号化する上では、どの暗号化方式使うか、鍵をどのように決めたらよいのか、鍵を保存するあるいは伝達するための手段はどうするか、を考える必要があるだろう。
もっとも、セキュアだと考えられている暗号のひとつにPGP(Pretty Good Privacy)というものがあり、それを扱うためのOpenPGPというフリーソフトウェアが開発・公開されている。フリーソフトウェアのため誰でも自由に無償で利用することができる。もともとPGPは、反核運動に参画していたフィリップ R・ジマーマンによって1991年に開発された。
しかし、いつでもPGPを使うのが最善とは限らない。というのも、PGPはその安全さに比例して少しばかり使うのが難しいからだ。
前回紹介した電子フロンティア財団の「脅威のモデル化」を思い出そう。何を誰から守りたいのか。守れなかった場合どのようなことが起きるのか。またどれくらいの手間をかけられるのか。こうした問いを具体的なケースごとに考えていくことが肝要だ。
PGPを使えなくとも、日々利用するSNSアカウントなどのパスワードをいつもより少しだけ複雑なもの、特殊記号や数字を使ったりするだけでも、セキュリティーは高められる。ほかにもこまめにセキュリティーアップデートをかけたり、できるだけフリーソフトウェアを利用するというのも簡単な方法だ。