Note

'18.03

3分以内でわかるHttps

3分超えちゃったら、スタープラチナで時間止めてね!

共通鍵暗号方式と公開鍵暗号方式

まずは、Symmetric Encryption(共通鍵暗号方式)とAsymmetric Encryption(公開鍵暗号方式)について説明するね。共通鍵暗号方式は簡単で、暗号化と復号に同じ鍵を使うんだ。家の鍵を想像してみて!鍵をかけるときと開けるとき、同じ鍵を使うでしょ?

一方、公開鍵暗号方式は、Public key(公開鍵、誰でも見れるように公開してもOK)とPrivate key(秘密鍵、絶対に誰にも見せちゃダメ!)の2つの鍵を使うんだ。この2つはペアになっていて、片方の鍵で暗号化されたものは、もう片方の鍵でしか復号できない仕組みなんだ。共通鍵暗号方式に比べて、公開鍵暗号方式は処理に時間がかかるよ。

なんでわざわざ公開鍵暗号方式を使うの?共通鍵暗号方式でいいじゃん!

共通鍵暗号方式だと、最初に鍵を送るときに盗み見られる可能性があるよね?だから、安全に鍵を共有するために公開鍵暗号方式を使うんだ。

でも、公開鍵を送るときに、偽物とすり替えられる可能性もあるんじゃないの?

確かに!それは「中間者攻撃」って呼ばれてるんだ。だから、それを防ぐ仕組みが必要になる。そこで登場するのが、CA(Certificate Authority、認証局)なんだ。簡単に言うと、CAはサーバーに設置するための証明書を発行してくれる機関だよ。証明書には、サイトの情報と、CAの秘密鍵で暗号化された署名が含まれているんだ。クライアント側で証明書を検証するときは、証明書内の公開鍵を使って署名を復号し、証明書の情報と比較する。もし一致すれば、証明書が改ざんされていないことが証明されるんだ。

もうすぐ3分経っちゃう!具体的な手順は?

  1. クライアントがHttpsリクエストを送信する
  2. サーバーはCAから発行された証明書をクライアントに返す
  3. クライアントは証明書を受信し、信頼できるかどうかを確認する。信頼できる場合(またはユーザーが信頼することを選択した場合)、共通鍵暗号方式で使用する鍵(Key Sと呼ぶ)をランダムに生成し、証明書内の公開鍵を使用してKey Sを暗号化し、サーバーに送信する
  4. サーバーは暗号化されたKey Sを受信し、自身の秘密鍵を使用して復号し、クライアントに準備完了のメッセージを返す
  5. クライアントとサーバーは、Key Sを使用して共通鍵暗号方式で通信を開始する

インターネット上に情報はたくさんあるのに、なんでこの記事を書いたの?

いつか訪れるであろう、私の金魚並みの記憶力を呼び覚ますためだよ…・゚・(つд`゚)・゚・