本記事は教養記事シリーズその30です。その他の教養記事はコチラの目次をご覧ください。
PKIとは?
どのような仕組みなの?
SSLとは
SSLは「Secure Sockets Layer」の頭文字を取ったもので,ネットワーク上のセキュリティに関するルールのことを指します。最も身近に感じられるのは「https://」から始まるサイトのURLでしょう。「http」はSSLによってセキュリティの保護がされていない状態で,「https」は保護されている状態を表します。
![](https://tips-memo.com/wp-content/uploads/2019/04/8e29cace2cccc13f2d7ef941a24d63de.png)
しくみ
SSLでは「共通鍵暗号化方式」と「公開鍵暗号化方式」を組み合わせています。詳しくはコチラの記事で解説していますが,「共通鍵暗号化方式」では共通鍵をどのようにして受け渡すのかが問題となっていました。
![](https://tips-memo.com/wp-content/uploads/2019/04/e8412fdb8346af94c1511ac9cfb9014f.png)
そこで生み出された公開鍵暗号化方式では,鍵の受け渡しをせずに「公開鍵」と「秘密鍵」を1ペア用意することで暗号化を実現しました。
![](https://tips-memo.com/wp-content/uploads/2019/04/be07081dda153b5bbf9f060e09a8e19a.png)
これらの考え方を利用して,SSLは生み出されました。共通鍵暗号化方式で問題となっていた「共通鍵の受け渡し」の部分を,公開鍵暗号化方式で暗号化して解決したのです。
![](https://tips-memo.com/wp-content/uploads/2019/04/SSL1.png)
SSL通信の流れ
SSLはインターネット通信に利用されるので,ここではAさんがWebブラウザを使ってWebサーバとやり取りする場面について考えていきます。サイトの閲覧は「Webブラウザ⇔Webサーバ」のやり取りによって行われます。(詳しくはコチラの記事へ)
![](https://tips-memo.com/wp-content/uploads/2019/04/6a45d6b18e3f762c957007d55a22e558.png)
![](https://tips-memo.com/wp-content/uploads/2019/04/81dcb2c968b68e11b9a0fec46141264f.png)
WebブラウザがWebサーバにSSLを開始するための合図を送信することで,通信が始まります。
続いて,サーバが共通鍵を送ります。…と言いたいところなのですが。
![](https://tips-memo.com/wp-content/uploads/2019/04/5bbc1a0bbd4d4a156e86d07b38b7d423.png)
Webサーバが正しいという根拠もなしに,共通鍵を信じて使えるのでしょうか。Webサーバは自分が「正しいサーバであること」を証明するために,サーバ証明書を用意する必要があるのです。
サーバ証明書を発行してくれるのは,「信頼できる第三者」です。サーバ証明書さえ手に入れば,その証明書の中に公開鍵を仕込んでおくことで「サーバが正しいこと」と「サーバの公開鍵をブラウザ側に送信できること」の両方を実現することができます。この仕組みのことを「PKI(Public Key Infrastructure:公開鍵基盤)」と呼びます。
Webサーバは,SSL/TLS通信に先立って認証局にサーバ証明書の発行を依頼しておきます。
![](https://tips-memo.com/wp-content/uploads/2019/04/a93612d97cee9af191fdb20ad22dfe4e.png)
依頼を受けた認証局は,Webサーバの申請の妥当性をチェックして,サーバ証明書を発行します(CAの秘密鍵で署名)。その中に,Webサーバの公開鍵を含めるようにします。
![](https://tips-memo.com/wp-content/uploads/2019/04/3c9f4ce43c8734038f747923cf0de1ca.png)
Webブラウザ側は,サーバ証明書が正しいものであるかをチェックするためにCA証明書(CAの公開鍵+α)を利用します。
![](https://tips-memo.com/wp-content/uploads/2019/04/4fdad7fa6af75d68ccfda4a4b8797430.png)
Webブラウザは,CAの証明書(CAの公開鍵と表現される場合もあります)を利用して,サーバ証明書の正当性を確認します。
![](https://tips-memo.com/wp-content/uploads/2019/04/f2615bab465083809edf6e84a503b3b1.png)
Webサーバ証明書が正しいことが分かれば,Webブラウザは共通鍵のタネを作成します。そのタネをもとに,Webサーバの公開鍵を利用して,共有させる鍵を暗号化します。
![](https://tips-memo.com/wp-content/uploads/2019/04/SSL9.png)
作成した共通鍵(自らの秘密鍵)を利用して,Webブラウザ側で送りたい情報(サイトのURLやパソコン上の履歴等)を暗号化します。
![](https://tips-memo.com/wp-content/uploads/2019/04/SSL5.png)
Webサーバに暗号文と暗号化された共通鍵を送ります。
![](https://tips-memo.com/wp-content/uploads/2019/04/b893ac9051dd184d3a47eb0e7190660e.png)
Webサーバでは自分の秘密鍵を利用して共通鍵を手に入れ,その共通鍵で暗号文を復号します。
![](https://tips-memo.com/wp-content/uploads/2019/04/SSL10.png)
![](https://tips-memo.com/wp-content/uploads/2019/04/SSL8.png)
これにて,両方が安全に共通鍵を手にすることができたので,セキュリティ通信が可能になります。これらの一連の通信方法を(定めたルールを)SSLと呼びます。
今日のSSL
2010年頃から,「DigiNotar事件」や「Flame事件」などといったPKIの安全性を脅かすような事件が起きています。そのため,SSLの仕組みは今回紹介したような公開鍵方式と共通鍵方式を組み合わせた手法は次第に使用されなくなっており,現在では主に鍵交換・電子署名・ハッシュ関数などを利用したアルゴリズムが利用されます。
●鍵交換:通信を行いたい相手とどうにかして鍵を交換すること
●電子署名:持ち主のみが行える操作を施すことで署名を実現すること
●ハッシュ関数:入力に対して適当な値を返してくれるしくみのこと
ひとこと
共通鍵暗号化方式の弱点を公開鍵暗号化方式によって補おうとする発想が面白いです。ネットサーフィンをしていると「サーバ証明書」という言葉をよく見ますが,このような「共通鍵と公開鍵をつなぐ生命線」のような働きをしているとは思いませんでした。やはり,身近に潜んでいるITの仕組みを知ることは非常にワクワクしますね。