3分超えちゃったら、スタープラチナで時間止めてね!
共通鍵暗号方式と公開鍵暗号方式
まずは、Symmetric Encryption(共通鍵暗号方式)とAsymmetric Encryption(公開鍵暗号方式)について説明するね。共通鍵暗号方式は簡単で、暗号化と復号に同じ鍵を使うんだ。家の鍵を想像してみて!鍵をかけるときと開けるとき、同じ鍵を使うでしょ?
一方、公開鍵暗号方式は、Public key(公開鍵、誰でも見れるように公開してもOK)とPrivate key(秘密鍵、絶対に誰にも見せちゃダメ!)の2つの鍵を使うんだ。この2つはペアになっていて、片方の鍵で暗号化されたものは、もう片方の鍵でしか復号できない仕組みなんだ。共通鍵暗号方式に比べて、公開鍵暗号方式は処理に時間がかかるよ。
なんでわざわざ公開鍵暗号方式を使うの?共通鍵暗号方式でいいじゃん!
共通鍵暗号方式だと、最初に鍵を送るときに盗み見られる可能性があるよね?だから、安全に鍵を共有するために公開鍵暗号方式を使うんだ。
でも、公開鍵を送るときに、偽物とすり替えられる可能性もあるんじゃないの?
確かに!それは「中間者攻撃」って呼ばれてるんだ。だから、それを防ぐ仕組みが必要になる。そこで登場するのが、CA(Certificate Authority、認証局)なんだ。簡単に言うと、CAはサーバーに設置するための証明書を発行してくれる機関だよ。証明書には、サイトの情報と、CAの秘密鍵で暗号化された署名が含まれているんだ。クライアント側で証明書を検証するときは、証明書内の公開鍵を使って署名を復号し、証明書の情報と比較する。もし一致すれば、証明書が改ざんされていないことが証明されるんだ。
もうすぐ3分経っちゃう!具体的な手順は?
- クライアントがHttpsリクエストを送信する
- サーバーはCAから発行された証明書をクライアントに返す
- クライアントは証明書を受信し、信頼できるかどうかを確認する。信頼できる場合(またはユーザーが信頼することを選択した場合)、共通鍵暗号方式で使用する鍵(Key Sと呼ぶ)をランダムに生成し、証明書内の公開鍵を使用してKey Sを暗号化し、サーバーに送信する
- サーバーは暗号化されたKey Sを受信し、自身の秘密鍵を使用して復号し、クライアントに準備完了のメッセージを返す
- クライアントとサーバーは、Key Sを使用して共通鍵暗号方式で通信を開始する
インターネット上に情報はたくさんあるのに、なんでこの記事を書いたの?
いつか訪れるであろう、私の金魚並みの記憶力を呼び覚ますためだよ…・゚・(つд`゚)・゚・