先端技術である量子暗号など、昨今、非常に高度な暗号化の開発が進められている。個人情報をはじめ多くの機微データがネット上でやりとりされているからだ。そこで、ここでは少し原点に返って、あらためて暗号化の基本についておさらいしてみることにする。
この記事は、ESETが運営するマルウェアやセキュリティに関する情報サイト
「We Live Security」の記事を基に、日本向けの解説を加えて編集したものです。
セキュリティ「オタク」がセキュリティの話題で他人としきりに話をしたがるのは、ある種の職業病のようなものである。こういった会話は当人たちが考えている以上に話が弾み、つい長引くことがしばしばである。だがその会話の中身は意外にも、人々のセキュリティにまつわる実際の習慣と思考過程について、ハッとさせられるような洞察を与えてくれることがある。
そこから知ることができることは、おそらく他のどのセキュリティの話題よりも暗号についての話こそ、実に多くの人たちにとって訳の分からない問題と思われているということである。そこで、暗号とは何であり、どれだけ有益なものであるか、ここでおさらいをしてみようと思う。
暗号:セキュリティに掛ける魔法のソースではない
「たいてい暗号というものは、数学に特別の才のある人だけが完全に理解し得る、とてつもなく複雑なものなのだと考えられている」
暗号を熟知しているかのごとく規則正しく使用する人でさえ、暗号というものはとてつもなく複雑で、数学の才のある人の中でも、最もできのいい人だけが完全に理解し得るものなのだと考えているように見える。確かに、本当に堅牢な暗号のアルゴリズムを創り出すことは決して簡単な芸当ではない。しかしその一方で、それと知らずに使っている単純な暗号もこの世には多く存在している。
端的に言うと暗号化とは、あるものにアクセスする権限を与えられていない人が簡単に理解できないように、それをエンコードする過程なのである。
ただし、ここで「簡単に」という言葉に注意してほしい。ある人々は、暗号化というのはある種の魔法のソースで、それを掛けさえすれば権限を与えられたユーザーだけがデータを見られるように自動的に、一義的に決まるような仕方で、あるコンテンツを変形させるものだと考えられている。しかし、暗号化といってもさまざまな種類があり、暗号が全て破るのが特に難しいというわけではない。
暗号解読リング
暗号は、子供の遊びとして楽しまれている場合もある。たいていの子供はとても単純なある種の暗号遊びをしたことがあるはずだ。例えば、もしもシリアルの箱によく入っているようなオマケの秘密の暗号解読リングで遊んだり、ワードスクランブル(*1)を解いたりしたことがあるのなら、それは暗号で遊んでいたということになるだろう。
*1 ワードスクランブル 羅列されたアルファベットと、初めから記述されているヒントを手掛かりに文字列を解読するパズル。
解読リングは暗号化の最も単純な方法の一つで「ローテーション暗号」または「シフト暗号」と呼ばれることがある。アルファベットを何文字か「順にずらす」ことでエンコードされた文字を作り出している。
ローマ皇帝ジュリアス・シーザーはしばしばシフト暗号を使った、とローマ帝国五賢帝時代の歴史家、政治家であるスエトニウス(Suetonius)は述べている。これはそれぞれの文字を3文字ずらすもので「シーザー暗号」と呼ばれている。
もう一つの有名なシフト暗号としては「ROT13 」として知られるものがある。この呼び名は 「13文字分順繰りにずらす」(rotate by 13 places)に由来したものだ。
ROT13
すでに気付かれている方もあるかと思うが、この「ずらし」はアルファベット26文字の半分に当たる。つまり、エンコードに用いる操作がデコードにも使えるということになる。暗号化の方法として、これほど単純で、かつ、安全ではないものもない。これは、メンバーが暗号文を平文と同じように読んでも構わないような特定のサークル内でよく使われるものである。
一方、クリプトグラム(ワードスクランブル)は所定の1文字を別の文字に置き換えて語句を解読するパズルである。難しすぎてゲームが楽しめなくならないようにするためには、解読の際に、ほど良く分かりやすくなるように作られなければならない。文字は単なるアルファベット順ではなく、ランダムな順序で使われるので、シフト暗号よりも解読が複雑になる。
子供のころに内緒で日記を付けていたことがあるなら、独自の暗号を創っていたのではないだろうか。日記の中で誰かに盗み見されることを心配することなく自由にしゃべれるようにするために、文字の代わりに特に意味のない記号を暗号として使うことがしばしばある(しかしまた、その同じ日記帳の表紙に暗号のキーを書いていたりもしたであろう)。
さてここで、世界一有名な私立探偵シャーロック・ホームズが解読する「踊る人形」(サー・アーサー・コナン・ドイル作)という暗号を思い出してみよう。
「これが読めるかね、ワトソン君。彼はほほ笑みながら言った。それは文字ではなく、踊る人形の短い列であった」
「踊る人形」の暗号
「僕が説明した暗号表を使えば、とホームズは言った。これが、すぐに来てほしい、という意味だと分かるだろう。僕はこれが招待状だと確信していた。男はこれを拒否できないはずだ。というのも、この招待がかのご婦人以外の何者かから来たなどということは、やつには想像できないだろうからね」
「かくして、親愛なるワトソン君、かつては悪の手先であったこの人形たちを、我々はついには良きものたちへとすることができたのだ」
「そして僕は、君の記録帳にまたしても不思議な事件を加えるという君への約束を果たしたというわけだ」
「3時40分の汽車がある。それに乗ればベイカー街に戻って夕食にありつけるんじゃないかな」
こういったものはとても単純な暗号化の方式で、その解き方もまた単純である(特に私がしたようにキーを丸見えのところに書き付けてあるような場合は、まさしく単純である)。しかし一方、今日のコンピューターの力をもってしても解くことが事実上不可能であるようなタイプの暗号というものもある。
そして、ほとんどのタイプの暗号は日頃使っているのと同じようなものであり、とりもなおさず複雑さという観点から言うと、これら両極の間のどこかに位置付けられると言える。すなわち、万人にとって解読するのがとても難しいが、暗号化の操作が永遠に終わらないほど複雑ではないのである
いつ暗号を使うか
一般的に、暗号を使うときはそれが「伝送中」であるか「停止中」であるかという二つの場合がある。ここで「伝送中」というのは、Webを通して、またはメールを使ってどこか別の場所に送ることや、自分のデバイスでない他のところに移すような場合を意味する。
データが自分のデバイスのストレージのようなメディア上にあるとき、それは「停止中」と見なされる。メディアはハードディスクのようなデバイスの構成部品であるときもあるし、USBメモリのようにリムーバルなものであることもある。
伝送中のデータを暗号化するという場合、誰かが会話を盗み聞きするのを思いとどまらせるため、見えないところで暗号化を行う。この最も代表的な例がWebトラフィックの暗号化である。多くのWebサイト、特に金融系、ソーシャルメディアやメールのサイトではこれをデフォルトで使っている。
この暗号化を行うためには、特に何かを行う必要はない。小さな南京錠のアイコンがWebサイト名の上端、サイト名の左端にあるとき、あるいはWebアドレスがHTTPS(HTTPではなく)で始まっているとき、そのデータは暗号化されている。HTTPSのSはセキュア(secure)のSであり、データが暗号化されていることを意味する。このおかげで、使用中のパソコンがサイトにデータを送ったり受け取ったりするそのやりとりは安全性を高められる。
全ての主要なOS、よく使われているアプリケーションソフトの多くには、使用しているデバイス上のファイルやフォルダを暗号化するオプションがある。このオプションを使う場合はパスワードを選ぶ必要がある。そのことでユーザー(あるいはユーザーとパスワードを共有する第三者)はロックを解除し暗号化されたファイルを復号化することができることになる。
使用中のデータ
暗号化はデータがストレージ上にある状態であれ、伝送中であれ、有益なものだが、議論すべき状態がもう一つある。暗号化されたデータを使用しているときである。つまり、暗号で保護されたドキュメントを開いてそれを閲覧したり編集したりするときのことである。この話は、たとえごくわずかの時間であれ、また何らかの手段で一見保護されているようであれ、暗号化されたファイルを開く場合には全て当てはまる。
ファイルのロックを外すことは、デバイスのメモリ上でそれが復号化されることを意味する。例えばもし、誰かがパソコンにマルウェアによってバックドアを仕掛けたのであれば、データのロックが外されている間は、その第三者はデータにアクセスができる。
しかしこの事例は、暗号化の効果がないということを意味するのではない。実際、暗号をできるだけ頻繁に使用することで第三者が加え得ると考えられるダメージをかなりの程度軽減できるし、そうすることで攻撃側が復号化されたデータにアクセスする時間という枠組みを狭めることもできる。これが階層化された防御が効果的であると繰り返し強調している理由である。一つの防御技術が別の防御技術の効果を支える。お互いに攻撃者がデータを盗む機会を狭めているのである。