CHROMA

世の中の "当たり前" を確認する

HTTPの弱点とその対処

僕たちの目に普段触れることはありませんが、インターネットを使うときにはネットワークを介してクライアントとサーバーで通信が行われています。

HTTP は非常にシンプルで便利なプロトコルですが、このプロトコルを使っている通信にはセキュリティ面での問題があります。それは次のようなもののことです。

  • 通信が暗号化されていないので盗聴可能
  • 相手(クライアント・サーバー)を確かめて通信を行わないのでなりすまし可能
  • 情報の正確さを証明できないので改竄可能

これらの問題には、それぞれ対処法が存在します。

盗聴の危険を防ぐために取られる手段として、最も普及しているのは暗号化です。HTTP には暗号化の仕組みが無いので、これは SSL などの別のプロトコルを使って行います。

なりすましは第三者機関によって発行された証明書の受け渡しによって防がれます。証明書によって、相手の存在を確認し、本来意図した相手に情報が送られているかどうかを判断します。

改竄行為を防ぐには MD5SHA-1 といったハッシュ値を確かめる方法と、ファイルのデジタル署名を用いる方法があります。ただ、HTTP だけではこれらの方法でも改竄を完全に防止できるわけではないので(どちらも書き換えられる恐れがある)、確実に防ぐためには SSL などの別のプロトコルを使用することになります。

そして、HTTPS (HTTP Secure)はこれらすべてを補う仕組みとして考えられました。HTTPS は新しいプロトコルのことではありません。(通常は HTTP と TCP で直接通信するところを、HTTPS では HTTP の通信を行なうソケット部分を SSLTLS というプロトコルに置き換えいるだけです)

ここでは HTTPS の説明は行いませんが、暗号化のシステムや証明書の発行方法、全体の仕組みについては HTTPの教科書の第7章に詳しく載っていますので、こちらを参考にしてみてください。

また、Web 上では Wikipedia の「HTTPS」の項目が参考になります。HTTPS の暗号システムの1つである公開鍵暗号についても、最近記事が公開された「妻に公開鍵暗号を教えてみた」が参考になるかと思います。