このエントリーをはてなブックマークに追加このエントリをつぶやく

暗号技術入門13 PGP

担当:斎藤

目次

  • 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つです.

  1. 暗号化には,受信者の公開鍵を使用.
  2. 復号には,受信者の秘密鍵を使用.
  3. 署名には,送信者の秘密鍵を使用.
  4. 検証には,送信者の公開鍵を使用.
  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)

カテゴリー: 勉強会   タグ: ,   この投稿のパーマリンク

コメントは受け付けていません。