前回の講座 [sitecard subtitle=PKI講座第5回目 url=https://pkiwithadcs.com/hash_algorithm/ target=] 前回は、データの改ざん検知に利用することがで[…]
前回は、公開鍵暗号化方式とハッシュアルゴリズムの仕組みを組み合わせた、デジタル署名の仕組みについて説明しました。デジタル署名の仕組みを利用すると、データの送信元の認証とデータの完全性が保証することができます。ただし、その条件として、公開鍵が正当なものである必要があります。公開鍵の正当性を保証する仕組みとして、「デジタル証明書」が利用されます。
今回は、「デジタル証明書」について、概要を紹介したいと思います。
デジタル証明書とは
証明書とは、配布する公開鍵とその持ち主の正当性を保証するための技術です。
前回 “デジタル署名” の回で説明した通り、デジタル署名など様々な技術で公開鍵暗号化方式は利用されていますが、公開鍵暗号化方式を利用するためには、”公開鍵の正当性” を保証する技術が必要となります。
例えば、「ねこねこ」が「ねこまる」の公開鍵を入手したいと考えているとします。その時、悪意のある第三者「わるまる」が “なりすまし” により公開鍵をインターネット上に公開している場合、どの公開鍵が本当に「ねこまる」の公開鍵なのかわかりません。
この問題を解決する技術が「デジタル証明書」であり、公開鍵の正当性を権威のある機関に保証してもらいます。「デジタル証明書」は、公開鍵付きの身元証明書というイメージで問題ありません。免許証やパスポートのような使われ方をします。
証明書には、以下の情報が含まれています。
証明書を発行するためには、自身の身元情報と公開鍵を申込書に記載して、権威のある機関に証明書の発行要求を申請します。
権威のある機関は証明書の発行要求の申請を受け取ったら、申し込みの身元調査を行い、証明書を発行しても問題ないか審査します。審査に通ったら、申込書に記載されている身元情報と公開鍵が記載された証明書を作成し、その証明書が公的な機関が発行してデータが改ざんされていないことを証明するためにデジタル署名を付与します。
デジタル署名は、証明書のデータ(身元情報と公開鍵)を元データとしてハッシュ値を算出し、そのハッシュ値を “公的な機関の秘密鍵” を利用して暗号化したデータとなります。そうすることで、証明書に記載されたデータ(身元情報と公開鍵)が公的な機関が作成したことを証明することができます。
公的な機関では独自のポリシーに従って、証明書を要求してくる人や組織・団体の審査も行っているため、公的な証明機関が発行した証明書を保持していれば、身元の正当性や、証明書に付与されている公開鍵の正当性は保証されていることになります。この証明書を発行する公的な機関のことを、”証明機関” と呼びます。(その他、認証局や “CA(Certificate Authority の略)” 等の呼ばれ方もあります)
文章だけだとイメージにしにくいので、証明機関に証明書を発行してもらうまでの流れや、公開鍵の正当性を確認する流れを図でみてみましょう。
A. 証明書の発行までの流れ
① キーペアを生成して、公開鍵を準備します。
秘密鍵と公開鍵のキーペアを作成します。秘密鍵は外部に漏洩しないように、厳密に管理します。
② CSR (証明書署名要求) を証明機関に提出します。
CSR は証明機関に証明書を要求する時に提出するファイルです。CSR には、証明書に記載する登録情報や公開鍵の情報が含まれています。CSR とは、”証明書の発行の申込書” のようなものになります。
③ 証明機関は証明書の発行依頼者を審査します。
証明機関は CSR を受け取ったら、発行要求を行ってきた依頼者の身元調査を行い、証明書を発行して問題ないか人もしくは組織なのかの審査を行います。どのような審査を行うかは証明機関ごとのポリシーによって異なります。
④ 証明機関は、CSR からデジタル証明書を発行します。
依頼者の身元調査の審査に通ったら、CSR に記載されている証明書の登録情報と公開鍵をもとに証明書を発行します。
証明書のデータの正当性を示すために、証明機関は証明書にデジタル署名を付与します。発行された証明書に付与するデジタル署名は、証明書のデータを元にハッシュ値を算出し、ハッシュ値を証明機関の秘密鍵で暗号化してデジタル署名を生成します。
B. 証明書の検証の流れ
発行された証明書は、インターネット上で通信を行う時に自身の正当性を証明する身分証明として利用できます。通信相手に “身分証明” として証明書を提示しますが、相手は証明書を受け取ったら、本当に信頼できる証明機関から発行される証明書であるのかを検証します。
① 証明機関の公開鍵でデジタル署名のデータを復号し、証明書のハッシュ値を得ます。
証明書の検証を行う際、証明書の公開鍵が必要となります。
証明機関の公開鍵もデジタル証明書として一般公開しており、これを CA 証明書と呼びます。
CA 証明書の公開鍵を使って、提示された証明書のデジタル署名を復号してハッシュ値を得ます。
② 証明書データのハッシュ値を算出し、デジタル署名のハッシュ値と一致するか確認します。
証明書には、デジタル署名に使用したアルゴリズムの種類が記載されています。
そのハッシュ アルゴリズムで証明書データからハッシュ値を算出して、デジタル署名のハッシュ値と比較して一致していれば、その証明書の正当性(CA 証明書をもつ証明機関が発行した証明書であること) を確認することができます。
ここまで説明してきた通り、証明書とは、権威のある機関に正当性を保証された証書となります。
その証書に公開鍵が含まれているため、公開鍵の正当性も保証されていることになります。
証明機関の公開鍵も証明書として正当性を保証していますが、一般の人や組織、団体の証明書のデジタル署名の検証に使用する証明機関の CA 証明書は、クライアントのコンピューターに信頼される CA 証明書としてインストールされているものを利用して検証します。
インターネット上に転がっている CA 証明書を、信頼できる CA 証明書として利用することはありません。システム管理者がクライアント端末にCA 証明書をインストールしたり、OS 標準の CA 証明書を管理する機能(!)で自動でインストールされます。
このように、CA 証明書については、正当な証明機関の CA 証明書のみがインストールされるような仕組みが実装されています。CA 証明書さえ厳密に管理していれば、インターネット上で入手できる一般の人や組織、団体の証明書の信頼性の判断は、証明書のデジタル署名を検証して判断することができるようになります。
Web サイトで利用されているサーバー証明書や、アプリケーションのインストーラーに付与されているコード署名を信頼する時、証明書の検証が行われます。証明書を検証する時、信頼できる証明機関から発行された証明書であるかどうかを確認します。この時、[…]
結局、証明書って何?
証明書は公開鍵暗号化方式を利用するにあたって、自分のもっている公開鍵の正当性を権威のある機関に証明してもらったものとなります。証明書には公開鍵や身元情報、公開鍵暗号化方式のアルゴリズムの種類などの情報が記載されており、その情報が改ざんされていないことを示すデジタル署名が付与されています。
デジタル署名により証明書に含まれる公開鍵や身元情報などの各データが正当であることを示しています。そのため、証明書は利用の観点から見ると “自分の身分証明書” であり、技術的な観点から見ると “自分の公開鍵を権威者から証明されたもの” となります。
証明書には大きく分けて 2 つ種類があり、ユーザー(人)が自身の正当性を証明するためのユーザー証明書、もう一つは、コンピューターが自身の正当性を証明するためのコンピューター証明書となります。
証明書ってどのようなシナリオで使うの?
ここまで証明書の技術的な観点での説明をしてきましたが、実際にはどのようなシナリオで利用されるのかイメージしにくいと思います。
利用の観点から見ると証明書は 「自分の身分証明書」となり、様々なシナリオにおいて自身の正当性を証明するために利用されます。証明書を提示した時、受け取った相手はその証明書が自身が信頼している証明機関が発行した証明書であるかをチェックします。
証明書を利用する一般的なシナリオとして、以下の 2 つの例を見ていきましょう。
①ユーザーの認証を行う時に証明書を提示する
ネット銀行や amazon での買い物など、個人情報に関連するシステムをインターネット上で利用するとき、ユーザー名やパスワードを入力して個人アカウントでログオンするという経験をしたことがあるかと思います。個人アカウントにログオンする際に入力するユーザー名とパスワードは本人しか知らないということを前提としているため、それを正しく入力できれば本人であることが確認できたことになります。ユーザーの正当性を確認することを “ユーザー認証” といいます。
証明書は自身の身分証明書となるという話をしましたが、ユーザー認証の際にユーザー名とパスワードを入力する代わりに証明書を提示することがあります。信頼している証明機関が発行したユーザー証明書をもつユーザーのみが認証が成功します。
② コンピューターの正当性を判断する時に証明書を検証する
もう一度、ネット銀行や amazon などのインターネット ショッピング サイトを利用するシナリオを考えてみましょう。
何気なくインターネット上のサイトを利用している場合、接続しているサイトが “本当に” 普段自分が利用しているネット銀行や amazon のサイトであるかを意識することは少ないでしょう。
ただ、インターネットは不特定多数の人が利用できるオープンなネットワークであるため、悪意のある第三者が amazon のサイトと見た目が全く同じサイトを偽造したとします。ユーザーは amazon のサイトにアクセスした時に、このサイトが本当に amazon のサイトなのかを考えることはせず、サイトの見た目が同じであれば、正当なサイトとみなして利用してしまう場合がほとんどです。(サイトの見た目が公式サイトと全く同じ偽造されたサイトのことをフィッシング サイトと呼びます。)
もし、偽造された amazon サイトであることにも関わらず使用してしまうと、悪意のある第三者にクレジット情報を送信してしまい、不正に利用されてしまう恐れがあります。
インターネット上にある各 Web サイトでは、自身のサイトの正当性を証明するためにコンピューター証明書(サーバー証明書)を利用します。
例えば、amazon の公式サイトであることを証明するために、amazon.co.jp のように公式のドメイン名で証明書を取得しサイト上で公開します。ユーザーが amazon にサクセスした際、Chrome や Edge、Firefox のような Web ブラウザが、サーバー証明書を検証し amazon.co.jp の証明書が、公的な証明機関から発行されたものであるかの検証を行います。
検証の結果、amazon.co.jp の証明書が正当な証明書であれば、そのまま amazon サイトを表示しますが、証明書が何らかの問題が確認できた場合はユーザーに警告画面を表示する動作となります。このように、ネット銀行やインターネット ショッピング サイトを安全に利用できている技術的な背景に、この証明書という技術が深く関わっています。
Windows でデジタル証明書を見てみよう
それでは、デジタル証明書をイメージするために、実際にデジタル証明書はどのようなものなのか見てみましょう!
Windows OS の端末をお持ちの方は、コンピューター内で利用する証明書を一括で管理している証明書ストアを開いて、その中に登録されている証明書を見てみましょう。証明書ストアに登録されている証明書は、OS にて利用されているものとなりますので、間違って削除しないように気を付けてください。
証明書の確認方法
1) Windows 端末にログオンします。
2) Windows キーを押しながら R キーを押し、[ファイル名を指定して実行] を開いて certmgr.msc と入力して [OK] をクリックします。
3) 画面の左ペインより、[証明書 – 現在のユーザー] – [個人] – [証明書] を選択し、登録されている証明書を一つダブルクリックして開いてみましょう。
※もし [個人] のストアの中に証明書が登録されていない場合は、[信頼されたルート証明機関] や [中間証明機関] など、他のストアに登録されている証明書を見てみましょう。
これが “デジタル証明書” と呼ばれるものです。
[詳細] のタブを選択すると、証明書の登録情報を確認できます。現段階では、証明書の各項目の詳細までを理解する必要はありませんが、証明書の持ち主の名前を示す “サブジェクト” や有効期間、また “公開鍵” のデータ (公開鍵そのものです) などの情報が含まれていること等を確認してみてください。
今回は、公開鍵の正当性を保証する技術である「デジタル証明書」について説明しました。
このサイトでの、他の記事では「デジタル証明書」をシンプルに「証明書」と記載しています。
次回は、最後の PKI 講座として、証明書を発行する証明機関について説明します。
前回の講座 [sitecard subtitle=PKI講座第7回 url=https://pkiwithadcs.com/certificate/ target=] 前回は「デジタル証明書」とは何なのか?という説明をし[…]