Public Key Infrastructure(PKI)とは

Public Key Infrastructure(PKI、公開鍵基盤)とは、公開鍵暗号方式を用いた暗号化技術とデジタル証明書を使用してインターネット上で安全にデータ通信を行う仕組みのことです。このウェブサイトのページを表示しているブラウザとウェブサーバ間のHTTPS通信にも用いられています。このPKIの仕組みについて詳しく見ていきましょう。

目次

公開鍵暗号化方式とは

公開鍵暗号化方式では暗号化と復号化に異なるペアキーを使用します。データの暗号化をするのに「公開鍵」を使用し、暗号化されたデータを複合するのに「秘密鍵」を使用します。

ここで重要なのは、公開鍵で暗号化したデータは秘密鍵でしか複合できないという点です。

そして、「どうやって安全にデータを相手(あなた)に届けるか」という観点から理解する必要があります。私があなたに渡すデータはあなただけが読める状態、つまり秘密鍵で複合できる状態でなければなりません。その秘密鍵で複合できるのはそのペアキーである公開鍵で暗号化したデータだけです。なので私はあなたから公開鍵を取得しないとあなただけが解読できるデータの暗号化がきません。

つまり、私が安全にあなたにデータを渡したい場合、あなたは秘密鍵と公開鍵の2つを持っていて、公開鍵を公開していれば私はデータを暗号化してあなたに渡すことができて、あなたは受け取ったデータを自分d家の秘密鍵で複合できるという事とになります。

なので、双方向に暗号化したデータのやり取りを行う場合、私も自分の秘密鍵と公開鍵を持っていて、あなたが私の公開鍵を取得できるようにしておかなければなりません。

暗号化で防げること

暗号化で防げるのは「盗聴」と「改ざん」です。暗号化されているので、盗聴されてもその内容は復号化できず、内容が分からないので盗聴に失敗します。そして、暗号化された状態のデータの一部が変更された場合、多くの場合は復号化に失敗するか、無意味なデータとして認識されます。

しかしながら、暗号化のみでは「なりすまし」は防げません。そこで必要になってくるのがデジタル証明書です。

デジタル証明書

ウェブサイトのなりすましは、DNSスプーフィングと呼ばれる手法を用いてDNSサーバーを改ざんし、正規のドメイン名に対して偽のIPアドレスを返すことでユーザに別のサイトを表示することができます。この様なことが事が可能であるならば、ブラウザに入力した正規サイトのドメイン名にアクセスしても、本当に正当なWebサーバにアクセスしているのか確証が持てなくなります。ログインデータは勿論の事、銀行情報、クレジットカードデータなどは怖くて入力できなくなります。このなりすましを防ぐ方法がデジタル証明書(HTTPSのSSL/TLS証明書)です。

デジタル証明書とは「その公開鍵が信頼できる相手のものである」 ことを証明するファイルです。今アクセスしている正規のドメイン名の裏で悪意ある別のサーバにアクセスしている状態になっていないことをどうやって証明するのでしょうか。

認証局(Certificate Authority, CA)による証明書の発行

アクセスしているサーバの正当性の証明は第3者機関である認証局が発行するデジタル証明書(以下証明書)によって行われます。

証明書発行リクエスト

わたしは自分が所有するこのドメインとそのサーバの正当性の主張をしたいので認証局に証明書の発行リクエストを行います。リクエストファイルを作成する際にはドメイン名や組織の情報を一緒に含めます。また、リクエストファイル作成時に復号化に使用する秘密鍵も作成されます。最後に、サーバ上で作成したリクエストファイルを認証局に送信します。

証明書の発行

リクエストファイルを受け取った認証局はデジタル証明書を発行します。認証局自体も自分たちの秘密鍵と公開鍵を持っていて、その秘密鍵を使って証明書にデジタル署名をします。発行される証明書にはこの認証局のデジタル署名、認証局の公開鍵(後述の認証局の署名検証用)、証明書の所有者情報(ドメイン名や組織情報)、そしてサーバの公開鍵(送信データの暗号化用)などが含まれています。

証明書の保存

発行されたデジタル証明書をサーバ上に保存しておきます。これでサーバ上に証明書と秘密鍵が保存してある状態になりました。

ではブラウザはどうやってサーバの正当性を検証するのでしょうか。次のその検証フローを見ていきましょう。

HTTPS通信での証明書の検証方法

ブラウザにURLを入力してブラウザがサーバにアクセスするフローを考えてみます。

1)ブラウザからデータ送信リクエストを受けたサーバはまず認証局から発行されたSSL/TLS証明書を返します。

2)ブラウザはサーバからの証明書に含まれる認証局のデジタル署名を認証局の公開鍵で検証し、改ざんがなければ証明書が認証局が発行したものであり、かつサーバーの公開鍵も変更がない正当なものだと判断します。そして証明書に含まれるドメイン名の検証も行われます。

DNSスプーフィングによって偽物のIPのサーバに誘導された場合、接続したサーバーが提示する証明書のドメイン名が実際にアクセスしたドメイン名と一致しないのでブラウザは警告を表示します。これでなりすましを防止できます。

3)次にサーバの公開鍵を使用して、セッションキー(共通鍵)を暗号化してサーバに送信。

4)サーバ側では秘密鍵で共通鍵を復号化し、ブラウザと同じ共通鍵を持つとこでセッションが確立する。

以降のデータ通信の暗号化は共通鍵暗号で行われます。

特にHTTPSでは改ざん防止のためにAEAD(Authenticated Encryption with Associated Data)というアルゴリズムが使用されデータの認証と暗号化が同時に行われています。

この様に、HTTPSでは次の3つの組み合わせによって成り立っています。

  • 暗号化によるデータの盗聴や改ざんの防止
  • デジタル署名によるなりすましの防止
  • デジタル証明書によるサーバーの公開鍵の妥当性の確認

共通鍵暗号方式とは

共通鍵暗号方式とは暗号化と復号化に同じ鍵を用いる方法です。共通鍵は公開されるものではなく、送受信側の双方で共有されます。公開鍵暗号方式に比べて高速である反面、同じ鍵で暗号化と復号化ができてしまうため、公開せずに対象の相手にだけどうやって配布するするのかという問題があります。その問題を解決するために共通鍵の交換には公開鍵暗号方式が用いられます。

HTTPSでは最初に公開鍵暗号化方式で共通鍵を共有した後はより速い共通鍵での暗号化・復号化のデータ通信が行われるというハイブリッドな方法が採用されています。

まとめ

今回の記事ではインターネットの安全な通信に不可欠なPublic Key Infrastructureの仕組みについて理解を深めていきました。まずは秘密鍵と公開鍵の公開鍵暗号方式がありましたね。これで盗聴と改ざんは防げました。次に、デジタル証明書によってなりすましも防ぐことができましたね。デジタル証明書はサーバからのリクエストに応じて認証局が証明書を発行する流れでした。そして、ブラウザ側で証明書の検証を行い、共通鍵をサーバと交換してセッションを確立していました。ブラウザのURL欄の横に鍵マークを見たらHTTPSが使われていてPKI技術が使われていることを思い出してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次