# 公開鍵の正当性の確認

暗号化されたメッセージを送ったり、デジタル署名されたメッセージを受け取って検証する際には、公開鍵が正当なものであることが重要です。公開鍵とペアになっている私有鍵を悪意の第三者が持っていた場合には、メッセージが漏洩してしまったり、メッセージが改竄されていたり偽物だったりしても気づくことができません。

# OpenPGPによる信頼の網

OpenPGPでは、信頼の網(web of trust (opens new window))と呼ばれる方法で、メッセージのやりとりをする人が公開鍵の正当性を確認します。OpenPGPを利用する人は、それぞれ、やりとりをする相手の公開鍵に、私有鍵とその持ち主との関係がどれだけ確かなものか、信頼度を設定してデジタル署名して、公開鍵と共に公開することができます。新しく取得した公開鍵には、自分で信頼度を判断して設定してデジタル署名をすることもできますし、自分が信頼している公開鍵の持ち主が設定してデジタル署名した信頼度によって、信頼度を設定することもできます。

信頼の網では、それぞれの利用者がそれぞれの判断で信頼度を決めることが重要です。これによって、PKIのように単一障害点ができてしまうのを回避することができます。

公開鍵の信頼度を多くの人に設定してもらうことは簡単なことではありません。鍵対を持っている人どうしが直接会った時に、互いの公開鍵に信頼度をデジタル署名することがあります。直接互いの公開鍵のIDや指紋を確認することができるので、悪意の第三者の公開鍵がまぎれこんでしまう可能性を抑えられます。

多くの開発者が集まる機会があれば、キーサインパーティが開かれることがあります。参加者が公開鍵のIDや指紋、そして、身分証明書を確認しあい、それぞれの公開鍵にそれぞれの私有鍵でデジタル署名することで、効率的に信頼の網を拡張することができます。

紙の名刺などにIDや指紋を印刷しておくことによってオンラインでの改竄を防ぐこともできます。また、直接会うことが困難な相手のために、メーリングリストに投稿する電子メールやウェブページなどの多くの媒体を通してIDや指紋を公開しておくことで、悪意の第三者による改竄を困難にすることもあります。

Keyoxideなどの仕組みに則って、自分のSNSアカウントで指紋を公開すると共に自分のSNSアカウントの情報を署名付きで公開鍵に添付することもできます。SNS経由で知っている人の公開鍵の信頼度を設定する際に参考にできそうです。

# PKIによる公開鍵の正当性の確認

HTTPSでの通信に使われるTLS (Transport Layer Securrity[1])でも、デジタル署名を利用して通信先を信頼できるか検証します。ブラウザなどのHTTPSクライアントは、TLS接続を確立する時に通信先から提示された公開鍵(TLSサーバ証明書[2])に施されたデジタル署名から、署名を施した鍵対の公開鍵(中間証明書)を辿り、信頼すると決めている認証局の公開鍵(ルートCA証明書)のいずれかに到達できた場合に、TLSサーバ証明書そして通信先を正当なものとして信頼します。

OpenPGPの信頼の網とは異なり、TLSサーバ証明書を信頼するかどうかは、HTTPSクライアントがルートCA証明書を信頼するかどうかで決まります。このように、公的に信頼されている認証局がデジタル署名をすることで公開鍵の信頼を裏づける仕組みをPKI (Public Key Infrastructure、公開鍵基盤)と呼びます。信頼するルートCA証明書のリストは、ウェブブラウザやOSと共に配布されています。HTTPSクライアントの利用者が自分で設定することもできます。認証局によってデジタル署名された公開鍵を、証明書と呼ぶことがあります。証明書を利用した電子メールの暗号化やデジタル署名をS/MIMEと呼びます。

HTTPSへの応用のほか、文書へのデジタル署名に利用する鍵対として、認証局にデジタル署名されたクライアント証明書を利用することで、鍵対の正当性を確認することもあります。

公開鍵暗号の動作を確認したら、実際の活用方法を概観していきます。


  1. 以前SSL (Secure Sockets Layer)と呼ばれていたプロトコルの後継版です。 ↩︎

  2. 以前の呼び方を踏襲して、SSLサーバ証明書と呼ばれることもあります。 ↩︎