デジタル証明書とデジタル署名について

SSLTLSでは、通信途中のデータの改ざんや、フィッシング詐欺(銀行や組織を装い、口座番号やクレジットカードを引き出す)を防ぐために、デジタル証明書とデジタル署名という技術を用いている。

 

デジタル証明書とは?

SSLサーバー証明書ともいう。配布されている公開鍵の、送り主(機関、銀行など)が信頼できることを証明するための仕組み。

デジタル証明書は認証局(CA:Certificate Authority)が発行するもので、通信相手が送ってきた証明書を、発行元の認証局に照会することで、通信相手の身元を確認することができる。証明書の内容は、通信相手の身元を表す情報と、照会した認証局の情報、通信相手が発行した公開鍵、暗号化されたデジタル署名、などである。

SSLの仕様上、悪意のある攻撃者が自ら認証局となって、証明書を発行することが可能である。これを防ぐために、最近では有力な商用CAが厳格な身元確認などの審査を要する「EV SSL証明書」の発行を行っている。

 

デジタル署名とは?

データが通信途中で改ざんされていないことを証明するための仕組み。一方向ハッシュ関数を用いる。一方向ハッシュ関数は、以下の特徴を持つ。

  1. 生成されるハッシュ値は、元の値が1ビットでも変わると異なる値になる。
  2. 生成されたハッシュ値から、元の値を逆算できない。これを一方向性という。
  3. 元のデータの長さに関係なく、生成されるハッシュ値の長さは一定である。

よく知られているハッシュ関数にはSHA-1MD5などがある。

 

クライアント(Webブラウザ)が通信相手(Webサーバー)を信頼するまでの流れ

通信前にサーバー側がしておくこと

  1. Webサーバー側が秘密鍵と公開鍵を生成する。
  2. 認証局に、公開鍵と各種証明書を含むCSR(certificate signing request:証明書署名要求)を送る。
  3. 認証局は審査を行った上で、デジタル証明書を発行する。デジタル証明書は次の情報を含む。公開鍵所有者情報秘密鍵で暗号化したデジタル署名(公開鍵と所有者情報を一方向ハッシュ関数ハッシュ値にし、認証局が発行した秘密鍵で暗号化したもの)
  4. Webサーバーは、認証局からデジタル証明書が送られてくるので、大切に保管する。

 

通信前にクライアント側がしておくこと(は何もない)

  1. サーバーから送られてくる証明書には、認証局秘密鍵で暗号化されたデジタル署名が含まれており、これを復号化するためには、認証局の公開鍵が必要である。主要な認証局の公開鍵は、認証局の証明書という形で、Webブラウザにプリインストールされている。証明書は以下の手順でブラウザから確認することができる。(写真みてちょ)

f:id:bambinya:20150320110512p:plain

f:id:bambinya:20150320110639p:plain

 

さっそく通信を開始しよう

  1. クライアントは、サーバーへ通信要求を送る。
  2. サーバーは、サーバー証明書をクライアントへ送る。
  3. クライアントは、デジタル署名の技術を用いて、デジタル証明書が認証局で発行されたものかどうかを確認する。サーバーのデジタル証明書には、サーバーが生成した公開鍵所有者情報デジタル署名(サーバーが生成した公開鍵と所有者情報をハッシュ値にして認証局秘密鍵で暗号化したもの)などが含まれている。一方、Webブラウザが事前に持っている認証局の証明書には、認証局が生成した公開鍵認証局情報認証局がデジタル署名に使用したハッシュ関数などが含まれている。
  4. クライアントは、認証局の証明書に含まれる公開鍵を用いて、サーバー証明書に含まれる、暗号化されたデジタル署名(ハッシュ値)を復号する。
  5. クライアントは、認証局の証明書に含まれるハッシュ関数を用いて、サーバー証明書に含まれる公開鍵と所有者情報のハッシュ値を生成する。
  6. クライアントは、復号したハッシュ値と、生成したハッシュ値を比較する。
  7. ハッシュ値が一致すれば、サーバー証明書認証局で発行されたことと公開鍵が改ざんされていないことが分かる。クライアントは、サーバー証明書に含まれる公開鍵を使って、データを暗号化し、サーバーに送ることができる。

この図がわかりやすいよ!

f:id:bambinya:20150320094531g:plain