担当:斎藤
目次
- PGPとは
- 他の秘密通信方式との違い
- 鍵の管理
- まとめ
PGPとは
PGP (Pretty Good Privacy, 「たいへんよいプライバシー」)は,Philip Zimmermann が開発した暗号ソフトウェア.
主な用途は,ファイルやメールの暗号化です.
また,署名やその検証も行えます.
一方,SSL/TLSやSSHと異なり,通信の暗号化はしません.
公開鍵暗号を使用しますが,その鍵の管理のために,認証局を設置せず,各利用者の責任で鍵を管理し,取得した公開鍵をチェックします.
そして,ハイブリッド暗号で暗号化されます.
メッセージまたはファイルは,セッション鍵と呼ばれる乱数の値を鍵として,対称暗号により暗号化され,そのセッション鍵は,受信者の公開鍵で暗号化されます.
PGPの別実装として,GnuPG (GNU Privacy Guard)があります.
こちらはGPL (GNU General Public License)に基づき無料で利用できます.
ターミナル(シェル)では,gpgというコマンドに,オプションをつけて実行.
他の秘密通信方式との違い
SSLなどとの違い:
SSL/TLS (Secure Sockets Layer / Transport Layer Security) や,SSH (Secure Shell) のポート転送を用いて,メールサーバとの通信を暗号化することができます.
しかしそれでは,送信後のメールの配送や,サーバで保管されるメールについては,暗号化されません.
Bcc (Blind Carbon Copy)は,メールのヘッダに宛先が表示されませんが,これも配送は暗号化されませんし,サーバで保管された状態のメールは,暗号化されていません.
これらに対して,PGPは,必ずしも安全でない通信経路やサーバを介しても,メッセージの秘密を守るための仕組みを提供しています.
暗号化ZIPとの違い:
パスワードつきのZIPファイル(暗号化ZIP)は,そのファイルごとにパスワードが設定されます.
しかし,何らかの理由でパスワードを変更したいと思っても,送付したあとには,できませんし,いくつも作るとなると,そのパスワードの管理が面倒です.
PGPの暗号化では,鍵(セッション鍵)が,受信者の公開鍵で暗号化されています.
したがってその安全性は,受信者の鍵の管理に依存します.
受信者の持つ秘密鍵は,パスフレーズを入力しないと使用できませんが,そのパスフレーズはあとで変更できます.
なお,暗号化ZIPでは,一つのファイルに対して,パスワードを知っている複数の人が復号できますが,PGPにおいても,複数の利用者が(それぞれの秘密鍵で)ファイルを復号できるような,単一のファイルを作ることは可能です.
S/MIMEとの違い:
S/MIME (Secure/Multipurpose Internet Mail Extensions) は,メールの暗号化や署名についての規格ですが,そのデータフォーマットは,PGPと異なります.
S/MIME では,鍵や証明書を発行したりその正当性を保証したりするため,認証局を必要する.
秘密通信方式 | 暗号化 |
---|---|
SSL/TLS | ポート転送 |
暗号化ZIP | fileごとにpwを設定 |
S/MIME |
送信側はあらかじめ、受信側の公開鍵を受け取っておきます.
その上で、本文の暗号化にかかるわけですが、通常の文章のままで暗号化をすると効果が薄いので、メールを圧縮します.
圧縮は、gzipやcompressなど可逆のものならなんでも構いません.
ついで、セッション鍵とよばれる、一時的に利用する鍵を生成します.
この生成したセッション鍵で、圧縮後のメールを暗号化すると同時に、セッション鍵自体を受信側の公開鍵を使って暗号化します.
この結果、暗号化した本文と暗号化したセッション鍵が作成され、これを両方とも受信側に送ります.
受信側はこれを受け取った後、まず自分の秘密鍵を使ってセッション鍵を復号化します.
そして、復号化したセッション鍵を使用して、本文の復号化も行ないます.
最後に圧縮を展開すれば、本文が元通りに読めるというわけです.
鍵の管理
PGPの鍵は,公開鍵暗号系や,PKI (Public-Key Infrastructure, 公開鍵基盤) での考え方と,同じところもあれば,異なっているところもあります.
PGPを使うにあたっての原則は,次の5つです.
- 暗号化には,受信者の公開鍵を使用.
- 復号には,受信者の秘密鍵を使用.
- 署名には,送信者の秘密鍵を使用.
- 検証には,送信者の公開鍵を使用.
- 秘密鍵を使用するとき,パスフレーズを入力.
鍵情報は,16進8桁(32ビット)であらわされる,「鍵ID」を指定するのが一般的です.
私の鍵IDは,0x3BDCC722です.
これが,“【ユーザー】”という「ユーザーID」に結びつけられています.
しかし,PGPでは,私以外の人が,私と同じユーザーIDの鍵ペア(公開鍵と秘密鍵のペア)を作ることができてしまいます.
ソフトウェアに手を加えれば,鍵IDも同じにすることができます.
そのようにして作られる可能性のある,偽造鍵と,正しい鍵とを区別するため,公開鍵の利用者はあらかじめ,公開鍵の正当性を確認しておきます.
通常は,fingerprint (「フィンガープリント」「指紋」「ハッシュ値」とも呼ばれます)を使います.
受け取った公開鍵からfingerprintを求め,それが,鍵の所有者が提示するfingerprintと一致していれば,正当な鍵とみなします.(fingerprintまで一致するような,鍵の偽造は,現実的にできません.もし万一そのようなことがあれば,むしろ,秘密鍵の漏洩を疑うべきです.)
公開鍵を正当なものと確認したら,その鍵に,自分の秘密鍵で署名をすることで,以後,安全に利用できるようになります.
またその公開鍵に信頼度を設定することもできます.このように鍵の正当性を確認するとともに,信頼度を設定し,その情報をやりとりするしくみは,web of trust (「信頼の輪」または「信頼の網」)と呼ばれます.
なお,生成した鍵ペアを含め,所有し管理する鍵の集合をkeyring (「鍵束」または「鍵輪」)といいます.
Linuxなどでは,~/.gnupgに保存されます.複数の計算機に,共通の(もちろん同じ鍵IDの)鍵ペアを持たせることも可能です.
運用のためのアドバイスを,以下に記します.
- 自分の秘密鍵のパスフレーズを,忘れないようにしましょう.
- 自分の秘密鍵のパスフレーズを,漏らさないようにしましょう.
- 暗号化して送りたいとき,公開鍵の正当性確認をきちんとしましょう.
まとめ
- 鍵を利用し暗号化することでデータのセキュリティを担保する
- 証明書を利用しなりすましや改ざんを排除する
参考書籍
結城浩(2015)『暗号技術入門 第3版 秘密の国のアリス』SB Creative 446pp.
ISBN978-4-7973-8222-8
第13章 PGP(p334-p360)