公開鍵基盤の復習

4 min read読了の目安(約4000字

以前に書いた「公開鍵暗号の秘密鍵は絶対に渡してはならない」の続きみたいな話。現在,暗号関連の環境を整理している最中で,復習の意味も込めて記事を書いてみる。

なおこの記事は,かつての OpenPKSD.org (Internet Archive) で公開されていた「OpenPGP と PKI」という日本語ドキュメントをベースにしている。興味のある方は当時の記事を漁ってみるといいだろう。

共通鍵暗号と公開鍵暗号

まずは前回のおさらいから。

共通鍵暗号の特徴は以下の通り。

  1. 暗号化・復号の処理速度が速い
  2. 平文と暗号文とでデータサイズがほぼ同じ
  3. 暗号文をやり取りするもの同士で鍵を共有する必要があり,かつ第三者に知られてはならない

そして公開鍵暗号の特徴は以下の通り。

  1. 暗号化・復号の処理速度が共通鍵暗号に比べて遅い
  2. 平文に対して暗号文のサイズが巨大になる傾向がある
  3. 利用者は公開鍵のみ共有すればよく,また公開鍵は第三者に知られても構わない

この最後の項目が公開鍵暗号の最大のメリットである。データをやり取りする相手と「秘密」を共有しないということは,攻撃側から見て攻略ポイントが減ることを意味する。たとえば,リモートサービスの認証で(パスワード認証ではなく)公開鍵暗号を使った暗号ソフトウェアや暗号デバイスを使うことが推奨されているのも,このメリットゆえである[1]

https://text.baldanders.info/remark/2020/09/authenticator-and-aal/

その公開鍵は誰のもの?

同じ公開鍵暗号でも Diffie–Hellman 鍵交換等を使って暗号化セッションを張るだけなら「その公開鍵は誰のもの?」か気にする必要はないし,なんなら毎回使い捨ての鍵ペア[2] を作成しても構わない(近年トレンドの暗号化通信は大抵これのバリエーション)。

しかしデータの暗号化や電子署名を行うのであれば永続的[3] な鍵ペアを作って運用する必要があるし,他者に公開する公開鍵が「誰のもの?」か証明する必要がある。何故なら公開鍵は誰でも作れるのだから。

この「その公開鍵は誰のもの?」を証明(certificate)する仕組みが「公開鍵基盤(Public Key Infrastructure; PKI)」である。

公開鍵基盤

ようやくタイトルに追いついたよ(笑)

公開鍵基盤の3つの機能

公開鍵基盤として要求される機能は主に3つある。

  1. 鍵オーナー[4] を登録し,公開鍵証明書を発行する
  2. 検証のために公開鍵証明書を保管する
  3. 公開鍵が失効した場合には公開鍵証明書を破棄する

言い方を変えると,この機能を満たしているシステムまたはサービスであれば公開鍵基盤の要件を満たしていると言える。

以降で代表的な公開鍵基盤である X.509 と OpenPGP を簡単に紹介する。

X.509 公開鍵基盤

X.509 は元々 OSI の X.500 ディレクトリシステムを前提としたオンライン認証全般についての規格だったが,もっと柔軟な運用を行うために改訂が行われ今に至っている。 Web サービスの HTTPS 暗号プロトコルなど多くのシーンで使われる公開鍵基盤が X.509 で「PKI = X.509」という認識の人も多いだろう。

X.509 は認証局(Certificate Authority; CA)と呼ばれる発行機関が証明書の発行から破棄までを請け負っている。さらに認証局は階層構造になっていて認証局同士が相互認証することによりツリー型の連鎖を形成している。このことから X.509 は hierarchical PKI と呼ばれることもある。

公開鍵基盤としての OpenPGP

OpenPGP は暗号ソフトウェア PGP を源流とした暗号技術の規格(RFC 4880)だが,先に挙げた公開鍵基盤の3つの機能を満たしている。

OpenPGP には認証局のような権威的な機関はないが,利用者同士が直接的に相互認証することで成り立っている[5]。 OpenPGP のこの仕組みは「信用の輪(web of trust)」と呼ばれる。利用者を中心とした peer-to-peer な関係が網の目のように連鎖していくわけだ。

X.509 と OpenPGP

X.509 と OpenPGP を比較すると以下のようになるだろう。

特徴 X.509 OpenPGP
PKI の形態 hierarchical PKI web of trust
公開鍵の認証者 専門機関(CA) 利用者
信頼点 ルート CA 利用者自身(面識)
認証の連鎖構造 ツリー型 ユーザ中心型
認証者を認証する根拠 利用者による選択 利用者自身
証明書の破棄の管理 あり 不完全
コスト 高い 低い

証明書の破棄について補足しておくと, OpenPGP では証明書の破棄は鍵オーナーが行って破棄済みの公開鍵を配布するという形態をとる。このとき破棄済みの公開鍵を受け取れなかった利用者は,破棄前の公開鍵を使って暗号化や署名の検証をし続けることになる。だから「不完全」というわけ[6]

コストに関しては異論があるかもしれない。小規模のチームなら ad hoc な運用ができる OpenPGP は確かに低コストだと思うが,規模の大きい組織や不特定多数を相手にする場合は OpenPGP では管理しきず,無理にしようとすれば煩雑化がコストとして跳ね返ってくるだろう。

X.509 においては,認証局に権限と責任を集中させる代わりにトップダウンでの運用がしやすいのがメリットである。一方 OpenPGP は,顔見知りの比較的小規模なチームで運用するのに向いていると思う。

というわけで,道具は特徴をよく理解して適切に使いましょう。

参考ページ

https://text.baldanders.info/openpgp/web-of-trust/

https://text.baldanders.info/remark/2020/07/requirement-for-encryption/

参考文献

https://www.amazon.co.jp/dp/B015643CPE
脚注
  1. この記事では電子署名も公開鍵暗号の一種としてひと絡げに語っているが悪しからず。 ↩︎

  2. 公開鍵暗号で作成する秘密鍵と公開鍵のセットを「鍵ペア(key pair)」と呼ぶことがある。 ↩︎

  3. ここで言う「永続的」とは,単一のセッションやドメインを超えて運用されること。過去に署名・暗号化されたデータを将来にわたって利用するのであれば,署名・暗号化に使った暗号鍵も同様に保持されなければならない。 ↩︎

  4. 鍵の利用者のうち対象となる鍵ペアを作成した人を便宜上「鍵オーナー」と呼ぶ。鍵オーナーは秘密鍵を持っている人,とも言える。 ↩︎

  5. 日本ではあまり聞かないが,海外ではオフ会のタイミングなどで “key signing party” などと呼ばれるイベントが行われる。名刺代わりに公開鍵の鍵指紋を交換していくらしい。 ↩︎

  6. 証明書の破棄を含む公開鍵の配布状況を改善するために考えられたのが PGP/OpenPGP 鍵サーバで長年の運用実績もあるが,近年は鍵サーバ上の公開鍵に対して「署名爆弾」とも言える攻撃が観測されるなどあり,公開鍵の配布についてはいまだに議論がある。また OpenPGP 実装のひとつである GnuPG は LDAP との連携を強化し始めた。 ↩︎