PGPの利用


PGP

PGPは、暗号を利用して、電子メールやコンピュータ上のファイルのプライバシーを 保護するプログラムです。大まかな機能は、 があります。

公開鍵暗号

公開鍵暗号とは、公開鍵と秘密鍵の 2 つを用意し、一方の鍵(公開鍵)で暗号化された メッセージは、他方の鍵(秘密鍵)で復号化できるというものです。

電子署名

電子署名を利用すると、ファイルまたはメッセージが改変されたかどうかが 分かるので、完全性が保証されます。また、メッセージに署名した人物の名前を 数学的に確認することができ、相手の認証ができます。
実際には、MD5関数を使用して、メッセージから128ビットの数を生成し、その数を 秘密鍵で暗号化し、元のメッセージに付与します。
電子署名されたメッセージを受け取った人は、署名した人の公開鍵で要約関数を 復号し、その数と受け取ったメッセージのMD5コードを比較し、一致していれば そのメッセージは改変されていないことが分かります。

PGPのインストール

今回は 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
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を作成した後、PGPがきちんと動作するかどうか確認します。 現在、srcディレクトリにいるとして、以下のように実行します。
% 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 を行います。質問が 2 つ あるので、波線のように答えます。
% ./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の検証は終了です。

鍵の生成

PGPの使用方法は、-h オプションを指定して pgp を起動することにより表示できます。 新しい鍵の作成は -kg オプションを指定して pgp を実行します。
% 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から選ぶか,もしくはビット数を指定してください:
公開鍵の長さを指定します。鍵は長い程、安全性が高まりますが、処理速度は 遅くなります。セキュリティを考慮するなら、1024bit 以上を指定します。
512ビットのRSAキーを生成します... 
あなたの公開キーのためにユーザIDが必要です.
形式はユーザIDはあなたの名前,それに< >で括ったあなたの電子メールの
アドレスです.もし電子メールのアドレスを持っているのなら,このようになります
例: Hironobu SUZUKI 
公開キーのためのユーザIDを入力して下さい:
ユーザIDを入力します。ここで入力したユーザIDは、公開鍵が表示される時にいつも コメントとして一緒に表示されます。普通は名前と電子メールアドレスを使用します。 メールソフトに Mew を使用している場合は必ず電子メールアドレスを入力します。 例えば、以下のように入力します。
Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp >
あなたのRSA秘密キーを守るために暗証フレーズが必要です.
暗証フレーズには,複数の単語,空白,記号もしくは表示できる文字から
構成されるフレーズや文章が使えます.
暗証フレーズを入力してください:
再度同じ暗証フレーズを入力してください: 
秘密鍵のパスフレーズを入力します。秘密鍵は、セキュリティを考慮して、使用する とき以外は暗号化されているので、それを復号化するためにパスフレーズを使用 します。パスフレーズは、どんなに長い文字列でもよく、キーボードから入力できる 全ての英数字・記号・スペースが使用できます。
 24 バイトの乱数が必要です.キーを押す時間間隔を計測して利用します.
ビープ音が成るまでランダムにキーボードに文字を打ち込んでください:
乱数を作成するため、カーソルの左の数字が 0 になるまでキーボードのキーを 適当に同じキーは避けて入力します。
   0 **
-これで十分です.御協力ありがとうございました.
キーの生成には時間がかかります..**** .**** 
正しい暗証フレーズです.少々おまちください....
署名の保証が加えられました.
キーの生成が終了しました.
これで、~/.pgp ディレクトリに、
secring.pgp   秘密鍵の鍵束
pubring.pgp   公開鍵の鍵束
randseed.bin  乱数ファイル
というファイルが作成されます。以上で鍵の作成は終了です。

鍵の管理

暗号化されたファイルを受け取るには、送信者に、あなたの公開鍵を配布しなければ なりません。生成した公開鍵を鍵束から取り出すには、以下のようにします。
% 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入力:
ユーザIDを入力します。ここで入力するユーザIDは、部分入力でかまいません。 PGP が、文字列に一致するユーザIDを自動的に検索してくれます。 スペースを含んだユーザIDを入力する場合には、引用符(")で囲みます。
取り出した上記のキーをどのファイルに入れますか? , ユーザID "sakai".

ユーザID "Nobuyuki Sakai < sakai@oak.eg.t.kanazawa-u.ac.jp >" のキーです.
512-bit キー, キー ID ED06D425, 作成日時 2000/01/18

上記のキーをどのファイルに取り出しますか?  pubkey
鍵を出力するファイル名を指定します。ここでは pubkey としました。
移動用装甲ファイル: pubkey.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 -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

新しいキーを検索中...
--- 途中省略 ---
PGP が keyfile を検索し、ファイルに含まれる公開鍵を表示します。
新しいキーは完全に保証はされていません.
これらのキーをあなた自身で保証を行いますか (y/N)? y
公開鍵が確かに本人のものであると保証できる場合は、y を押して、秘密鍵で公開鍵に 署名します。

鍵束に登録した公開鍵を参照するには、以下のようにします。PGPが鍵束に 含まれる公開鍵を検索します。
% pgp -kv
公開鍵を削除するには、以下のようにします。
% 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入力:
削除したい公開鍵のユーザIDを入力します。一部分でかまいません。
本当にこのキーを削除してよろしいのですね (y/N)? y

キーリングからキーは削除されました.
全ての鍵を削除するには、~/.pgp ディレクトリにある鍵束ごと削除します。 secring.pgp , secring.bak , pubring.pgp , pubring.bak を削除します。

暗号と復号

ファイルを暗号化するには、ファイルを受信する人の公開鍵が、自分の鍵束に登録 されている必要があります。ファイルを暗号化するには、以下のようにします。
% 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を入れてください:
受信者の公開鍵のユーザIDを入力します。暗号化されたファイルは、 拡張子 asc (filename.asc)として保存されます。

ファイルの復号化するには、暗号化に使用された公開鍵とペアの秘密鍵が、自分の 鍵束に必要です。ファイルの復号化は、以下のようにして行います。
% 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の秘密キーを解くために暗証フレーズが必要です.
暗証フレーズを入力してください:
秘密鍵のパスフレーズを入力します。復号に成功すれば、同じディレクトリに 拡張子を取った名前で出力されます。

署名と検証

テキストファイルにクリア署名(暗号化せずに誰でも読める形で署名します)を つけるには、以下のようにします。
% 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

暗証フレーズを入力してください:
秘密鍵のパスフレーズを入力します。クリア署名をしたテキストファイルは 拡張子 asc というファイル名で保存されます。

ファイル(バイナリ・テキスト)に署名を付けるには、以下のようにします。
% pgp -s filename
クリア署名と違って、-t(textモード出力) オプションを指定しません。 署名の付いたファイルは、拡張子 asc というファイル名で保存されます。
また、ファイルに署名を付けて暗号化するには、以下のようにします。
% pgp -se filename
アスキー形式で出力するには、以下のようにします。
% pgp -seat filename
署名の付いたファイルを検証するには、以下のようにします。
% pgp pgpfile
署名の検証には、署名に使用された秘密鍵とペアの公開鍵が、自分の鍵束に登録 されている必要があります。秘密鍵と対応する公開鍵が見付かれば、検証は自動的に 処理されます。

Mew + PGP

代表的なメールソフトである 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" と表示されます。

戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Thu Jan 20 12:31:10 JST 2000