Click Here

【特集】

電子メール暗号化ソフト「PGP」を使ってみよう!


 電子メールは、インターネット上に接続された世界中のあらゆるコンピュータを経由して送られるため、途中の経路で第三者によるメールの改竄や盗み見といった被害にあう危険に常にさらされている。また、構造上、他人の名をかたってメールを出すこともできてしまう。パソコン通信のように閉じたネットワークの場合は、それらの行動を監視することも可能だろう。しかし、インターネットはあまりにも巨大なネットワークであるために、それらの犯罪行為を全て監視することは事実上不可能だ。では、これらの犯罪行為から電子メールを守る手段はないのだろうか。
 そこで今回の特集では、米国のPhilip Zimmermann氏が開発した暗号ソフト「PGP(Pretty Good Privacy)」を使い、メールを暗号化して送る方法を紹介する。

●PGPを使うと何ができる?

 電子メールの場合、相手に届くまでの間に、主に次の3つの被害にあう可能性がある。
  1. 内容を第三者に見られる(盗聴)
  2. 第三者による内容の改竄(改竄)
  3. 第三者が他人のふりをしてメールを出す(なりすまし)
 PGPは、「暗号化」と「署名」という機能を提供することにより、これらの被害から電子メールを守ることができる。では、暗号化と署名により、どのようにして電子メールを守ることができるのだろうか。
 「暗号化」は、内容を意味不明な文字列(またはバイナリ)に変換してしまうため、第三者による内容の解読を困難にすることができる。つまり、仮に盗聴されたとしても、暗号を解くための“鍵”を持たない人以外は内容を知ることができないため、内容の漏洩を防ぐことができる。
 「署名」機能は、印鑑やサインを使うのと同じ感覚で「このメールは私が書きました」という証拠をメールに残すことができる。受け手側で本人が書いたものであるかどうかを確認することができるので、“なりすまし”を防ぐことができる。また、PGPは暗号化された文章や署名された文章が改竄されたかどうか検出する機能も持っている。署名を使った例として、JPCERT/CC(コンピュータ緊急対策センター、http://www.jpcert.or.jp/ )が発行している報告書がある。ここで公表されている内容はセキュリティの問題など極めて重要なことが書かれており、改竄を防ぐためにPGPによる署名が施されている。
 以上、PGPの持つ主な機能をざっと紹介してみた。また、PGPではより安全な通信を行なうため、“鍵”の運用方法に「公開鍵暗号方式」という変わった方法を使っている。では、公開鍵暗号方式とは何だろうか?

●公開鍵暗号方式について

 例えば、目の前に宝箱(暗号で保護されているとイメージしてほしい)があって、中には大事な宝石(メールの内容)が入っているとする。普通は、かけられている錠前は一つで、錠前を外すために必要な鍵は一つしかなく、一つの鍵で錠前を開ける(復号・解読)ことも閉める(暗号化)こともできる。遠方の親戚に宝箱に入っている宝石を届けるには、宝箱を閉めるためと開けるためにこの鍵をお互いに共有する必要がある。これを、「共有鍵暗号方式」と言い、一般的な鍵の感覚と同じだ。
 一方、「公開鍵暗号方式」では、一つの錠前に対して「錠前を開けることしかできない鍵」と「錠前を閉めることしかできない鍵」という対になる2つの鍵が存在し、前者を「秘密鍵」、後者を「公開鍵」と呼ぶ。送る方は受け取る側の公開鍵を事前に入手して、その鍵で錠前を閉める。そして受けとった親戚は自分の秘密鍵で錠前を開けることになる。
 共有鍵暗号方式と大きく異なる点は、錠前を開けるための鍵を相手に届ける必要がないということ。共有鍵暗号方式では、万が一鍵が盗まれた場合は誰でも宝箱を開けて宝石を奪うことができるが、公開鍵暗号方式では、たとえ鍵(公開鍵)が盗まれても、それでは宝箱を閉めることしかできないため、宝石を奪うことはできない。このように、公開鍵暗号方式を使うことによって、鍵の盗難による被害を避けることができる。
 また、署名はこれとは逆に秘密鍵で暗号化を行ない、公開鍵で復号する。署名は、メッセージ・ダイジェストと呼ばれる技術を使って、メッセージなどのデータから数学的処理によって固定長のデータを抽出し、送信側の秘密鍵で暗号化した後にメッセージと共に送られる。受信側は、公開鍵を使って暗号化された固定長データを復号することで相手のメッセージであることを確認するとともに、固定長データを比較することによって、改竄されたかどうか検証できる。

 それでは前置きはこのくらいにして、実際にPGPをインストールしてみよう。

●インストールしてみよう

 これから紹介するインストール方法は、基本的なMS-DOSコマンドの使い方やファイルの解凍といった作業ができることを前提に説明している。また、紙面の都合により、PC-AT互換機上のWindows 95で動作するバージョンに限定しているのでご了承いただきたい。MacintoshやNECのPC-98シリーズでのインストールは、後述するWWWサイトを参考にしてほしい。
 PGPは、米国の輸出規制および暗号アルゴリズムの特許の問題より、米国からオリジナル版を入手(ダウンロードも含む)することは違法行為に当たり、私たちの住む日本を含む米国外でPGPを利用するには、アルゴリズムの特許問題をクリアした「国際版」と呼ばれるものを入手する必要があるので注意してほしい。これは、バージョンの末尾に「i」がついていることから判断できる。今回の特集では日本国内にあるダウンロードサイトを紹介するので、問題なく利用できる。
 また、国際版と呼ばれるPGPのバージョンは「5.5.3i」、「5.0i」、「2.6.3i」の3種類あり、5.*のバージョンでは鍵の互換性および日本語への対応に問題がある*1ため、今回の特集では2.6.3iにパッチを当てた「2.6.3ia」のインストール方法を説明する。

  1. 下記ファイルを入手する。
    ■Windows 95/NT用PGP 2.6.3iバイナリ:pgp263i-win32.zip (322KB)
    ftp://ftp.win.ne.jp/pub/pgp/2.x/pc/windows/pgp263i-win32.zip
    ■PGP 2.6.3iaバイナリ:pgp263ia.zip (130KB)
    http://www1.harenet.or.jp/~kane/pgp263ia.zip
    ■日本語ヘルプファイル:pgp263i-japanese.zip (21KB)
    ftp://ftp.win.ne.jp/pub/pgp/2.x/lang/pgp263i-japanese.zip
    ■漢字コード変換フィルタ「nkf」のWin32版:nkf32162.lzh (49KB)
    http://www.vector.co.jp/vpack/browse/software/win95/util/sn037294.html
  2. インストール先のフォルダ(ここでは、仮にc:\pgpとする)を作成する。
  3. 「pgp263i-win32.zip」を、Lhasa( http://www.digitalpad.co.jp/~takechin/download.html )等の解凍ツールで解凍する。すると、「pgp263ii.zip」というファイルができるので、これを解凍し、展開されたすべてのファイルをインストール先のフォルダ(ここでは、c:\pgp)にコピーする。
  4. 「pgp263ia.zip」を解凍する。すると、「pgp.exe」というファイルができるので、このファイルをインストール先のフォルダ(ここでは、c:\pgp)にコピーして上書きする。
  5. 「pgp263i-japanese.zip」を解凍する。
  6. 「nkf32162.lzh」を解凍する。すると、「nkf32.exe」というファイルができるの で、それを「pgp263i-japanese.zip」を展開したフォルダにできる「pgp263i-japanese」というフォルダにコピーする。
  7. DOSプロンプトを起動して「pgp263i-japanese」フォルダに移動した後、以下のコマンドを実行する。
    
    nkf32 -sc language.txt > tmp.txt*2
    
    nkf32 -sc ja.hlp > tmp.hlp
    
    
    そのあと、「tmp.txt」を「language.txt」に名称変更し、上書きする。同様に、「tmp.hlp」を「ja.hlp」に名称変更し、上書きする。
  8. 「language.txt」と「ja.hlp」を、PGPのインストール先のフォルダ(ここでは、c:\pgp)にコピー(language.txtは上書き)する。
  9. Cドライブのルートディレクトリにある「autoexec.bat」をメモ帳などのエディタで編集する。
    以下の3行を、c:\autoexec.batの最後に加える(ここではPGPをインストールするフォルダをc:\pgpとしている)。
    
    SET PGPPATH=C:\PGP
    
    SET PATH=%PGPPATH%;%PATH%
    
    SET TZ=JST-9
    
    
  10. PGPインストール先のフォルダにある「config.txt」をメモ帳などのエディタで 編集する。
    ・11行目の「# MyName = "John Q. Public"」の部分に、自分の名前とメールアドレスを書く。例えば、以下のようになる(先頭の#は外すこと)。
    
    MyName = "Ichigaya Taro <itaro@domainname>"
    
    
    ・34行目の「Language = en」を、以下のように書き換える。
    
    Language = ja
    
    
    ・63行目の「# CharSet = cp850」の部分を、以下のように書き換える(先頭の#は外すこと)。
    
    CharSet = noconv
    
    

 これらの作業が終わったら、コンピュータを再起動する。これでPGPが使えるようになるはずだ。再起動したら、MS-DOSプロンプトを起動して、「pgp -h」と入力してみよう。うまくインストールされていれば、日本語のヘルプメッセージが出るはずだ。もし日本語のヘルプメッセージが出ない場合は、インストールに失敗しているので、手順が間違っていないかどうかもう一度確認してほしい。

 インストールが成功したのを確認できたら、実際にメールを暗号化して送ってみよう。

*1読者の方から、PGPのバージョン「5.5.3i」では、鍵の互換性および日本語クリアテキスト署名問題のいずれも解消されているという指摘がありました。ここにお詫びして訂正させていただきます。

*2読者の方から、「この方法でlanguage.txtをSJISに変換しただけでは一部の文字が化ける」という指摘がありました。動作に支障はありませんが、気になるという方は、この現象に対応したlanguage.txtが公開されていますので、こちらからダウンロードし、解凍してできたlanguage.txtを、そのままPGPのインストール先フォルダに置いて下さい。

●メールを暗号化して送ってみよう

 まず、メールを暗号化して送る前にいくつかの準備が必要になるので、その手順を説明する。また、これからの作業はすべてMS-DOSプロンプト上で行なう。

  1. 自分の秘密鍵と公開鍵を作成する
     MS-DOSプロンプトを起動して、「pgp -kg」と入力すると、最初に鍵のサイズを尋ねてくるので、ここでは「3」を入力する。次に、ユーザーIDの入力画面になるので、ここでは「Ichigaya Taro <itaro@domainname>」というように自分の名前とメールアドレスを入力する。続いて、暗証フレーズの入力画面になるので、英数字を使ったフレーズを入力する。これはパスワードに相当するので、絶対に忘れないようにしよう。
     最後に、鍵の生成に必要な乱数を入力する画面になるので、左端に表示されている数字が0になるまで適当にキーボードを叩く。これで鍵の生成は完了する。
  2. 自分の公開鍵を出力する
     「pgp -kxa」と入力し、ユーザーID入力画面になったら自分の名前の一部分を入力する。続いて、取り出した鍵をどのファイルに入れるか聞いてくるので、ここでは「c:\pgp\pubkey」とする。すると、c:\pgpに「pubkey.asc」というファイルが作成され、これがあなたの公開鍵になる。
     PGPで暗号化したメールを送ってもらいたい場合は、このファイルの中身を自分のホームページで公開するか、事前にメールで送っておいて、相手に知らせる。送信する相手にもここまでの作業をしてもらい、公開鍵を自分のホームページで公開してもらおう。
  3. 送信相手の公開鍵を自分の公開鍵ホルダーに登録する。
     通信相手の公開鍵は、公開鍵ホルダー(pubring.pgp)と呼ばれるファイルに登録する必要がある。まず、送信相手の公開鍵をクリップボード経由でコピーし、適当なテキストファイル(ここでは、仮に「keyfile.txt」とする)にしてパスの通る場所に保存する。続いて、「pgp -ka keyfile.txt」と入力することにより、相手の公開鍵を自分の公開鍵ホルダーに登録することができる。このとき、鍵に対して保証をするかどうかを尋ねてくるが、鍵が確実に本人のものであると保証できる場合は、「Y」を押して公開鍵に署名する。鍵の信用度については、後述のWWWサイトや関連書籍などで各自調べてほしい。

 以上で準備は整ったことになる。ではメールを暗号化して送ってみることにしよう。

 まずメール本文をテキストエディタなどで作成し、保存する。次に、「pgp -ea 保存したファイル名」と入力すると、送信先の公開鍵のユーザーIDを尋ねてくるので、入力する。そうすると、「保存したファイル名.asc」という暗号化されたファイルができるので、この中身をクリップボード経由でコピーし、メールソフトで送信する。これで、暗号化メールの送信は完了する。
 受信側は、受け取ったメールの「-----BEGIN PGP MESSAGE-----」から「-----END PGP MESSAGE-----」までの部分をクリップボードにコピーし、適当なファイル名(ここでは仮に「filename.txt」とする)で保存する。次に、「pgp filename.txt」を実行すると、鍵を作るときに入力した暗証フレーズを入力する画面になるので、暗証フレーズを入力する。すると、拡張子を取り除いた「filename」というファイルが出力され、これが復号したファイルになる。

 メールの暗号化および復号作業については、「Becky!」( http://www.rimarts.co.jp/index-j.html )のようなPGPに対応した電子メールソフトや、PGPフロントエンドシェルの「Goma」( http://www.orangesoft.co.jp/goma.html )を使うことにより、より簡単に行なうことができる。これらのソフト上でのPGPの使用方法については、各ソフトに添付されているヘルプファイルを参照してほしい。

●もっと詳しく知りたい人のために

 以上、駆け足でPGPのインストール方法と暗号メールの送受信方法に絞って説明してきた。PGPはここで紹介した他にも、鍵指紋(key fingerprint)を使った公開鍵の認証や署名の確認など、より安全性を高めるための機能を持っているが、残念ながら紙面の都合でこれ以上の詳細な説明をすることができない。
 そこで、よりPGPについて知りたい人のために、詳細な解説を行なっているサイトをいくつか紹介するので、参考にしてほしい。

■PGP国際版のホームページ(日本語版)
http://ac3.aimcom.co.jp/~macpgp/
PGP国際版ホームページ( http://www.pgpi.com/ )を日本語訳したもの。PGPに関する情報を一通り網羅した総合サイトだ。
■PGPをマルチプラットフォームで使う
http://village.infoweb.ne.jp/~postmail/pgp/index.htm
PC-AT互換機だけでなく、PC-98やMacintosh等様々なプラットフォームでのPGPのインストール方法や、AL-MailやBecky!、Goma等のソフトでPGPを利用する方法などが詳細に解説されている。また、ページのオフライン版も用意されているので、ぜひダウンロードしてじっくり読むことをお勧めする。
■PGP入門
http://lemon.md.tsukuba.ac.jp/sembe/~mokada/Tips/PGP.html
UNIXでの利用をベースにインストール方法や利用方法を解説している。
■Windows95で簡単にPGPするには
http://www.comminet.or.jp/people/junya/pgp/pgpinst.html
Windows 95での利用をベースにインストール方法や利用方法を解説している。また、オフライン版もある。
■AL-MailではじめるPGPっち!
http://www.hk.airnet.ne.jp/~sone_san/almail/pgp_index.html
16ビット版AL-MailでのPGPの利用方法を解説している。

●暗号を使えば本当に安全なのか?

 一般的な電子メールの利用においては、PGPのような暗号ソフトを使って通信する必要はほとんどないと思われる。なぜなら、そこまで秘密を厳守したい内容を送りたいのであれば、インターネットを介してやりとりする必要は必ずしもないからである。しかし、全く必要ないというわけではなく、インターネット上で個人情報がやりとりされる電子商取引などでは、プライバシーを守る手段として大いに利用価値がある。また、署名機能を利用することにより、内容が改竄されたかどうかを検出することができるので、電子メールで公式文書を送るということも可能だ。
 とはいえ、暗号を使ったからといって安心してはいけない。暗号は、「解読されるまでの時間を大量にかせげる」のが最大の利点であり、必ずしも破られないという保証はないのである。実際、近年のコンピューター処理速度の飛躍的向上により、強度の弱い暗号であれば、ある程度の時間と設備投資を行なうことによって解読可能であることが、「RSA DES Challenge」等の暗号解読コンテストによって証明されている。暗号への過度の依存は、暗号を使うよりもより危険であることを忘れてはいけない。ただ、プライバシーを自衛するための方法の一つとして覚えておいて損はないだろう。

('98/4/27)

[Reported by kono@impress.co.jp / Watchers]


INTERNET Watchホームページ

ウォッチ編集部INTERNET Watch担当internet-watch-info@impress.co.jp