□1分でわかるPGP
この色だけを読めば,1分です.詳しくは,ページ全体,また末尾のリンクをご覧ください.
PGPとは
PGP (Pretty Good Privacy, 「たいへんよいプライバシー」)は,Philip Zimmermannが開発した暗号ソフトウェアです.
主な用途は,ファイルやメールの暗号化です.また,署名やその検証も行えます.一方,SSL/TLSやSSHと異なり,通信の暗号化はしません.
公開鍵暗号を使用しますが,その鍵の管理のために,認証局を設置せず,各利用者の責任で鍵を管理し,取得した公開鍵をチェックします.そして,ハイブリッド暗号で暗号化されます.メッセージまたはファイルは,セッション鍵と呼ばれる乱数の値を鍵として,対称暗号により暗号化され,そのセッション鍵は,受信者の公開鍵で暗号化されます.
PGPの別実装として,GnuPG (GNU Privacy Guard)があります.こちらはGPL (GNU General Public License)に基づき無料で利用できます.ターミナル(シェル)では,gpgというコマンドに,オプションをつけて実行します.
他の秘密通信方式との違い
1. SSLなどとの違い: SSL/TLS (Secure Sockets Layer / Transport Layer Security)や,SSH (Secure Shell)のポート転送を用いて,メールサーバとの通信を暗号化することができます.しかしそれでは,送信後のメールの配送や,サーバで保管されるメールについては,暗号化されません.
Bcc (Blind Carbon Copy)は,メールのヘッダに宛先が表示されませんが,これも配送は暗号化されませんし,サーバで保管された状態のメールは,暗号化されていません.
これらに対して,PGPは,必ずしも安全でない通信経路やサーバを介しても,メッセージの秘密を守るための仕組みを提供しています.
2. 暗号化ZIPとの違い: パスワードつきのZIPファイル(暗号化ZIP)は,そのファイルごとにパスワードが設定されます.しかし,何らかの理由でパスワードを変更したいと思っても,送付したあとには,できませんし,いくつも作るとなると,そのパスワードの管理が面倒です.
PGPの暗号化では,鍵(セッション鍵)が,受信者の公開鍵で暗号化されています.したがってその安全性は,受信者の鍵の管理に依存します.受信者の持つ秘密鍵は,パスフレーズを入力しないと使用できませんが,そのパスフレーズはあとで変更できます.
なお,暗号化ZIPでは,一つのファイルに対して,パスワードを知っている複数の人が復号できますが,PGPにおいても,複数の利用者が(それぞれの秘密鍵で)ファイルを復号できるような,単一のファイルを作ることは可能です.
3. S/MIMEとの違い: S/MIME (Secure / Multipurpose Internet Mail Extensions)は,メールの暗号化や署名についての規格ですが,そのデータフォーマットは,PGPと異なります.S/MIMEでは,鍵や証明書を発行したりその正当性を保証したりするため,認証局を必要とします.
鍵の管理
PGPの鍵は,公開鍵暗号系や,PKI (Public-Key Infrastructure, 公開鍵基盤)での考え方と,同じところもあれば,異なっているところもあります.
PGPを使うにあたっての原則は,次の5つです.
- 暗号化には,受信者の公開鍵を使用します.
- 復号には,受信者の秘密鍵を使用します.
- 署名には,送信者の秘密鍵を使用します.
- 検証には,送信者の公開鍵を使用します.
- 秘密鍵を使用するとき,パスフレーズを入力します.
鍵情報は,16進8桁(32ビット)であらわされる,「鍵ID」を指定するのが一般的です.私の鍵IDは,06D7B1D3です.これが,"Takehiko Murakawa <takehiko@sys.wakayama-u.ac.jp>"という「ユーザーID」に結びつけられています.
しかし,PGPでは,私以外の人が,私と同じユーザーIDの鍵ペア(公開鍵と秘密鍵のペア)を作ることができてしまいます.ソフトウェアに手を加えれば,鍵IDも同じにすることができます.
そのようにして作られる可能性のある,偽造鍵と,正しい鍵とを区別するため,公開鍵の利用者はあらかじめ,公開鍵の正当性を確認しておきます.通常は,fingerprint (「フィンガープリント」「指紋」「ハッシュ値」とも呼ばれます)を使います.受け取った公開鍵からfingerprintを求め,それが,鍵の所有者が提示するfingerprintと一致していれば,正当な鍵とみなします.(fingerprintまで一致するような,鍵の偽造は,現実的にできません.もし万一そのようなことがあれば,むしろ,秘密鍵の漏洩を疑うべきです.)
私の鍵のfingerprintは,連絡先で公開しています.ただし,ブラウザで受信し画面に表示されるまでのあいだで,ひょっとしたら,書き換わっている可能性もありますので,インターネット経由の情報を過信しないようにしましょう.
公開鍵を正当なものと確認したら,その鍵に,自分の秘密鍵で署名をすることで,以後,安全に利用できるようになります.またその公開鍵に信頼度を設定することもできます.このように鍵の正当性を確認するとともに,信頼度を設定し,その情報をやりとりするしくみは,web of trust (「信頼の輪」または「信頼の網」)と呼ばれます.
公開鍵は,公開鍵サーバ(または「鍵サーバ」)を介してやりとりができます.例えば,鍵IDや,ユーザーIDの一部を指定すれば,検索をしてくれる公開鍵サーバもあります.また自分の鍵IDを指定して送れば,ほどなく,公開鍵が登録されることでしょう.なお,公開鍵サーバは,公開鍵のやりとりの利便性を図るものであって,鍵そのものの正当性は保証してくれません.
ここまでご覧になって,「よし自分も使ってみよう」と思った方へ.どんなOSで使いたいでしょうか? Windowsで,管理者権限を持っていれば,Thunderbird + Enigmail + GnuPGの組み合わせをおすすめします.LinuxやMac OS Xでは,gpgコマンドを使って鍵を作ったり管理したりし,コマンド実行が面倒なら,GUIアプリケーションを活用しましょう.
なお,生成した鍵ペアを含め,所有し管理する鍵の集合をkeyring (「鍵束」または「鍵輪」)といいます.Linuxなどでは,~/.gnupgに保存されます.複数の計算機に,共通の(もちろん同じ鍵IDの)鍵ペアを持たせることも可能です.
運用のためのアドバイスを,以下に記します.- 自分の秘密鍵のパスフレーズを,忘れないようにしましょう.
- 自分の秘密鍵のパスフレーズを,漏らさないようにしましょう.
- 暗号化して送りたいとき,公開鍵の正当性確認をきちんとしましょう.
gpgコマンド
gpgコマンドのクイックリファレンスです.
■鍵ペア 鍵ペア生成: gpg --gen-key 鍵の破棄(失効)証明書作成: gpg -o Filename_Revoke_Out --gen-revoke Keyname ■鍵の管理 鍵一覧: gpg --list-keys 秘密鍵一覧: gpg --list-secret-keys 鍵をエクスポート(ファイルから鍵束へ): gpg -o Filename_Key_Out --export Keyname 鍵をインポート(鍵束からファイルへ): gpg --import Filename_Key_In 鍵のフィンガープリント: gpg --fingerprint Keyname 鍵に署名: gpg --sign-key Keyname 鍵の設定(信頼度,パスフレーズなど): gpg --edit-key Keyname 鍵を(鍵束から)削除: gpg --delete-key Keyname 鍵を(公開鍵サーバへ)送る: gpg --keyserver Servername --send-keys Keyname 鍵を(公開鍵サーバで)検索: gpg --keyserver Servername --search-keys KeyID 鍵を(公開鍵サーバから)入手: gpg --keyserver Servername --recv-keys KeyID ■暗号化?署名 暗号化: gpg -o Filename_Cipher_Out -r Keyname --encrypt Filename_Plain_In 復号: gpg -o Filename_Plain_Out --decrypt Filename_Cipher_In 署名: gpg -o Filename_Signed_Out --sign Filename_Plain_In 検証: gpg --verify Filename_Signed_In 対称暗号による暗号化: gpg -o Filename_Cipher_Out --symmetric Filename_Plain_In 対称暗号による復号: gpg -o Filename_Plain_Out --decrypt Filename_Cipher_In ◆引数の例 KeyIDの例: 06D7B1D3 Keynameの例: takehiko@sys.wakayama-u.ac.jp Servernameの例: pgp.nic.ad.jp
大文字から始まる引数は,そのまま打ち込むのではなく,ファイル名,鍵ID,メールアドレス(の一部),鍵サーバのホスト名などに置き換えてください.
ファイルを出力するコマンドでは,「-a」または「--armor」というオプションをつけることで,テキストファイルを得ることができます.
リンク
- 書籍
- 『新版暗号技術入門——秘密の国のアリス』: 担当科目(情報セキュリティ)の参考書に指定しています.第13章(pp.317-344)にPGPの解説があります.SSLとの違いに関しては,p.366の内容を参考にしました.
- 他の解説
- ソフトウェア
- 公開鍵サーバ
- 運用事例
- わだいのたけひこのざっき
- 2011年4月8日: Thunderbird + Enigmail + GnuPGの,インストールと鍵生成の手順です.
- 「PGP」の検索結果
更新履歴
- 2017年6月16日
- KeyIDを変更しました.
- 2011年4月17日
- 「鍵の所有者が公開するfingerprintと一致していれば」から「鍵の所有者が提示するfingerprintと一致していれば」に変更しました.例えばfingerprintを名刺に記載し,必ずしも公表しないという方法も考えられるからです.他に細部を修正しました.
- 2011年4月16日
- 鍵の管理の概要図について,画像と,PDFファイルへのリンクを分けました.
- 2011年4月14日
- 鍵の管理の概要図(画像とPDFファイル)を作りました.
- 更新履歴を設置しました.
- 2011年4月12日
- 細部を修正しました.
- 2011年4月11日
- リリースしました.