公開鍵暗号技術のいろいろ―公開鍵暗号、デジタル署名、デジタル証明書

Web

 暗号化技術のなか公開鍵暗号化技術は広く使われていますが、紛らわしい概念も多いです。忘れないように整理してみます。主に以下の概念を説明します。
 ・公開鍵暗号化
 ・デジタル署名
 ・SSL/TLSプロトコル
 ・デジタル証明書(公開鍵証明書、SSL証明書)

公開鍵暗号とデジタル署名

 公開鍵暗号とデジタル署名はどちらも公開鍵暗号技術を基にしており、異なる目的を達成するために使用されますが、それぞれの区別は以下の通りです。

公開鍵暗号
  • 目的:主にデータの機密性を保つために使用されます。
  • 仕組み
    1. 受信者が公開鍵と秘密鍵のペアを持ち、公開鍵を外部に公開します。
    2. 送信者は受信者の公開鍵でメッセージを暗号化し、送信します。
    3. 受信者は自分だけが持つ秘密鍵を使って暗号化されたメッセージを復号します。

デジタル署名

  • 目的:主にデータの改ざん検出や、送信者の認証に使用されます。
  • 仕組み
    1. 送信者が自分の秘密鍵でデータを署名し、署名付きのデータを送信します。
    2. 受信者は送信者の公開鍵で署名を検証します。

SSL/TLSプロトコル

 TLS(Transport Layer Security)およびその前身であるSSL(Secure Sockets Layer)プロトコルは、インターネット通信を暗号化して安全に保つためのプロトコルです。主にWebブラウザとWebサーバ間の通信で使われますが、メールやVPNなど他のインターネット通信にも利用されます。

TLS/SSLの主な役割
  1. 暗号化: 通信内容を暗号化し、第三者に情報を盗まれたり改ざんされたりすることを防ぎます。
  2. 認証: クライアントとサーバが互いに信頼できることを確認します。これにはデジタル証明書(公開鍵証明書)を用います。
  3. データの完全性: 通信内容が送信途中で改ざんされていないことを保証します。TLS/SSLプロトコルではメッセージ認証コード(MAC)を使います。

デジタル証明書(公開鍵証明書)とは

 公開鍵証明書とは、暗号化や電子署名で使う「公開鍵」とその所有者の情報を第三者が証明するためのデジタル文書です。これにより、受信者は公開鍵が信頼できるものであると確認できます。

 主に次の情報が含まれます:

  1. 公開鍵 – 鍵ペアの一部で、データを暗号化する際や署名の確認で使います。
  2. 所有者情報 – 証明書の所有者(例: 個人や組織)の情報。
  3. 発行者情報 – 認証機関(CA: Certificate Authority)の名前とデジタル署名。CAが公開鍵と所有者情報を検証して証明書を発行します。
  4. 有効期間 – 証明書の開始日と終了日。

 これにより、公開鍵証明書を使った通信や取引で、各ユーザーが互いの正当性を保証し、安全な情報のやりとりが可能になります。ただ、ここだけでは解決できない問題があります。認証局の公開鍵は、どのようにすれば「正しい」「偽造がない」と判断できるでしょうか?ここに、出てくるのは階層になった証明書という概念です。

自己署名証明書(オレオレ証明書)と階層になった証明書

オレオレ証明書

 自己署名証明書(オレオレ証明書)は、第三者機関ではなく、組織や個人が自分で発行した自己署名証明書です。証明書の正しさを証明できないが、暗号化通信に使われますので、開発・テスト環境など内部での使用に適します。自己署名証明書の作成は以下のようなイメージです。

階層になった証明書(CA階層型証明書)

階層になった証明書(証明書チェーン)とは、信頼性を確保するために、複数の証明機関(CA: Certificate Authority)によって構成された証明書の階層構造を持つ証明システムです。この構造により、各証明書の信頼性を親の証明書が裏付ける仕組みになっています。

ルート証明書(Root Certificate):
  最上位のCAが発行する証明書で、自己署名されています。一般的にOSやブラウザにプリインストールされており、この証明書を信頼することで、その配下のすべての証明書も信頼されます。

中間証明書(Intermediate Certificate)
  ルートCAから信頼を引き継ぐための証明書です。中間CAが発行し、ルート証明書に対して署名されているため、中間証明書も信頼されます。複数の中間CAが階層化されることもあります。

エンドエンティティ証明書(End-Entity Certificate):
  サイトやサーバなどのエンドユーザーに発行される証明書で、一般的にSSL/TLS証明書と呼ばれます。この証明書は、中間CAによって署名されており、中間CAとルートCAを経由して信頼性が保証されています。

ルート証明書(あらかじめブラウザに組み込み済み、ルート認証局が自ら作成したオレオレ証明書)
   ↑
中間証明書(一般的にはそのデジタル証明書と中間証明書をテキストエディタでのコピペ等を使って
 1 つのファイルに連結し、そのデジタル証明書ファイルを、利用したい機器へインストールします。)
   ↑
SSL/TLS証明書(秘密鍵とセットでWebサーバにインストール)

SSLサーバ証明書の作成

ルート証明書の作成

 ルート証明書はルート認証局によって自分で作成したオレオレ証明書です。

中間証明書の作成
SSL/TLS証明書の作成

SSLサーバ証明書の検証

 ブラウザ(クライアント)はサーバにアクセスする際には、サーバは 中間証明書も含めた証明書チェーン をブラウザに提供します。これにより、ブラウザが完全な証明書チェーンを検証し、サーバ証明書を信頼できるかどうかを判断します。

 まず、PCにインストール済みのルート証明書に含まれる検証鍵(公開鍵)を使って、中間証明書の検証が行われます。この検証により、中間証明書に改竄がないことが確認できました。次に、中間証明書に含まれる検証鍵を使って、SSL証明書を検証します。SSL証明書にはHTTPS通信を行うための公開鍵が含まれています。

 署名済み証明書の検証の流れを以下の図に表しました。署名済み証明書を受け取ったクライアントは、署名済み証明書に含まれるCSRのデータからハッシュ値を算出します。次に暗号化されたハッシュ値を検証鍵(公開鍵)で復号します。CSRから算出したハッシュ値と、復号したハッシュ値を比較することで検証を行います。一致すれば正しいサーバーとして認識されます。反対に、もし証明書に改竄があればハッシュ値が一致せず、クライアントのブラウザに警告が表示されます。

コメント

タイトルとURLをコピーしました