PGP
読み:ピージーピー
外語:PGP: Pretty Good Privacy

 文書ファイル電子メールなどで、暗号化や電子署名などを実現するためのソフトウェアの一つ。
目次

概要
 PGPは、フィリップ・ジマーマン(Philip R. Zimmermann)個人により作られたソフトウェアであった。
 現在は、OpenPGP Message Formatという仕様がRFC 4880RFC 5581で公開され、そしてOpen PGP Allianceなどの団体が作られている。

使い方
 各ソフトウェアの使い方については、その説明に譲るが、基本的な用法は、次の通りである。

前準備
 前準備は次の通り。
 以上で準備完了

できること
 PGPでできることは、次の通りである。
 公開鍵暗号方式の前提は、次の通り。詳細は後述する。
 誰の秘密鍵や公開鍵を使うかによって、暗号化するか署名するかを使い分けることが可能。
 基本的には、次の通りである。詳細は後述する。

暗号化
 ある特定の人宛に文書を送りたい場合、それが第三者に見られてはならない。
 この場合PGPでは、次のようにする。
 公開鍵は広く公開され、誰でも入手できる。あらかじめ送信相手に受け取っておいてもらい、自分宛に送る場合に使ってもらうことになる。
 公開鍵暗号方式の特徴として、「公開鍵で暗号化したものは、秘密鍵でしか複号できない」というものがあり、秘密鍵は自分自身しか持っていないため、こうして暗号化してもらった暗号化文書は、自分自身にしか複号できないのである。

署名
 署名とは、つまりサインである。紙なら自筆であったり捺印だったりする。
 元の文書はそのまま見えて良い(むしろ見える必要がある)ため、暗号化する必要はない。本当にその本人が書いた文書なのかどうかが分かれば、それで良い。
 この場合PGPでは、次のようにする。
 公開鍵は広く公開され、誰でも入手できる。あらかじめ受信相手に受け取っておいてもらい、認証する場合に使ってもらうことになる。
 公開鍵暗号方式の特徴として、「秘密鍵で暗号化したものは、公開鍵でしか複号できない」というものがある。公開鍵は皆が入手できるので、暗号化という意味では全く意味を成さないが、「その公開鍵で複号できる」という事実が、確かに当人の秘密鍵で暗号化されたという証拠になるわけである。
 文書をPGPで署名すると、次のようになる。
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA512
 
 (本文)
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.10 (MingW32)
 
 (ハッシュ)
 -----END PGP SIGNATURE-----
 Hash:欄に書かれた内容で、実際のPGP SIGNATUREがどのハッシュアルゴリズムなのかを表わしている。
 Version:欄はオプション。無くてもよい。UNIX用とWindows用で仕様が異なることがあったため、問題の切り分けに利用できる可能性がある。

技術

手法
 PGPは、公開鍵暗号方式慣用暗号方式を併用し、安全性と高速性を両立させている。
 メッセージは、慣用暗号方式で暗号化する。メッセージ暗号化に使う「鍵」は、都度乱数として生成する。鍵長は暗号化アルゴリズムに依存する。この鍵をセッション鍵と呼ぶ。
 次に、セッション鍵を暗号化する。アルゴリズムは公開鍵暗号方式であり、その鍵は受信者の公開鍵である。結果を先の暗号化メッセージに追加することで、暗号化は完成する。
 なお電子メールはASCII文字しか扱えないので、作られた結果はradix-64変換によってASCII文字に符号化して送る。これは3バイトのバイナリデータを4文字のASCII文字にする単純な処理で、これ自体は暗号ではない。
 メール受信者は、まず自分の秘密鍵でセッション鍵を取り出し、メッセージを復号する。これで、暗号化されたメッセージを相手に安全に送信することに成功したことになる。

特徴
 メールは、ある一つを相手に一回、送るだけである。何度も相手とやり取りするような手間を取ることは、メールというシステムとしては事実上不可能である。このため、例えばIPsecTLSなどのように、セッション鍵交換プロトコルを使って鍵交換をすることは出来ない。
 そこでPGPでは、一回限りの送信で全てを終える。セッション鍵は乱数とし、使い捨てにすることとした。この鍵は小さいので、処理は遅いが強力な暗号である公開鍵暗号方式で暗号化し、メッセージ自体は高速な慣用暗号方式で暗号化する。
 この方式は、公開鍵暗号方式が安全である限り安全である。但しメッセージ暗号化に用いた慣用暗号方式も充分に安全でなければ安全が維持されない。

指紋
 セッション鍵の暗号化に公開鍵暗号方式を使うため、事前に公開鍵を互いに交換せねばならない。
 いかなる方法で渡しても支障はないが、途中で万一改善されると都合が悪いため、その確認の方法が必要である。そこで、公開鍵のハッシュを作り、これを指紋として公開する。
 公開鍵の本人の提示する指紋と、入手した公開鍵の指紋を確認し、一致していれば途中の改竄等がない公開鍵であると判断できる。

アルゴリズム
 よく使われているアルゴリズムに、次のようなものがある。

アプリケーション規格
 かつては、手動でメッセージをPGPで暗号化し、手動でradix-64変換してメール本文に書いたり添付ファイルとしたりしていた。
 現在は、PGP/MIMEという仕様がRFC 2015にて標準化されており、インターネットでよく使われている。

歴史

初期
 Zimmermannによると、1991(平成3)年6月6日に、PGPの最初のバージョンを知り合いのAllan Hoeltjeに渡し、これが政治組織のネットワークPeacenetに投稿されたとされる。Zimmermannは反核運動に携わっていた政治活動家であり、彼の属した政治組織に対する政府の弾圧が、PGP開発のモチベーションだったとされている。
 更にZimmermannは、PGPを知り合いのKelly Goenに渡し、彼はUsenetのニューズグループにこれを投稿した。かくして、PGPの完成品とソースコードは、Zimmermannの知らぬ間にインターネットで世界中に流出したのである。

敵は米政府
 当時の米国では、暗号技術は核技術並の機密事項であり、輸出は厳しく規制されていた。当然、FBIはZimmermannに目を付ける事になり、米国の暗号輸出規制への違反容疑で司法当局に召喚された。
 そこでZimmermannは、「PGP 5.0のソースコードを書籍にして出版」するという対抗措置を取った。全12巻、6000ページ以上というこの書籍の出版は米国憲法により認められた「権利」であり、何人もこれを侵すことはできない。これにより、FBIなどの捜査当局は暗号輸出を食い止める事が出来無くなってしまったのである。結果としてZimmermannは不起訴となり、PGP暗号輸出に関する結論は曖昧になってしまった。
 こうして「合法的に」輸出されたPGP 5.0のソースコードは欧州でOCRにて読み取られ、初の合法的インターナショナル版PGP 5.0iが誕生した。

インターナショナル用
 但し、暗号のソフトウェアが米国のネットワークから海外へ送られることは違法である、という米政府の見解から、PGPは長く米国内で開発が進められた米国版と、その他の国で開発が進められたインターナショナル版が別々に用意されていた。
 しかし1999(平成11)年9月16日に米政府は暗号ソフトウェアの輸出規則を緩和することを発表し、12月13日に輸出規制は解除された。このためPGP 6.5.1iがインターナショナル版PGPの最終バージョンとなり、その後は両者は統一された。

再検索