HTTPS

はじめに

こんにちは。KMC7回生のcosです。今年度分の部費はすでに払っているのでまだ現役です。
この記事はKMCアドベントカレンダー2013の18日目の記事で、 昨日は2回生のtyage君による 定番SSHクライアント「Google Chrome」 についてでした。KMCにはSSHが趣味な部員たちが多いようで、昨日まではSSHネタが多かったので別な話をしたいと思います。というわけで、今日はTLS/SSLHTTPSについて書きます。

HTTPSが必要な理由

多くのページHTTP通信を使用していますが、重要情報を扱うGmailとかamazonとかネットバンクは安全性のためにHTTPSを使用しています。HTTP + Digest(Basic)認証を使えばアクセスはできなくなりますが、通信を盗聴したり中間者攻撃ができてしまいます。
そこでSSLを使って盗聴・中間者攻撃を防げるようにしたのがHTTPSです。

HTTPSで保障されていること

HTTPS(というかSSL)を使うと以下の2点が保障されます。

  • 通信を暗号化することにより、クライアントとサーバ間の通信の盗聴を防ぐ
  • PKIを使った認証を行うことにより、中間者攻撃(なりすまし)を防ぐ

それ以外のことは保障されてないので、アクセス制限をしたい場合は別途Basic認証などが必要となります。

通信の暗号化は共通鍵暗号を用いて行い、鍵自体の交換はRSA暗号*1とかでやるので安全、と思いきや鍵の交換からなりすましが行われていた場合、RSA暗号を用いていたとしても中間者攻撃が成立してしまいます。

中間者攻撃という最強の攻撃を防ぐためにPKI*2を用いる必要があります。これは簡単に言うとWindowsとかのインストール時にルートサーバの鍵*3を埋め込んでルートサーバから順々に子サーバ、孫サーバの正当性を検証しつつ鍵を交換していく仕組みです。ルートサーバの鍵が安全に手に入るため、子サーバ・孫サーバの鍵も安全に手に入り中間者攻撃を防げます。

HTTPSを過信すると

以下の様なことが起きます。

  • サイト全体(https://example.com/)をHTTPS+Basic認証にして外部から見れなくしたと思ったらユーザーページ(https://example.com/~cos/とか)が丸見えだった。
  • サイト全体(https://example.com/)をHTTPS+Basic認証にしたらGitWeb(https://example.com/GitWeb/)が丸見えだった。
  • サイト全体がhttpsでhttpとか使ってないから、Cookieのsecure属性とか付けなくてもいいと思ったらhttp://example.com:443/にアクセスが来ていた。
  • HTTPSだから盗聴・改竄は無理なのでサーバの入力バリデーションをてきとうに作ったら、クライアント自身が改竄したデータを送ってきた。
  • 認証機能をてきとうに作ったらオレオレ証明書を信用してた。
  • 政府のページを使用するのになぜかルートCAを入れる必要がある。
  • クライアントもサーバも問題無いと思ったら認証局がハックされてた。

おわりに

時間が無かったので図もない手抜きの記事になってしまいました。特にPKI周りは端折りすぎな気がします。さて、明日はhidesys君がRails4の新機能について書くそうです。お楽しみに。
KEEP YOUR DIGNITY

*1:盗聴が出来ない暗号方法。

*2:という残念な仕組み。個人的には技術の敗北だと思う。

*3:本当は証明書だけど。