〜HTTPSの"S"が必要な理由と絶対ではない理由、安全を保つ方法〜
こんにちは、SSL研究員 難波です。
私が中学生の時、クラスの女子の間で授業中の手紙の交換が流行っていました。僕はこの手紙の交換が始まると憂鬱でした。手紙を交換している女子の間の席になってしまったら手紙の中継を頼まれます。そもそも自分に関係のない手紙の中継なんて何の意味もなく、先生に見つかろうものならとんだとばっちりです。そして、その手紙は大抵小さい紙を二つ折りにした程度のセキュリティで僕の所にやってきて、見てもいないのに中を見たという疑いを度々かけられる非常に厄介なものでした。
そもそも手紙を盗み見るどこか、やろうと思えば内容を書き換えることだって、筆跡を真似れば友達に成りすまして普段聞けないような質問だって出来るかもしれません。
考えてみると、授業中の手紙交換とHTTPは似ています。そう、あのWebページを見る時に必要な通信プロトコルのHTTPです。WebサーバーとWebブラウザーなどのクライアントが、文書などの情報を交換する時のプロトコルですが、そのやり取りは平文で行われています。
何も暗号化していない平文をそのまま紙に書いて2つ折にし、宛先を告げて中継者に渡しているのと同じです。まあ授業中の手紙交換の内容なんて、ほぼどうでもいい内容なので、それはそれでいいです。しかしこれが好きな男子の名前とかなら話は別です。そのまま名前を紙に書いて二つ折りで中継者に渡すわけにはいきません。
そんなのが回ってきたら、関係ない僕でも中身が気になってしまいます。
インターネットでも同じです。Webサイトを閲覧している程度ならHTTPでもまあいいでしょう。しかしHTTPのページにパスワードを入力するということは、紙にパスワードを書いて二つ折りで中継者に渡すのと同じくらい危険なことなのです。
世の中、個人情報とかセキュリティとかで騒いでいるので、パソコンやスマートフォンでインターネットに接続していると、最低限のことは誰かが知らないところで守ってくれていて、たぶん問題なんて起きないだろうと思いがちですが、HTTPが授業中の手紙の交換と同じだと思えば、もうHTTPのページに簡単にクレジットカード番号やパスワードを入力することは出来なくなるはずです。
今でもHTTPのページでパスワード入力を要求するWebサイトをたまに見かけます。そんな時は、「勘弁してよー。Sを付けてよー。」と心の中で叫びながら、何もせずにそのページを閉じるか、どうしても必要な場合は、使い捨てのIDとパスワードを用意する所から始まるという不便を強いられるのです。
というわけで、大事な情報を安全にやりとりするときは、Sの付いたHTTPSが必要です。HTTPSはHTTP over TLS(Transport Layer Security) のことです。確かにSをつけると安全そうなのは単語からも想像できます。
では、このHTTPSのS、つまりTLSは何をしてくれるのでしょうか。それは私達が安全に通信するために「盗み見」、「改ざん」、「成りすまし」を防いでくれます。技術的な詳細は割愛しますが、誰もがインターネットで買い物から金融商品まで扱う時代、もうHTTPSのSは必須です。S無しではこの世界は成立しないと言っても過言ではないでしょう。
では、HTTPSを使えば、通信のセキュリティは完全に保証されるのでしょうか。残念ながら違います。なぜ完全に保証されないのか。それはHTTPSで使用している暗号が、そもそも完全ではないからです。
暗号の歴史は古く、紀元前5世紀のスパルタで用いられた転置式暗号を用いたスキュタレーという装置が軍事用暗号装置としては最も古いと言われています。そして、現代の暗号と同じくアルゴリズムと鍵の2つの要素を含む有名なシーザー暗号も、紀元前100年頃には使用されていました。シーザー暗号のような換字式暗号は十分安全と思われ、千年に渡り使用されていましたが、現在では文字の出現頻度のばらつきを利用すれば暗号を解読できることが広く知られています。そしてこの暗号解読方法は9世紀の書物に記述されていることが発見されているのです。暗号はその目的から開発も解読も秘密にされてきました。そのため、いつ開発され、いつ解読されたかの実態は不明なことが多く、シーザー暗号も実は9世紀よりずっと前に解読されていたのかもしれません。
暗号の歴史の話に戻ります。紀元前からずっと手作業で行われていた暗号の作成は、機械式暗号機に代わっていきます。映画にもなった第二次世界大戦のドイツ軍の有名なエニグマのような暗号機の登場により、暗号は格段に複雑になりました。しかし、エニグマの暗号がイギリス軍に解読されてしまったように、どんなに複雑な暗号も、暗号解読者のよって破られてしまうというのが暗号の歴史なのです。紀元前から現在に至るまで、暗号の開発と解読が延々と繰り返され、今後もその戦いに終わりはないと思われます。
さて、ここからが本題なのですが、第二次大戦後、暗号はコンピュータの時代になります。ここで登場するのが、DES暗号です。この暗号が今までと大きく異なるのは、暗号化のアルゴリズムを公開したということです。このアルゴリズムの公開の結果、みんなで共通の暗号アルゴリズムを使えるため民間でも利用されるようになっていきます。ただし、シーザー暗号と同様に鍵は共通鍵を使用するため、鍵は秘密裏に交換しなければいけないという問題は残りました。
そしてその問題を解決するRSAのような公開鍵暗号の登場により、インターネット上でどうどうと鍵を交換できるようになりました。この公開鍵暗号の登場により、秘密裏に鍵交換する必要がなくなり、企業だけでなく個人でも安心して、クレジットカード番号やパスワードを入力できるようになったのです。
これらコンピュータ時代の暗号に共通して言えることは、暗号アルゴリズムはみんなが知っているということです。それは全ての鍵のパターンを当てはめれば、いつかは解読できることを意味します。つまりだれでも頑張れば解読できることが前提で使用されている暗号なのです。その暗号が安全かどうかは、現実的な時間で解読できるかどうかだけです。そのため、コンピュータの計算速度が上がれば、解読にかかる時間はどんどん短くなり、そのうち解読にかかる時間は現実的なものとなってしまいます。ちなみにDESは鍵の長さは56bitですが、開発当時は現実的な時間での解読はできませんでした。しかし現在のコンピュータの計算速度では、安全なものでは無くなっています。そのためDESに変わりAESが採用され、鍵長も128bit、192bit、256bitと、より長い強固なものになっています。
このように、現在使用している暗号は、コンピュータの性能が上がれば安全に利用できなくなるのはわかっているのですが、いまの計算速度だと大丈夫ということを保証しているに過ぎないのです。つまり将来にわたり保証してくれるものではないので、その時代にあわせた対応が必要となるのです。
現在使用している暗号が将来的に使えなくなるという前提に加えて、TLSやその元になったSSLのような通信プロトコルの脆弱性も考える必要があります。例えば2014年にSSL3.0の仕様上の脆弱性、所謂POODLE攻撃が発見されて、多くのサイトがSSL3.0の利用を停止しました。脆弱性を見つけて攻撃しようとする人は大勢います。これも暗号同様、脆弱性への対応と攻撃の果てしのない戦いなのです。そしてTLS1.0、TLS1.1についても脆弱性が見つかり、2017年あたりからこのバージョンの利用を停止するサイトが増えてきました。TLSの最新版バージョンは1.2であり、2018年現在TLS1.3の仕様策定が進んでいます。
このように、暗号解読と脆弱性への戦いに加えて、コンピュータの計算速度の向上が続く限り、今の通信システムもいずれは使えなくなります。そのため、私達は、常に新しいものに対応し続けなければいけないことを認識する必要があります。そして、これからも安全な通信を確保するために、通信を提供する側だけでなく、利用者も時代に合わせた対策をとることが重要となります。
参考文献:サイモン・シン(2007)暗号解読 新潮文庫