まくろぐ

電子署名と電子証明書の基礎

更新:
作成:

電子署名(デジタル署名)(digital signature)

「電子署名」とは、データに付加され、そのデータが本当に作成者が作ったのかを確認するためのものです。 別の言い方をすると、受け取ったデータが第三者によって作られた偽物でないことを確認するための印です。

以下のような手順で、データが偽物でないか確認します。

  • データ送信側の「電子署名の作成」手順
    1. 送信するデータのメッセージダイジェストを求める。
    2. メッセージダイジェストを非公開鍵 (private key) で暗号化し、「電子署名」とする。
  • データ受信側の「電子署名の確認」手順
    1. 受信した「データ」のメッセージダイジェストを求める。
    2. 受信した「電子署名」を「送信者の公開鍵」で復号化し、メッセージダイジェストに戻す。
    3. 1 と 2 のメッセージダイジェストが等しければ、本人が作成したデータだと分かる。

上記の手順からも分かるように、一般的に「電子署名」の仕組みには、公開鍵暗号方式が用いられます。 問題は、公開鍵 (public key) が偽物である場合に、なりすましができてしまうことです。 そこで、公開鍵が本物であるかを証明するための、「電子証明書」が必要になってきます。

電子証明書(デジタル証明書) (digital certificate)

電子証明書とは?

公開鍵が偽物であると、公開鍵暗号方式は意味をなさなくなるため、公開鍵の正当性を証明することが重要になってきます。 電子証明書は、ある公開鍵が本物であることを証明するためのものです。

電子証明書は、一般的には、ITU-T X.509 の標準フォーマット(拡張子 .cer)で作成されます。 X.509 で作成された電子証明書ファイル (.cer) には、公開鍵そのものに加え、公開鍵の作成者(証明書の申請者)の情報、有効期限などが含まれています。

電子証明書の発行

電子証明書は、公開鍵が本物であることを示すためのものですが、その電子証明書自体が本物であることを示すために、末尾に電子署名が付加されます。 その署名は、公開鍵を作成したユーザが行うこともあるし、信頼のおける第三者が行うこともあります。 通常は、信頼のおける第三者機関である認証局 (CA: Certificate Authority) が電子証明書への署名を行い、電子証明書の発行を行います。

電子証明書 (X.509) の構成

電子証明書は、下記のようなデータで構成されています。

+------------------------------------+---------------------------------+
| 公開鍵 + 作成者情報 + 有効期限など | ← これが本物だと示す CA の署名 |
+------------------------------------+---------------------------------+

認証局による電子証明書の発行の流れ

  1. 公開鍵の作成者が、身元情報と公開鍵を CA(認証局)へ提出する。
  2. CA は 1 の情報を厳密に審査し、電子証明書(X.509形式)を発行する。
    • このとき、電子証明書は、CA の非公開鍵で電子署名される。ここでは、認証局が電子証明書(X.509 の .cer ファイル)だけを発行する例を示していますが、秘密鍵と電子証明書の両方を認証局が作成、発行することもあります。

SSL 通信を行うときに相手の Web サーバの公開鍵を取得するまでの流れ

SSL 通信を行うときは、通信相手の Web サーバの公開鍵を取得する必要があります。 Web サーバの公開鍵は、CA から発行された電子証明書の形で Web サーバ自身が持っています。

  1. Web サーバは、クライアントから SSL 通信の要求を受けると、自分の電子証明書を返します。
  2. クライアントは、その電子証明書を見て、それを発行した CA を調べます。
  3. クライアントは、その CA から CA 自身の公開鍵を取得します。
  4. 電子証明書には、CA の署名がついているので、CA の公開鍵を取得すれば、電子証明書が本物だと分かります。
  5. 電子証明書に入っている公開鍵を取り出せば、それが Web サーバの公開鍵です。

上記の流れでは、3 で CA に公開鍵を取得しに行っていますが、有名な CA の公開鍵は、あらかじめブラウザに「信頼されたルート証明機関(CA)の公開鍵」としてインストールされているので、CA へのアクセスは省略されます。

上記のようにして、クライアントが、Web サーバの公開鍵を取得できたら、クライアント側で共通鍵を作成し、それを Web サーバに暗号化して送ることで、その後のデータ通信が共通鍵暗号化方式で暗号化して行えるようになります。

関連記事

まくろぐ
サイトマップまくへのメッセージ