コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

なぜhttpがだめなのかをざっくりまとめる

わりと当たり前の話なんだけど、当たり前すぎて感覚に近いレベルで認識しているので書き留める

インターネットはバケツリレー

大前提、クライアントとサーバがデータのやりとりをするインターネットの機構は各データがクライアントから各種ルータなどを経由して、サーバまで到達する。このデータがバケツリレーで行われるため、何もしないとデータそのものは中継地点の第三者には見えるようになっている。

https通信では何を行っているか

httpsのsはSecureを表しており、このバケツリレーを安全な通信をできるようのための仕組み。技術的にはSSLが採用されている。

大まかに表現すると実データの通信前に以下の工程が行われる

  1. クライアント(ブラウザ)とサーバ間で暗号化の情報をやりとりする
  2. サーバからクライアント証明書(公開鍵A)を受け取る
  3. クライアントは共通鍵Bを作り、鍵Bを鍵Aで暗号化してサーバへ送る
  4. サーバは公開鍵Aと対になる秘密鍵Cで暗号を解いて鍵Bを取得する
  5. 以後の通信は鍵Bで暗号化しお互い暗号化/復号化して通信を行う

このようにクライアント側とサーバ側の2者でしかわかり得ない鍵を使って通信する内容自体を暗号化する。

httpだとどうなり、何が駄目なのか

httpsはクライアント側で暗号化したデータは中継地点のルータなどではデータを復号化できないため、それ自体は意味を知ることができない。だがhttpの場合はデータがそのまま見えるのでそのデータを見ればクライアントとサーバの間でどのようなデータがやりとりしているのかが丸裸になる。

そのため、httpの通信は第三者の中継地点を挟むので、本当に公開されているデータ以外が流通すると、盗み見される危険性があることが最大の問題となる。

参考リンク