はじめに
自社のホームページ立ち上げに当たって、HTTPとかHTTPS周りを復習したので簡単にまとめました
対象読者は、「HTTPSは安全でHTTPは危ないって聞いたことあるけど、仕組みとかはよくわからないな」くらいの人だと思ってください
HTTPとHTTPSの違いについて
HTTP(Hyper Text Transfer Protocol)はウェブサイトなどを見るときに、自分のPCと、そのウェブサイトの情報を教えてくれてるPCとを通信するためのお約束ごととか通信方法のこと
でもHTTPだとその通信が暗号化されていないので、通信データの盗聴とか改竄の被害を受けやすい
通信を暗号化して、外部の人は見えないようにしながら、自分のPCと通信相手のPCだけが見れるようになったら嬉しいよねってことでできたのがHTTPS(Hyper Text Transfer Protocol Secure)
HTTPSの暗号化方式
HTTPSの暗号化にはSSL(Secure Sockets Layer)による暗号化を用いていて、共通鍵暗号方式
と公開鍵暗号方式
を使っている
共通鍵暗号方式
共通鍵暗号方式は共通鍵
と言う名の通り暗号化と復号に同じ暗号鍵を使う
自分と相手だけが使う共通鍵
を作って、お互いに暗号化と復号をしながら通信をしている
メリットは
- 暗号化と復号の処理が早いこと
デメリットは
- 共通鍵を渡す時に盗み取られてしまうと、誰でも復号できるようになってしまうこと
公開鍵暗号方式
まずは、受信する側
が秘密鍵
と公開鍵
を作り、受信する側
は秘密鍵
を持っておき、送信してくれる相手
に公開鍵
をあげる
ここで面白いのが!!秘密鍵
で暗号化したものは公開鍵
でしか復号できなくて、公開鍵
で暗号化したものは秘密鍵
でしか復号できない!!
(暗号方法には色々あって、その一つにRSA
と言う暗号方式があって、その数学的根拠がすごく面白いから興味のある方は是非調べてみてください!!)
共通鍵暗号方式で問題だった「鍵を渡す時にバレちゃう問題」がこっちで発生したとする
つまり、公開鍵
を送信者に渡す時に第三者に公開鍵
がバレたとしよう
送信者が公開鍵
を使って暗号化して送信し、第三者がそれを復号しようとしても、第三者が持ってる公開鍵
だと復号できない!!
受信者は秘密鍵
を持ってるから復号できる!!
これをお互いの公開鍵と秘密鍵を使って通信をすれば安全に通信できる!!
最強だねって思うけど、デメリットがあって
- 暗号化・復号の処理に時間がかかってしまうこと
だから、共通鍵と公開鍵のどっちのメリットも活かして通信しようってことで生み出されたのがSSL通信
SSLによる暗号方式
①公開鍵を渡す
ウェブサイトなどを見ようとアクセスすると、ウェブサイトの情報を教えてくれるPCが正しいPCですよって言う証明書を送ってきてくれる
この証明書にはそのPCの公開鍵も含まれている
②共通鍵の作成
送られてきた証明書が正しいかをブラウザが調べてくれて、正しかったら共通鍵を作る
③共通鍵を渡す
作った共通鍵を相手に渡したいんだけど、途中で第三者に見られたり変更されたら困るので、もらった公開鍵を使って共通鍵の情報を暗号化して相手に渡す
④交通鍵を受け取る
公開鍵で暗号化された共通鍵の情報を、秘密鍵を使って復号する
これでお互い共通鍵を安全に共有することができた
⑤共通鍵暗号方式
お互いに安全に共通鍵を共有することができたので、それ以降は暗号化と復号の処理が早い共通鍵暗号方式で通信を行う
こうすることで、安全に暗号化通信を行うことができる仕組みとなっている
面白い!!
最後に
じゃあ実際はHTTPSだと100%安全かと言うとそうじゃない場合もあるから、気をつけましょう
(詳しくはHTTPS 危険性
などでググってみてください)