電子メールは本当に安全か?あなたのメッセージを意図した受取人が読むであろうことは十分に想像できますが、第三者がそのメールを盗み見たり改ざんする可能性も考えられます。
従来の"カタツムリメール"では、手紙は封筒に封印され、郵便局を経由して受取人に配達されます。しかし、インターネットを使用したメールの送信は安全性が低く、電子メールは平文としてサーバからサーバへ転送されます。他人の詮索や悪意のある行為から通信内容を保護する特別な処置は何も取られていません。
ユーザのプライバシーを保護するために、Red Hat Linux 6.2 には、GnuPG (GNU Privacy Guard) が用意されており、通常の Red Hat Linux インストール時にデフォルトでインストールされます。
GnuPG は安全な通信のためのツールで、広く使用されている暗号アプリケーションの PGP (Pretty Good Privacy) の暗号技術の代わりとなるフリーのツールです。GnuPG を使用すれば、データと通信を暗号化し、電子署名によって通信が本物であることを証明できます。GnuPG は、PGP 5.x の復号化と検証も実行できます。
GnuPG は他の暗号規格と互換性があるので、これで暗号化した通信は、Windows や MacOS などの他のプラットフォームの電子メールアプリケーションと互換性があるはずです。
GnuPG は、公開鍵暗号法を使用して、データの安全な交換を実現しています。公開鍵暗号法では、2 つの鍵、つまり、公開鍵と秘密鍵を作成します。公開鍵を通信相手またはキーサーバと交換します。秘密鍵は絶対に公開してはいけません。
暗号は鍵の使用によって実現するものです (これはデータ形式における秘密のエンコーダ/デコーダリングと考えてください)。従来の、すなわち対称的な暗号では、トランザクションの両端が同じ鍵を持ち、その鍵を使用して互いの伝送データを解読します。公開鍵暗号法では、公開鍵と秘密鍵の 2 つの鍵が同時に存在します。個人または組織は秘密鍵を公開せず、公開鍵を発行します。公開鍵によって暗号化されたデータは、秘密鍵を使用することでしか復号化されません。秘密鍵によって暗号化されたデータは、公開鍵によってしか復号化されません。
シェルプロンプトから情報を検索: Red Hat Linux のほとんどのシステムツールと同じように、GPG に関する情報は、man ページと info ページにあります。シェルプロンプトで、[man gpg] または [info gpg] と入力すると、GPG コマンドとオプションのクイックリファレンスが表示されます。
暗号法のほとんどの部分はこのセクションで扱う範囲を超えており、暗号法に付いて多くの書籍が出版されています。しかし、この章では、暗号を使った通信を開始できるだけの説明を GnuPG について行います。GnuPG に関するオンラインユーザーズガイドなどの詳しい情報は、http://www.gnupg.org/ にアクセスしてください。GPG、PGP、暗号技術についてもっと詳しく知りたい場合は、the section called より詳しい情報の入手先 のリファレンスを参照してください。
GnuPG のグラフィカルなインタフェースには、SeaHorse などがあり、Red Hat Linux 7.0 に含まれています。しかし、GnuPG における多くの作業は、シェルプロンプトからすばやく実行できます。この章では、このことを中心に説明します。
GnuPG を使用するには、最初に新しいキーペア -- 公開鍵と秘密鍵を生成しなければなりません。
キーペアの生成に関する指示は先に説明しましたが (the section called 新規の鍵の組の生成 in Chapter 12)、ここでは必要な手順を簡単に説明します。
キーペアを生成するために、Xterm (ターミナル) ウィンドウを開き、プロンプトに対して以下を入力します。
gpg --gen-key
生成するキーの種類や長さなど、数多くのオプションが表示されます。デフォルトのオプションも利用できます。その場合は単純に [Enter] キーを押します。別のオプションを選ぶ理由がなければ、デフォルト値を選択するだけで十分です。
ユーザ ID、名前、電子メールアドレス、任意のコメントを入力します。次に、パスフレーズを入力します。パスフレーズは、アカウントパスワードと同じようにユニークで安全なものにし、簡単に推測されないようにします。プロンプトで入力するパスフレーズは、1 つの単語でもフレーズでもよく、本人がキーペアの所有者であることを証明するためのものです。当然のことですが、覚えられるものにしてください。
欠点: 公開鍵暗号法は強力ですが、完全ではありません。この技術の欠点の一つとして、パスフレーズまたはパスワードの脆弱性があります。パスフレーズに誕生日や重要な人のアドレスを設定することはよくありません。文字と数字を組み合わせた独自のものにしてください。パスフレーズを決めるときは、ログインパスワードと同様に細心の注意を払ってください。
作成した公開鍵と秘密鍵は、.gnupg ディレクトリ内に格納されます。鍵を参照するには、[gpg --list-keys] と入力します。新しい鍵が次のように表示されます。
[newuser@localhost newuser]$ gpg --list-keys /home/newuser/.gnupg/pubring.gpg ----------------------------------------- pub 1024D/B7085C8A 2000-04-18[ユーザ名] <you@yourisp.net>sub 1024g/E12AF9C4 2000-04-18
キーペアを生成したら、公開キーに対して失効証明を生成する必要があります。パスフレーズを忘れたり、パスフレーズが漏洩した場合は、対の公開鍵を使用すべきでないことを通知するために、この証明を発行します。
生成したばかりの鍵を「失効」させる理由: 失効証明を生成するといっても、生成したばかりの鍵を失効させるわけではありません。その代わり、公開した鍵の使用を取り消す安全な方法を確立します。鍵を生成した後で、パスフレーズを忘れたり、ISP (アドレス) が変わったり、ハードディスクがクラッシュしたとします。このとき、失効証明が、公開鍵を無効にする便利な方法になります。
あなたの署名は、公開鍵が失効するまでは通信内容を読む相手にとって有効となり、逆にあなたは鍵が失効する前に受け取ったメッセージを復号化することができます。失効証明を生成するには、--gen-revoke オプションを使用します。
[newuser@localhost newuser]$gpg --output revoke.asc --gen-revoke<you@yourisp.net>
--output revoke.asc オプションを省略すると、失効証明が「標準出力」であるモニタ画面に表示されることに注意してください。Pico などのテキストエディタを使って、出力の内容をコピーして任意のファイルに貼り付けることができますが、出力をログインディレクトリ内のファイルに送る方が簡単です。こうすると、失効証明をあとで簡単に利用したり、フロッピーに移して安全な場所に保管できます。
失効証明を生成する手順は、以下のようになります。
[newuser@localhost newuser]$gpg --output revoke.asc --gen-revoke<you@yourisp.net> sec 1024D/823D25A9 2000-04-26[ユーザ名] <you@yourisp.net> Create a revocation certificate for this key?y You need a passphrase to unlock the secret key for user:"[ユーザ名] <you@yourisp.net>" 1024-bit DSA key, ID 823D25A9, created 2000-04-26 ASCII armored output forced.Revocation certificate created.
失効証明が生成されると (revoke.asc)、ログインディレクトリに格納されます。ファイルの安全性を確保するために、フロッピーにコピーして安全な場所に保管します。(Red Hat Linux でファイルをディスケットにコピーする方法がわからない場合は、the section called フロッピーディスクの使用 in Chapter 17を参照してください。)
公開鍵暗号法を使用するには、相手が公開鍵のコピーを持っている必要があります。通信相手やキーサーバに鍵を送信するには、鍵をエクスポートしなければなりません。
以下のように入力して鍵をエクスポートすれば、鍵を Web ページで表示したり、電子メールに貼り付けることができます。
[newuser@localhost newuser]$gpg --armor --export<you@yourisp.net> > mykey.asc[newuser@localhost newuser]$
公開鍵がエクスポートされるだけではなく、mykey.asc などのファイルに出力がリダイレクトされるため、画面では何も見えません。(> mykey.asc を省略すると、鍵は標準出力のモニタ画面に表示されます。)
これで、ファイル mykey.asc を電子メールに挿入したり、キーサーバにエクスポートできます。鍵を表示するには、[less mykey.asc] と入力して、ページャでファイルを開きます (ページャを閉じるには、[Q] を入力します)。以下のようになります。
-----BEGIN PGP PUBLIC KEY BLOCK----- Version:GnuPG v1.0.1 (GNU/Linux) Comment:For info see http://www.gnupg.org mQGiBDkHP3URBACkWGsYh43pkXU9wj/X1G67K8/DSrl85r7dNtHNfLL/ewil10k2 q8saWJn26QZPsDVqdUJMOdHfJ6kQTAt9NzQbgcVrxLYNfgeBsvkHF/POtnYcZRgL tZ6syBBWs8JB4xt5V09iJSGAMPUQE8Jpdn2aRXPApdoDw179LM8Rq6r+gwCg5ZZa pGNlkgFu24WM5wC1zg4QTbMD/3MJCSxfL99Ek5HXcB3yhj+o0LmIrGAVBgoWdrRd BIGjQQFhV1NSwC8YhN/4nGHWpaTxgEtnb4CI1wI/G3DK9olYMyRJinkGJ6XYfP3b cCQmqATDF5ugIAmdditnw7deXqn/eavaMxRXJM/RQSgJJyVpbAO2OqKe6L6Inb5H kjcZA/9obTm499dDMRQ/CNR92fA5pr0zriy/ziLUow+cqI59nt+bEb9nY1mfmUN6 SW0jCH+pIQH5lerV+EookyOyq3ocUdjeRYF/d2jl9xmeSyL2H3tDvnuE6vgqFU/N sdvby4B2Iku7S/h06W6GPQAe+pzdyX9vS+Pnf8osu7W3j60WprQkUGF1bCBHYWxs YWdoZXIgPHBhdWxnYWxsQHJlZGhhdC5jb20+iFYEExECABYFAjkHP3UECwoEAwMV AwIDFgIBAheAAAoJEJECmvGCPSWpMjQAoNF2zvRgdR/8or9pBhu95zeSnkb7AKCm /uXVS0a5KoN7J61/1vEwx11poLkBDQQ5Bz+MEAQA8ztcWRJjW8cHCgLaE402jyqQ 37gDT/n4VS66nU+YItzDFScVmgMuFRzhibLblfO9TpZzxEbSF3T6p9hLLnHCQ1bD HRsKfh0eJYMMqB3+HyUpNeqCMEEd9AnWD9P4rQtO7Pes38sV0lX0OSvsTyMG9wEB vSNZk+Rl+phA55r1s8cAAwUEAJjqazvk0bgFrw1OGO9m7fEeDlvPSV6HSA0fvz4w c7ckfpuxg/URQNf3TJA00Acprk8Gg8J2CtebAyR/sP5IsrK5l1luGdk+l0M85FpT /cen2OdJtToAF/6fGnIkeCeP1O5aWTbDgdAUHBRykpdWU3GJ7NS6923fVg5khQWg uwrAiEYEGBECAAYFAjkHP4wACgkQkQKa8YI9JamliwCfXox/HjlorMKnQRJkeBcZ iLyPH1QAoI33Ft/0HBqLtqdtP4vWYQRbibjW =BMEc -----END PGP PUBLIC KEY BLOCK-----
通信相手が少数であれば、公開鍵をエクスポートした後で個別に送信すると良いでしょう。しかし、通信相手が大勢の場合は、公開鍵の配布に時間がかかります。その場合に、キーサーバを利用します。
キーサーバとはインターネット上の保管所であり、ここで公開鍵を保管したり、要求する人に対して公開鍵を配布したりすることができます。多くのキーサーバが利用できますが、そのほとんどは互いに同期を取るようにしているので、1 つのキーサーバに公開鍵を送るのは、すべてのキーサーバに配布するようなものです。その場合、通信相手がすべきことは、キーサーバに対して公開鍵を要求し、取得した鍵をキーリングにインポートすることです。これで準備完了です (キーリングとは、公開鍵と秘密鍵を保管するファイルです)。
どのキーサーバを使用しますか?: ほとんどのキーサーバは互いに同期を取るようにしているので、1 つのキーサーバに送るのは、すべてのキーサーバに送るようなものです。しかし、別のキーサーバを検索することができます。キーサーバと関連情報を検索する場所として、Keyserver.Net(http://www.keyserver.net)、や Robert's Crypto &; PGP Links: Keyservers(http://crypto.yashy.com/www/Keyservers/) があります。
シェルプロンプトとブラウザのどちらを使用しても公開鍵を送ることができます (Figure 13-1) が、キーサーバを利用して鍵を送受信するには、オンラインになっている必要があります。
シェルプロンプトで以下のように入力します。
gpg --keyserver search.keyserver.net --send-keyyou@yourisp.net
ブラウザから Keyserver.Net (http://www.keyserver.net) へアクセスし、PGP 公開鍵を追加するオプションを選択します。
次に、公開鍵を Web ページの適切な場所にコピーして貼り付けます。以下にその方法を示します。
エクスポートした公開鍵ファイル (たとえば、the section called 公開鍵のエクスポート で作成した mykey.asc) を、ページャを使って [less mykey.asc] などとして開きます。
マウスを使って、BEGIN PGP から END PGP までのすべての行を強調表示させてファイルをコピーします (Figure 13-2を参照してください)。
ファイル mykey.asc の内容を、Keyserver.Net のページの適切な場所に、マウスの中央ボタンをクリックして貼り付けます (2 つボタンのマウスの場合は、両方のボタンを同時に押します)。キーサーバページから [Submit] ボタンを選択します。(間違えた場合は、[Reset] ボタンを押して、貼り付けた鍵を削除します。)
別の Web ベースのキーサーバに公開鍵を登録する場合は、基本的に手順が上記と同じであることに注意してください。
これでおしまいです。鍵が正しく登録されたことを知らせるメッセージが、シェルプロンプトの場合は Xterm ウィンドウに、Web の場合はキーサーバの Web ページに表示されます。これで、安全な通信を希望する通信相手は、キーサーバに登録された公開鍵をインポートして、キーリングに追加できるようになりました。
通信相手の公開鍵をキーリングにインポートすることは、エクスポートと同じくらい簡単です。通信相手の公開鍵をインポートすれば、キーリングに含まれる相手の公開鍵を使用することによって、メールを復号化したり電子署名を確認したりすることができます。
一番簡単なインポートは、Web サイトから鍵をダウンロードして保存することです (たとえば、the section called 鍵のインポート in Chapter 12 で説明する、Red Hat の鍵を保存する場合)。
鍵をダウンロードしてから、--import コマンドでキーリングに追加します。
鍵を保存する別の方法として、ブラウザの[名前を付けて保存] 機能があります。Navigator などのブラウザを使用していて、かつ鍵をキーサーバに置いている場合は、そのページをテキストファイルとして保存できます ([ファイル] - [名前を付けて選択]</+guimenuitem>)。[保存した文書の書式] の隣のドロップダウンボックスから、[テキスト] を選択します。次に、保存したファイルの名前を覚えている場合は、そのファイルをインポートすることができます。たとえば、鍵を newkey.txt というテキストファイルとして保存した直後であるとします。その場合、ファイルをインポートするには、以下をシェルプロンプトに入力します。
[newuser@localhost newuser]$ gpg --importnewkey.txt gpg:key F78FFE84:public key imported gpg:Total number processed:1 gpg:imported: 1 [newuser@localhost newuser]$
インポートが成功したかどうかをチェックするには、プロンプトで --list-keys コマンドを [gpg --list-keys] のように入力します。新たにインポートされた鍵がキーリングに表示されます。
デジタル署名はサインや捺印と同じで、電子メールなどの文書に使用されます。
署名を改ざんできる可能性があった従来の通信文とは異なり、デジタル署名は偽造できません。デジタル署名は一意の秘密鍵によって作成されるので、通信の受取人は相手の公開鍵を使ってその署名を検証できます。
デジタル署名は、文書にタイムスタンプを添付します。つまり、文書に署名した時刻は署名の一部になります。このため、だれかが文書を文書を修正しようとすると、署名の検証が失敗することになります。Exmh や KDE の KMail などの一部の電子メールアプリケーションでは、アプリケーションのインタフェースから GnuPG を使って文書に署名する機能が利用できます。
デジタル署名の便利なタイプは、clearsigned 文書と detached signaturesです。両方のタイプとも認証の安全性は同程度であり、受信者はメッセージ全体を復号化する必要はありません。
clearsigned メッセージでは、署名は文面にテキストブロックとして表示され、detached signature は別のファイルとして文面といっしょに送信されます (つまり、メッセージから分離されています)。
暗号技術については、ここで GPG について説明したことよりはるかに多くの事柄があります。より詳しく知るためには、以下を参照してください。
Websites:
GnuPG: http://www.gnupg.org には、最新の GPG リリース、総合的なユーザーズガイド、その他の暗号情報のリンクがあります。
Webmonkey の Encryption Tutorial:http://hotwired.lycos.com/webmonkey/backend/security/tutorials/tutorial1.html には、暗号に関する情報とその応用に関する情報があります。
The Electronic Frontier Foundation, "Privacy, Security, Crypto, &; Surveillance" Archive:http://www.eff.org/pub/Privacy.
書籍:
『The Official PGP User's Guide』、Philip R. Zimmermann; MIT Press, 1995
『PGP: Pretty Good Privacy』、Simson Garfinkel; O'Reilly &; Associates, 1994
E-Mail Security:How to Keep Your Electronic Messages Private, Bruce Schneier; John Wiley &; Sons, 1995