わかりやすく HTTPS とは
はがきにパスワードを書いて送ると考えてみましょう。はがきが通る郵便局の人ならだれでも、こっそり読めてしまいます。ふつうのHTTPはまさにそれと同じで、やり取りする内容が途中でそのまま見えます。それなのに私たちは、カード番号をインターネットで安心して送っています。その秘密がHTTPSです。
途中でのぞかれる
これまで見てきたように、HTTPはリクエストとレスポンスをやり取りする約束です。けれども、ふつうのHTTPで行き来する内容は、文字のまま道を通っていきます。
パケットは家のルーターやいくつものルーターを通っていきますが、その途中でだれかがのぞけば、パスワードもカード番号もそのまま読めてしまいます。はがきを出すのと同じで、通る先々の人が読めるのです。前のレッスンで心配したクッキーの番号も同じです。
ふつうのHTTPで送ったメッセージを、道の途中の「中間の人」を押してのぞいてみましょう。秘密がそのまま読めます。
のぞけばそのまま読めることを確かめました。内容が道の上にむき出しになっているからです。
では、どうやって防げばよいのでしょうか。道をふさいだり、途中にいる人をすべて取り除いたりすることはできません。インターネットは、もともといくつもの手を通っていくように作られた道だからです。そこで発想を変えます。見えても読めないようにすればよいのです。内容に鍵をかけるのです。
鍵をかける
第一歩は鍵をかけることです。送る前に、決まった規則にしたがって内容を混ぜ合わせ、読み取れないようにします。これを暗号化といい、混ざった内容を元に戻すことを復号といいます。
鍵のかかった内容は文字がばらばらなので、中間の人が見ても意味がわかりません。ほどく鍵を持つ受け取る側だけが、元の文に戻せます。はがきを鍵のかかった箱に入れて送るようなものです。箱は見えても、中は見えません。
メッセージを押して、鍵をかけましょう(暗号化)。鍵をかけると文字がばらばらになり、中間の人が見ても読めません。
鍵をかけたので、中間の人が見ても読めません。ところが、むずかしい点が一つ残ります。鍵のかかったものを受け取る側がほどくには、開ける鍵が必要です。
はじめて訪れるサイトと前もって鍵を分け合っているはずはないので、鍵も道を通して送らなければなりません。でもそうすると、中間の人が鍵まで手に入れてしまいます。箱に鍵をかけておいて、その鍵をいっしょに送るようなものです。この問題をどう解けばよいのでしょうか。
錠は配り、鍵は自分だけが持つ
うまい解決法があります。閉める錠と開ける鍵を、別々に作るのです。錠はだれでも持っていって閉めることだけができ、これを公開鍵といいます。その錠で閉めたものは、組になった秘密鍵でしか開きません。
だから、錠は道にばらまいてもかまいません。閉めることはできても、開けることはできないからです。受け取る側が配った錠で閉めて送れば、それは受け取る側だけが持つ秘密鍵でしか開きません。
受け取る側が公開鍵(錠)を渡します。その錠で閉めて送ると、その人の秘密鍵でしか開きません。中間の人の鍵では開きません。
これで鍵の問題が解けました。錠は自由に配ってかまいませんし、開ける秘密鍵は受け取る側の手にしかないからです。
実際のHTTPSでは、この方法を最初に一度だけ使って二人で共有する秘密の鍵を安全に決め、そのあとはその鍵で速く閉めたり開けたりします。ところが、まだ一つ残っています。私に錠を渡した相手は、本当に私が探していたサイトなのでしょうか。にせものが自分の錠を差し出していたら、どうなるでしょうか。
本物かどうか確かめる
最後のかけらは身元の確認です。サイトは錠といっしょに、証明書という身分証を差し出します。証明書は、信頼できる機関が「この錠は本当にこのサイトのもの」と保証した書類です。
ブラウザーは信頼できる機関の一覧を前もって持っているので、証明書を見て本物かどうかを確かめます。にせのサイトはそんな保証を受けられません。だから証明書が合わなければ警告が出て、私たちを立ち止まらせます。
二つのサイトが証明書を差し出します。それぞれを押して、本物かどうか確かめましょう。本物は通り、にせものには警告が出ます。
これですべてそろいました。内容は鍵をかけて読めないようにし、開ける秘密鍵は受け取る側だけが持ち、相手が本物かどうかは証明書で確かめます。この三つがそろえば、途中にだれがいても安心です。見ても読めず、にせものは見破られるからです。
アドレスバーの鍵のマークは、まさにこの約束が働いているという意味です。ただし、鍵のマークは会話に鍵がかかっているという意味にすぎず、そのサイトが信頼できるところだという保証ではありません。
まとめ
一言でまとめるとこうです。ふつうのHTTPは内容がむき出しなので、途中ですべて見えてしまいます。HTTPSは内容に鍵をかけます(暗号化)。
錠である公開鍵はだれにでも配り、それで閉めたものは組になった秘密鍵でしか開けません。証明書で相手が本物かどうかも確かめます。だから、カード番号もログインのクッキーも安心して送れます。
要点を順に押して振り返りましょう。(ふつうの文はのぞかれる → 鍵をかける → 錠は配り、秘密鍵は自分だけ → 証明書で本物を確認)
これで、ネットワークを行き来するデータをどう守るのかがわかりました。鍵をかけ、鍵を守り、相手を確かめるのです。
ここまで、パケット、アドレス、道探し、名前探し、確実な配達、ウェブの会話とそれを守る方法まで、一つずつ見てきました。次のレッスンでは、これらのかけらを一つにまとめ、アドレスバーにアドレスを入れた瞬間から画面にページが出るまでに何が順に起きるのかを、最初から最後までたどります。