PGPは、暗号を利用して、電子メールやコンピュータ上のファイルのプライバシーを 保護するプログラムです。大まかな機能は、があります。
- 電子メールの暗号化
- 電子署名
公開鍵暗号
公開鍵暗号とは、公開鍵と秘密鍵の 2 つを用意し、一方の鍵(公開鍵)で暗号化された メッセージは、他方の鍵(秘密鍵)で復号化できるというものです。
- 公開鍵
通信相手の公開鍵でメッセージを暗号化すると、その通信相手のみしか復号化できない メッセージを作成できます。同様に、相手が自分の公開鍵を用いてメッセージを 暗号化すると、自分だけしかそのメッセージを復号化できません。- 秘密鍵
秘密鍵を使用すると、自分の公開鍵で暗号化されたメッセージを復号化できます。 この鍵は秘密にしておかなければなりません。電子署名
電子署名を利用すると、ファイルまたはメッセージが改変されたかどうかが 分かるので、完全性が保証されます。また、メッセージに署名した人物の名前を 数学的に確認することができ、相手の認証ができます。
実際には、MD5関数を使用して、メッセージから128ビットの数を生成し、その数を 秘密鍵で暗号化し、元のメッセージに付与します。
電子署名されたメッセージを受け取った人は、署名した人の公開鍵で要約関数を 復号し、その数と受け取ったメッセージのMD5コードを比較し、一致していれば そのメッセージは改変されていないことが分かります。
今回は PGP2.63(s) を UNIX システムにインストールします。
以下のURL
ftp://ftp.oita-u.ac.jp/.m1/pub/misc/pgp/
より、pgp263is.tar.gz ソースファイル fileio.c.patch-2.6.3i Mewを利用する場合に必要 pgp263i-japanese.zip メッセージを日本語化するを入手します。ソースファイルを適当なディレクトリで解凍・展開し、 ディレクトリを移動します。% tar xvfz pgp263is.tar.gz readme.1st 国際版PGPのためのReadmeファイル readme.usa 米国内のユーザ向けReadmeファイル setup.doc インストール方法の解説 pgp263ii.tar PGP本体 pgp263ii.asc PGP263ii.tarの署名ファイル次に、pgp263ii.tar を展開します。% tar xvf pgp263ii.tar以下のようなディレクトリやファイルが展開されます。contrib/ 便利なコントリビューションプログラム doc/ マニュアル src/ PGPのソース config.txt 設定ファイル de.hlp ドイツ語のヘルプ en.hlp 英語のヘルプ es.hlp スペイン語のヘルプ fr.hlp フランス語のヘルプ keys.asc 公開鍵の入ったファイル language.txt PGPプログラムの表示するメッセージのための言語ファイル。英語、ドイツ語、スペイン語、フランス語用 pgp.hlp コマンド解説コンパイルするために src ディレクトリに移動します。% cd srcここで、パッチ fileio.c.patch-2.6.3i をあてます。このパッチは、日本語を含む メッセージのクリア署名がうまくできないバグを修正するためのものです。% patch -p0 < fileio.c.patch-2.6.3i次に、crpto.c を編集します。編集結果を以下に示します。% diff crypto.c crypto.c.org 246c246 < sprintf(tdatebuf,"%s %02d:%02d JST", cdate(tstamp), hours, minutes); --- > sprintf(tdatebuf,"%s %02d:%02d GMT", cdate(tstamp), hours, minutes);編集後、PGP を make します。引数を指定せずに、単に make と入力すると、 以下のように、PGP がサポートしている全てのアーキテクチャが表示されます。% make To build PGP on your flavour of Unix, type: make < system > where < system > can be: 386bsd, 3b1, 3b1_asm, aix370, aix386, amix-68k-gcc, apollo, apollo-gcc, atari,aux(*), aux-gcc, bsd, bsdgcc, convexos, dgux, djgpp, encore, freebsd, hpux-68k(*), hpux-68k-ansi, hpux-68k-gcc, hpux-pa(*), hpux-pa-ansi, hpux-pa-gcc, hpux9-pa-ansi, irix, irix_asm, isc, isc_asm, linux, linux-68k, machten, mach_386, mips-ultrix, netbsd, netbsd_68k, newsasm, newsgcc, next, next-intel, next486, nextHP, os2, osf, qnx4, riscos501, rs6000, rt_aos4, sco-2.0, sco-3.0, sco-3.0-gcc, sco386cc, sgigcc, sgigcc_asm, sinix, solx86gcc, sun386i, sun3asm, sun3cc(*), sun3gcc, sun4cc(*), sun4gcc, sun4sunos5gcc, sun4acc, sun4sunos5acc, sunspc, sysv, sysvgcc, sysv_386, sysv_386_gcc, unixware, vax-ultrix, vax_bsd43, xenix286(*), xenix386 For targets marked with (*) you must first get unproto. See setup.doc for further details.使っているマシンのアーキテクチャに合わせて、引数を指定します。 以下に例を示します。コマンド アーキテクチャ % make freebsd FreeBSD % make linux Linux % make sun4gcc SunOS4.x % make sun4sunos5gcc Solaris2.xエラーが出ずにコンパイルが成功したら、以下のようにしてPGPをインストールします。# cp pgp /usr/local/bin/ # cd ../doc/ # cp pgp.1 /usr/local/man/man1/ # mkdir /usr/local/lib/pgp/ # cp pgpdoc1.txt pgpdoc2.txt /usr/local/lib/pgp/以上で PGP のインストールは終了です。
まず、以下のようにしてホームディレクトリにインストール用のディレクトリを 作成します。% mkdir ~/.pgp % chmod 700 ~/.pgp次に、インストール時に展開した、以下のファイルとディレクトリを ~/.pgp にコピーします。contrib/ doc/ config.txt de.hlp en.hlp es.hlp fr.hlp keys.asc language.txt pgp.hlpまた、日本語メッセージファイルを以下のようにして ~/.pgp に展開します。% cd ~/.pgp % mv language.txt language.txt.org % unzip pgp263i-japanese.zipこれにより、以下のファイルが作成されます。README README.ja README._SJIS.ja ja.hlp language.txt次に、環境設定ファイル(config.txt)を編集します。編集結果を以下に示します。% diff config.txt config.txt.org 34c34 < Language = ja --- > Language = en 63c63 < CharSet = noconv --- > # CharSet = cp850 82,84c82,84 < Armor = on # Use -a flag for ASCII armor whenever applicable < TextMode = on # Attempt to use -t option where applicable < ClearSig = off # Use ASCII armor even for unencrypted signed messages --- > # Armor = on # Use -a flag for ASCII armor whenever applicable > # TextMode = on # Attempt to use -t option where applicable > # ClearSig = off # Use ASCII armor even for unencrypted signed messages 91c91 < EncryptToSelf = on # Encrypt all messages with your own public key --- > # EncryptToSelf = on # Encrypt all messages with your own public key 116c116 < TZFix = 9 --- > # TZFix = 0また、環境変数 PGPPATH を設定します。~/.cshrc ファイルに以下の行を追加します。setenv PGPPATH $HOME/.pgp以上で、環境設定は終了です。動作確認をしてみます。pgpを引数無しで実行すると、 以下のように日本語メッセージが表示されます。以上で、PGPの環境設定は終了です。% pgp Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/18 15:18 JST ライセンスや配付条件に関しの詳しい内容はPGP User's Guideを参照してください. 他の暗号製品やカスタマイズ開発に関しては次にお問い合わせ下さい: Philip Zimmermann, 3021 11th St, Boulder CO 80304 USA, phone +1 303 541-0140 日本語訳 すずきひろのぶ (Hironobu SUZUKI). 簡略な説明を見るには次のようにタイプします: pgp -h
PGPを作成した後、PGPがきちんと動作するかどうか確認します。 現在、srcディレクトリにいるとして、以下のように実行します。今、作成したキーホルダーを使用して、作成した PGP を行います。質問が 2 つ あるので、波線のように答えます。% cd .. % ./src/pgp -ka keys.asc distkeys.pgp Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/18 16:26 JST 新しいキーを検索中... pub 1024/8DE722D9 1992/07/22 Branko Lankester < lankeste@fwi.uva.nl > --- 途中省略 --- 署名を検査しています... pub 1024/8DE722D9 1992/07/22 Branko Lankester < lankeste@fwi.uva.nl > --- 途中省略 --- キーファイルの内容: 20 個の新しいキー 新しいキーは完全に保証はされていません. これらのキーをあなた自身で保証を行いますか (y/N)? n以上のように出力されれば、PGPの検証は終了です。% ./src/pgp pgp263ii.asc Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/18 18:02 JST ファイルに署名があります. 署名検査に公開キーが必要です. キーID CCEF447D はファイル '/home/sakai/.pgp/pubring.pgp' の中にありません. 公開キーのファイル名: distkeys.pgp ^^^^^^^^^^^^ ファイル 'pgp263ii.$00' は署名を含んでいます.しかしテキストがありません. 次の署名に使うためのテキストのファイル名を入力してください: pgp263ii.tar ^^^^^^^^^^^^ ユーザ"Stale Schumacher < stale@hypnotech.com >"からの正しい署名です. 署名は 1996/01/18 17:09 JST を作りました. 1024-bit キー, キーID CCEF447D が用いられました. 警告: この公開キーは信用できる署名によって保証されてないので "Stale Schumacher < stale@hypnotech.com >"の公開キーは 高い機密性を持っているかどうかはわかりません. 署名とテキストが分離されます. 出力ファイルは作成しません.
PGPの使用方法は、-h オプションを指定して pgp を起動することにより表示できます。 新しい鍵の作成は -kg オプションを指定して pgp を実行します。公開鍵の長さを指定します。鍵は長い程、安全性が高まりますが、処理速度は 遅くなります。セキュリティを考慮するなら、1024bit 以上を指定します。% pgp -kg Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/18 18:31 JST あなたのRSAキーのサイズはどれにしますか: 1) 512 ビット - 一般利用向け, 処理は速いが安全度は低い 2) 768 ビット - 極秘書類向け, ほどほどの処理速度で安全度も十分 3) 1024 ビット - 最高機密向け, 処理速度は非常に遅いが安全度は極めて高い 1, 2, 3から選ぶか,もしくはビット数を指定してください:ユーザIDを入力します。ここで入力したユーザIDは、公開鍵が表示される時にいつも コメントとして一緒に表示されます。普通は名前と電子メールアドレスを使用します。 メールソフトに Mew を使用している場合は必ず電子メールアドレスを入力します。 例えば、以下のように入力します。512ビットのRSAキーを生成します... あなたの公開キーのためにユーザIDが必要です. 形式はユーザIDはあなたの名前,それに< >で括ったあなたの電子メールの アドレスです.もし電子メールのアドレスを持っているのなら,このようになります 例: Hironobu SUZUKI公開キーのためのユーザIDを入力して下さい: Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp >秘密鍵のパスフレーズを入力します。秘密鍵は、セキュリティを考慮して、使用する とき以外は暗号化されているので、それを復号化するためにパスフレーズを使用 します。パスフレーズは、どんなに長い文字列でもよく、キーボードから入力できる 全ての英数字・記号・スペースが使用できます。あなたのRSA秘密キーを守るために暗証フレーズが必要です. 暗証フレーズには,複数の単語,空白,記号もしくは表示できる文字から 構成されるフレーズや文章が使えます. 暗証フレーズを入力してください: 再度同じ暗証フレーズを入力してください:乱数を作成するため、カーソルの左の数字が 0 になるまでキーボードのキーを 適当に同じキーは避けて入力します。24 バイトの乱数が必要です.キーを押す時間間隔を計測して利用します. ビープ音が成るまでランダムにキーボードに文字を打ち込んでください:これで、~/.pgp ディレクトリに、0 ** -これで十分です.御協力ありがとうございました. キーの生成には時間がかかります..**** .**** 正しい暗証フレーズです.少々おまちください.... 署名の保証が加えられました. キーの生成が終了しました.secring.pgp 秘密鍵の鍵束 pubring.pgp 公開鍵の鍵束 randseed.bin 乱数ファイルというファイルが作成されます。以上で鍵の作成は終了です。
暗号化されたファイルを受け取るには、送信者に、あなたの公開鍵を配布しなければ なりません。生成した公開鍵を鍵束から取り出すには、以下のようにします。ユーザIDを入力します。ここで入力するユーザIDは、部分入力でかまいません。 PGP が、文字列に一致するユーザIDを自動的に検索してくれます。 スペースを含んだユーザIDを入力する場合には、引用符(")で囲みます。% pgp -kx Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/19 12:43 JST 展開するためのキーを選択するためにユーザIDが必要です. キーのユーザID入力:鍵を出力するファイル名を指定します。ここでは pubkey としました。取り出した上記のキーをどのファイルに入れますか? , ユーザID "sakai". ユーザID "Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp >" のキーです. 512-bit キー, キー ID ED06D425, 作成日時 2000/01/18 上記のキーをどのファイルに取り出しますか? pubkeypubkey.asc の内容は、移動用装甲ファイル: pubkey.asc 取り出したキーをファイル 'pubkey.asc' に入れました.となります。これは私の公開鍵です。Type Bits/KeyID Date User ID pub 512/ED06D425 2000/01/18 Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp > -----BEGIN PGP PUBLIC KEY BLOCK----- Version: 2.6.3i mQBNAziEx8UAAAECAOqg0GIRfykpcfoAtzJzy2dxihssj98gNq2SHXRngXh6M/UI FwlolgEHjFwZAC42J25X46ghM+ZZng+KNO0G1CUABRG0NE5vYnV5dWtpIFNha2Fp IDxzYWthaUBmdW5haDAyLmVnLnQua2FuYXphd2EtdS5hYy5qcD6JAFUDBRA4hMfF ng+KNO0G1CUBAWaVAf4xPOS/ry0m7phrvnpyaEMHlpZTbMoPRutAtClNXiwjk/Gn kfvlUz0Abfu+iM8ibhhlq8tbYhgRn7/mJ6HwLcDH =VE4n -----END PGP PUBLIC KEY BLOCK-----
ファイルを暗号化するには、ファイルをやり取りしたい人物の公開鍵が鍵束に登録 されている必要があります。受け取った公開鍵を鍵束に登録するには、 以下のように実行します。PGP が keyfile を検索し、ファイルに含まれる公開鍵を表示します。% pgp -ka keyfile Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/19 13:03 JST 新しいキーを検索中... --- 途中省略 ---公開鍵が確かに本人のものであると保証できる場合は、y を押して、秘密鍵で公開鍵に 署名します。新しいキーは完全に保証はされていません. これらのキーをあなた自身で保証を行いますか (y/N)? y
鍵束に登録した公開鍵を参照するには、以下のようにします。PGPが鍵束に 含まれる公開鍵を検索します。公開鍵を削除するには、以下のようにします。% pgp -kv削除したい公開鍵のユーザIDを入力します。一部分でかまいません。% pgp -kr Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/19 16:42 JST 削除するためのキーを選択するためにユーザIDが必要です. キーのユーザID入力:全ての鍵を削除するには、~/.pgp ディレクトリにある鍵束ごと削除します。 secring.pgp , secring.bak , pubring.pgp , pubring.bak を削除します。本当にこのキーを削除してよろしいのですね (y/N)? y キーリングからキーは削除されました.
ファイルを暗号化するには、ファイルを受信する人の公開鍵が、自分の鍵束に登録 されている必要があります。ファイルを暗号化するには、以下のようにします。受信者の公開鍵のユーザIDを入力します。暗号化されたファイルは、 拡張子 asc (filename.asc)として保存されます。% pgp -e filename Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/19 17:27 JST 受取人の公開キーが暗号化に使用されます. 受取人の公開キーを選択するためのユーザIDが必要です. 受取人のユーザIDを入れてください:
ファイルの復号化するには、暗号化に使用された公開鍵とペアの秘密鍵が、自分の 鍵束に必要です。ファイルの復号化は、以下のようにして行います。秘密鍵のパスフレーズを入力します。復号に成功すれば、同じディレクトリに 拡張子を取った名前で出力されます。% pgp pgpfile Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/19 17:45 JST ファイルは暗号化されています.読むには秘密キーが必要です. ユーザID "Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp >" のキーです. 512-bit キー, キー ID 3661EFE1, 作成日時 2000/01/14 RSAの秘密キーを解くために暗証フレーズが必要です. 暗証フレーズを入力してください:
テキストファイルにクリア署名(暗号化せずに誰でも読める形で署名します)を つけるには、以下のようにします。秘密鍵のパスフレーズを入力します。クリア署名をしたテキストファイルは 拡張子 asc というファイル名で保存されます。% pgp -sta textfile Pretty Good Privacy(tm) 2.6.3i - みんなの公開キー暗号. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 国際化版 - 非アメリカ合衆国向け. RSAREFは使用していません. 現在時刻: 2000/01/19 18:53 JST 署名を作るために秘密キーが必要です. 秘密キーを選ぶためのユーザIDが指定されませんでした. デフォルトのユーザIDで,かつ秘密キーリングに加えられた最新のキーを使います. RSAの秘密キーを解くために暗証フレーズが必要です. ユーザID "Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp >" のキーです. 512-bit キー, キー ID 0181E44D, 作成日時 2000/01/19 暗証フレーズを入力してください:
ファイル(バイナリ・テキスト)に署名を付けるには、以下のようにします。クリア署名と違って、-t(textモード出力) オプションを指定しません。 署名の付いたファイルは、拡張子 asc というファイル名で保存されます。% pgp -s filename
また、ファイルに署名を付けて暗号化するには、以下のようにします。アスキー形式で出力するには、以下のようにします。% pgp -se filename署名の付いたファイルを検証するには、以下のようにします。% pgp -seat filename署名の検証には、署名に使用された秘密鍵とペアの公開鍵が、自分の鍵束に登録 されている必要があります。秘密鍵と対応する公開鍵が見付かれば、検証は自動的に 処理されます。% pgp pgpfile
代表的なメールソフトである Mew は PGP に対応しており、暗号化されたメールの 送受信が可能です。Mew で PGP を使う場合には、ユーザIDに電子メールアドレスが 含まれている必要があります。Mewについては、 ここを御覧ください。
まず始めに通常通りにメールを書きます。書き終わったらカーソルを文の一番下に 持って行き、"C-c e" と押します。そうすると、メールが暗号化されるので、 そのまま "C-c C-c" で送信できます。この時、To: 行に書いたアドレスに対する 公開鍵を持っている必要があります。他にも、以下のようなことができます。C-c e メールを暗号化 C-c C-b 電子署名してメールを暗号化 C-c C-s 電子署名受信したメールを読む場合には、自分の公開鍵で暗号化されている必要があります。 メールを読む時に、自分の秘密鍵のパスフレーズを入力すれば、メールを読むことが できます。途中でメールがカイザンされていると、X-mew: ヘッダにその旨が表示 されます。正しいと、"X-mew: PGP decrypted" と表示されます。