IT

【初学者向け】SSLとは?PKIを利用した仕組みを素人にも分かりやすく解説します!

本記事は教養記事シリーズその30です。その他の教養記事はコチラの目次をご覧ください。

★この記事の流れ★

SSLとは?
PKIとは?
どのような仕組みなの?

本記事は初学者の理解を優先しているため正確性に欠ける場合があります。致命的なミスはご指摘いただけますと助かります。

SSLとは

SSLってよく聞くけど…?
結局何のことだか分からねえな…

 

SSLは「Secure Sockets Layer」の頭文字を取ったもので,ネットワーク上のセキュリティに関するルールのことを指します。最も身近に感じられるのは「https://」から始まるサイトのURLでしょう。「http」はSSLによってセキュリティの保護がされていない状態で,「https」は保護されている状態を表します。

保護されている状態
「TLS」もSSLと同じような意味です。SSLのバージョンが上がっていき「TLS」という名前に変更されました。TLSよりもSSLの方が馴染まれているので「SSL/TLS」と呼ばれることもあります。

 

しくみ

SSLでは「共通鍵暗号化方式」と「公開鍵暗号化方式」を組み合わせています。詳しくはコチラの記事で解説していますが,「共通鍵暗号化方式」では共通鍵をどのようにして受け渡すのかが問題となっていました。

共通鍵暗号化方式の問題点

 

そこで生み出された公開鍵暗号化方式では,鍵の受け渡しをせずに「公開鍵」と「秘密鍵」を1ペア用意することで暗号化を実現しました。

公開鍵暗号化方式
公開鍵暗号化方式で用いられるRSAに関してはコチラの記事で数学が苦手な方向けに丁寧に解説しています。

 

これらの考え方を利用して,SSLは生み出されました。共通鍵暗号化方式で問題となっていた「共通鍵の受け渡し」の部分を,公開鍵暗号化方式で暗号化して解決したのです。

共通鍵を公開鍵で暗号化します
実際に暗号化するのは共通鍵の「タネ」です。
タネは「プリマスタシークレット」と呼ばれます。
公開鍵方式と共通鍵方式を組み合わせるだけの方式はセキュリティの観点から今はあまり利用されていません。しかし,今回は分かりやすさを重視して,公開鍵と共通鍵をうまく利用する方法の概要をお伝えしていきます。

 

SSL通信の流れ

SSLはインターネット通信に利用されるので,ここではAさんがWebブラウザを使ってWebサーバとやり取りする場面について考えていきます。サイトの閲覧は「Webブラウザ⇔Webサーバ」のやり取りによって行われます。(詳しくはコチラの記事へ)

インターネット通信の流れ
分かりやすいように,以下ではAさんは除いて考えます。

 

Webブラウザが合図を出します

WebブラウザがWebサーバにSSLを開始するための合図を送信することで,通信が始まります。

 

続いて,サーバが共通鍵を送ります。…と言いたいところなのですが。

本当に信じていいの?

 

Webサーバが正しいという根拠もなしに,共通鍵を信じて使えるのでしょうか。Webサーバは自分が「正しいサーバであること」を証明するために,サーバ証明書を用意する必要があるのです。

サーバ証明書を発行してくれるのは,「信頼できる第三者」です。サーバ証明書さえ手に入れば,その証明書の中に公開鍵を仕込んでおくことで「サーバが正しいこと」と「サーバの公開鍵をブラウザ側に送信できること」の両方を実現することができます。この仕組みのことを「PKI(Public Key Infrastructure:公開鍵基盤)」と呼びます。

信頼できる第三者のことを認証局(Certificate Authority:CA)と呼びます。

 

Webサーバは,SSL/TLS通信に先立って認証局にサーバ証明書の発行を依頼しておきます。

まずは認証局に証明書の発行を依頼します

 

依頼を受けた認証局は,Webサーバの申請の妥当性をチェックして,サーバ証明書を発行します。その中に,Webサーバの公開鍵を含めるようにします。

証明書のなかに公開鍵が含まれます

 

Webブラウザ側は,サーバ証明書が正しいものであるかをチェックするためにCA証明書を利用します。

CA証明書は手元に渡っています
公的なWebサーバ用のCA証明書は、OSやブラウザソフトに同梱される形でWebブラウザ側に渡っています。
Webサーバ証明書の正しさが示されました

 

Webサーバ証明書が正しいことが分かれば,Webブラウザは共通鍵のタネを作成します。そのタネをもとに,Webサーバの公開鍵を利用して,共有させる鍵を暗号化します。

共通鍵のタネを公開鍵を利用して暗号化します
実際には,Webブラウザの秘密鍵を共通鍵のタネとして扱います。つまり,WebブラウザはWebサーバの公開鍵を利用して自分の秘密鍵の情報を共有することで暗号化を図っているのです。

 

作成した共通鍵(自らの秘密鍵)を利用して,Webブラウザ側で送りたい情報(サイトのURLやパソコン上の履歴等)を暗号化します。

送りたい情報を共通鍵で暗号化します

 

Webサーバに暗号文と暗号化された共通鍵を送ります。

悪い人には何も分かりません

 

Webサーバでは自分の秘密鍵を利用して共通鍵を手に入れ,その共通鍵で暗号文を復号します。

秘密鍵を利用して共通鍵を手に入れて
共通鍵を利用して復号します
実際には,共通鍵の情報はSSL開始時に送信されます。

 

これにて,両方が安全に共通鍵を手にすることができたので,セキュリティ通信が可能になります。これらの一連の通信方法を(定めたルールを)SSLと呼びます。

 

今日のSSL

2010年頃から,「DigiNotar事件」や「Flame事件」などといったPKIの安全性を脅かすような事件が起きています。そのため,SSLの仕組みは今回紹介したような公開鍵方式と共通鍵方式を組み合わせた手法は次第に使用されなくなっており,現在では主に鍵交換・電子署名・ハッシュ関数などを利用したアルゴリズムが利用されます。

●鍵交換:通信を行いたい相手とどうにかして鍵を交換すること
●電子署名:持ち主のみが行える操作を施すことで署名を実現すること
●ハッシュ関数:入力に対して適当な値を返してくれるしくみのこと

実は,鍵交換と電子署名は「公開鍵暗号」の仲間です。詳しくはコチラの記事(外部リンク)をご覧ください。

 

ひとこと

共通鍵暗号化方式の弱点を公開鍵暗号化方式によって補おうとする発想が面白いです。ネットサーフィンをしていると「サーバ証明書」という言葉をよく見ますが,このような「共通鍵と公開鍵をつなぐ生命線」のような働きをしているとは思いませんでした。やはり,身近に潜んでいるITの仕組みを知ることは非常にワクワクしますね。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です