GnuPG

| | コメント(0) | トラックバック(2)

GnuPG (GNU Privacy Guard) はPGPにかわる完全かつフリーなソフトウェアです。
Enigmail (Mozillaのプラグイン) を入れるに当たり、少し調べました。

SEE:
Enigmail (このblogより)

今回は、EnigmailのHelpで勧められてた GnuPG (Nullify) を使用しました。
環境は、WindowsXP + GnuPG v1.2.3-nr1 (Nullify) です。

・Nullify
http://www.nullify.org/

インストール

GnuPG (Nullify) のインストーラーを実行します。
「プログラム」のインストール先と「Keyring」のインストール先 (HomeDir) を指定できます。
デフォルトでは、両方とも「c:\GnuPG」です。

公開鍵暗号を使って暗号文をやりとりしたり、署名を検証したりする時に使用する公開鍵や秘密鍵をまとめたものが、keyring (鍵束) です。

私はデフォルトでインストールしてしまいました。
秘密鍵は「Keyring」のフォルダ (HomeDir) に作成されます。

ちなみに私は、自分の秘密鍵が他の人の見えるところにあるのは気分が悪かったので、鍵を作成後、「Keyring」のフォルダ (HomeDir) を変更しました。

「Keyring」のフォルダ (HomeDir) を変更

1. レジストリエディタで以下を変更。
キー名「HKEY_CURRENT_USER\Software\GNU\GNUPG」
値の名前「HomeDir」
値のデータ「C:\Documents and Settings\UserName\.gnupg」
(デフォルトでインストールした場合は「C:\GnuPG」となっている。)

なお、エクスプローラーからは「.gnupg」フォルダを作れなかったので、コマンドプロンプトから作成しました。

2. 「pubring.bak」「pubring.gpg」「random_seed」「secring.gpg」「trustdb.gpg」を「HomeDir」で指定したフォルダーに移動しました。(アクセス権は自分とSYSTEMのみに設定)

これで問題なく使えるはずです。

鍵ペアの作成

C:\Documents and Settings\UserName\.gnupg>gpg --gen-key
gpg (GnuPG) 1.2.3-nr1; Copyright (C) 2003 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
 
gpg: keyring `C:\Documents and Settings\UserName\.gnupg\secring.gpg' created
gpg: keyring `C:\Documents and Settings\UserName\.gnupg\pubring.gpg' created
Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
              default keysize is 1024 bits
    highest suggested keysize is 2048 bits
What keysize do you want? (1024) 2048
 # デフォルトは1024ですが、最大の2048を指定してみました
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 1y
 # 有効期限を無期限にすると失効証明書を発行できなかった時
# 困ると思ったので(管理に自信がない^^;)
# 有効期限を1年に設定してみました
Key expires at 10/14/04 02:17:16 東京 (標準時)
Is this correct (y/n)? y
 
You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
# "本名 (コメント) <メールアドレス>" というフォーマットになります
Real name: Fooyama Taro
Email address: foo@example.jp
Comment:  # コメントが必要なかったら「Enter」のみ
You selected this USER-ID:
    "Fooyama Taro <foo@example.jp>"
 
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
 
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
( 略 )
# ここで、キーボードやマウスを動かしたり、
# ディスクアクセスをすると、いい乱数が生成されます
 
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
( 略 )
# ここで、キーボードやマウスを動かしたり、
# ディスクアクセスをすると、いい乱数が生成されます
 
gpg: C:\Documents and Settings\UserName\.gnupg\trustdb.gpg: trustdb created
public and secret key created and signed.
key marked as ultimately trusted.
 
pub  1024D/65BD**** 2003-10-14 Fooyama Taro <foo@example.jp>
     Key fingerprint = 9B92 E74B E73D FAAE F211  07DE 5304 B3E9 65BD ****
sub  2048g/95F6**** 2003-10-14 [expires: 2004-10-13]

次に、失効証明を生成します。
今すぐに鍵を失効させるのではなく、公開した鍵の使用を取り消す安全な方法を確立するだけです。
失効させる必要があった時に初めて、失効証明をimportして、使えなくするのです。
失効証明を生成後、フロッピーにコピーして安全な場所に保管しておきます。

> gpg -o revoke.asc --gen-revoke foo@example.jp
 
sec  1024D/D0A5**** 2003-10-14   `Fooyama Taro <foo@example.jp>
 
Create a revocation certificate for this key? y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 0
Enter an optional description; end it with an empty line:
> for test  # 記述する必要がなかったら「Enter」のみ
>
Reason for revocation: No reason specified
for test
Is this okay? y
 
You need a passphrase to unlock the secret key for
user: "Fooyama Taro <foo@example.jp>"
1024-bit DSA key, ID D0A5****, created 2003-10-14
 
ASCII armored output forced.
Revocation certificate created.
 
Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

実際に失効させるには
先に、鍵ペアを失効させる方法について書きます。
失効させるさせるには、失効証明をインポートします。
パスフレーズを忘れたり、漏洩したり、メールアドレスが変わって使わなくなったりした時に行います。
これでローカルのGnuPG上では鍵ペアが失効されます。

>gpg --import revoke.asc
gpg: key D0A5****: "Fooyama Taro <foo@example.jp>" 
revocation certificate imported
gpg: Total number processed: 1
gpg:    new key revocations: 1

次に失効した公開鍵を配布する必要があります。
ローカルで失効しても、他のユーザーがそれを知らなければ意味がありません。

失効した公開鍵を配布します。
Key Serverに登録してるときは、Key Serverに失効した公開鍵を送信します。

公開鍵のエクスポート
実際に使用するには、通信相手やキーサーバーに公開鍵を渡す必要があります。
公開鍵をエクスポートするには以下を実行します。

> gpg --armor --export foo@example.jp > mypubkey.asc

また、コメントをつけたい時は、以下のように実行します。
コメントをつけるとわかりやすいです。

> gpg --armor --export --comment "Fooyama Taro's Public Key" 
foo@example.jp > mypubkey.asc

「mypubkey.asc」に公開鍵がエクスポートされます。

このファイルを電子メールに添付してたり、 キーサーバーにエキスポートして通信相手に渡します。

公開鍵のインポート
通信相手の公開鍵を使用できるようにするために、通信相手の公開鍵をKeyringにインポートします。
通信相手の公開鍵のファイルが「pubkey.asc」の時、以下を実行します。

> gpg --import pubkey.asc

Keyringにインポートされている公開鍵の確認
Keyringにインポートされている公開鍵の一覧を表示するには、以下を実行します。

> gpg --list-keys

ちなみに、秘密鍵の一覧を表示するには

> gpg --list-secret-keys

鍵指紋 (key fingerprint)の確認
公開鍵をインポートしたら、確認をしておきましょう。
(インポート前に確認したほうがいいのかな?方法はある?)

通信相手(hoge@example.jp)の公開鍵をインポートしたとします。

> gpg --fingerprint hoge@example.jp

「ここで表示された鍵指紋」と「通信相手やキーサーバーなどから取得した鍵指紋」を比較して、同じであることを確認します。

通信相手の公開鍵に署名をする
通信相手の公開鍵が確かに本物であることを確認したら、その公開鍵に署名をします。

> gpg --edit-key hoge@example.jp
gpg (GnuPG) 1.2.3-nr1; Copyright (C) 2003 Free Software Foundation, Inc. 
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
 
pub  1024R/2C14****  created: 2000-10-11 expires: never      trust: -/-
(1). Hoge Jiro <hoge@example.jp>
 
Command> trust   # 信用度を設定します
pub  1024R/2C14****  created: 2000-10-11 expires: never      trust: -/-
(1). Hoge Jiro <hoge@example.jp>
 
Please decide how far you trust this user to correctly
verify other users' keys (by looking at passports,
checking fingerprints from different sources...)?
 
 1 = Don't know             # 未知
 2 = I do NOT trust         # 信用し ない
 3 = I trust marginally     # ある程度信用する
 4 = I trust fully          # 完全に信用する
 5 = I trust ultimately     # 絶対的に信用する。自分自身の署名に使います
 m = back to the main menu  # メインメニューに戻る
 
Your decision? 4  # 信用できることを確認したので4を選択
 
pub  1024R/2C14****  created: 2000-10-11 expires: never      trust: f/-
(1). Hoge Jiro <hoge@example.jp>
Please note that the shown key validity is not necessarily correct
unless you restart the program.
 
Command> sign   # 署名をします
 
pub  1024R/2C14****  created: 2000-10-11 expires: never      trust: f/-
 Primary key fingerprint: 15 E4 D3 AA C8 EB F4 12  55 FA AB 51 13 E8 11 93
 
     Hoge Jiro <hoge@example.jp>
 
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".
 
   (0) I will not answer. (default)
   (1) I have not checked at all.
   (2) I have done casual checking.
   (3) I have done very careful checking.
 
Your selection? (enter '?' for more information): 2
# この入力↑はどう関係するんだろう?
Are you really sure that you want to sign this key
with your key: "Fooyama Taro <foo@example.jp>" (D0A5****)
 
I have checked this key casually.
 
Really sign? y
 
You need a passphrase to unlock the secret key for
user: "Fooyama Taro <foo@example.jp>"
1024-bit DSA key, ID D0A5****, created 2003-10-15
# パスフレーズを入力します
 
Command> check
uid  Hoge Jiro <hoge@example.jp>
sig!        2C14**** 2000-10-11   [self-signature]
sig!2       D0A5**** 2003-10-15   Fooyama Taro <foo@example.jp>
 
Command> save   # 保存して終了。保存しないで終了はquit

the Web Of Trust (信用の輪) についてわかってると良いかも。

登録した公開鍵を削除する (2004/09/29 追記)

これでいいはず。(実行してませんー。)

C:\> gpg --delete-key hoge@example.jp

編集モード(?)のヘルプを表示する (2003/11/19 追記)
--edit-keyオプションで編集モード(?)に入れます。
編集モード(?)のヘルプの表示方法。

# コマンドプロンプトから
> gpg --edit-key hoge@example.jp
 
# ここは編集モード(?)の中
Command> help
quit       quit this menu
save       save and quit
help       show this help
fpr        show fingerprint
list       list key and user IDs
uid        select user ID N
key        select secondary key N
check      list signatures
sign       sign the key
lsign      sign the key locally
nrsign     sign the key non-revocably
nrlsign    sign the key locally and non-revocably
adduid     add a user ID
addphoto   add a photo ID
deluid     delete user ID
addkey     add a secondary key
delkey     delete a secondary key
addrevoker add a revocation key
delsig     delete signatures
expire     change the expire date
primary    flag user ID as primary
toggle     toggle between secret and public key listing
pref       list preferences (expert)
showpref   list preferences (verbose)
setpref    set preference list
updpref    updated preferences
passwd     change the passphrase
trust      change the ownertrust
revsig     revoke signatures
revuid     revoke a user ID
revkey     revoke a secondary key
disable    disable a key
enable     enable a key
showphoto  show photo ID
 
Command> quit  # コマンドプロンプトに戻る (終了)

パスフレーズの変更 (2003/11/19 追記)
パスフレーズを変更したくなることもあるでしょう。

# コマンドプロンプトから
> gpg --edit-key hoge@example.jp
 
# ここは編集モード(?)の中
Command> passwd
Key is protected.
 
You need a passphrase to unlock the secret key for
user: "Fooyama Taro <foo@example.jp>"
1024-bit DSA key, ID D0A5****, created 2003-10-14
 
Enter passphrase:    # 旧パスフレーズを入力
 
Enter the new passphrase for this secret key.
Enter passphrase:   # 新パスフレーズを入力
Repeat passphrase:  # 新パスフレーズを入力 (確認)
 
Command> save  # 保存して終了

鍵の有効期限を更新する (2006/02/14 追記)
鍵に有効期限を指定した場合、有効期限を変更できます。
gpg (GnuPG) 1.4.2で実行してみました。

C:\> gpg --edit-key foo@example.jp
gpg (GnuPG) 1.4.2; Copyright (C) 2005 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
 
秘密鍵が使用できます。
 
pub  1024D/65BD****  作成: 2003-10-14  満了: 2005-09-29  利用法: CS
                     信用: 絶対的        有効性: 満了
sub  2048g/95F6****  作成: 2003-10-14  満了: 2004-10-14  利用法: E
[ expired] (1). Fooyama Taro 
 
 # ↑既に有効期限は切れていて、有効性は「満了」になっている
 
コマンド> expire   # 主鍵(pub)の有効期限を変更
主鍵の有効期限を変更します。
鍵の有効期限を指定してください。
         0 = 鍵は無期限
        = 鍵は n 日間で満了
      w = 鍵は n 週間で満了
      m = 鍵は n か月間で満了
      y = 鍵は n 年間で満了
鍵の有効期間は? (0)1y   # コマンド実行から1年間で満了にする
Key expires at 02/14/07 23:06:24
これで正しいですか? (y/N) y
 
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Fooyama Taro ”
1024ビットDSA鍵, ID 65BD****作成日付は2003-10-14
 
パスフレーズを入力: ********   # パスフレーズを入力
pub  1024D/65BD****  作成: 2003-10-14  満了: 2007-02-14  利用法: CS
                     信用: 絶対的        有効性: 絶対的
sub  2048g/95F6****  作成: 2003-10-14  満了: 2004-10-14  利用法: E
[ultimate] (1). Fooyama Taro 
 
 # ↑有効期限が1年後になり、有効性は絶対的になっている
 
コマンド> key 1   # 1番目の副鍵(sub)を選択
pub  1024D/65BD****  作成: 2003-10-14  満了: 2007-02-14  利用法: CS
                     信用: 絶対的        有効性: 絶対的
sub* 2048g/95F6****  作成: 2003-10-14  満了: 2004-10-14  利用法: E
[ultimate] (1). Fooyama Taro 
 
 # ↑「sub」の右に「*」が付いて選択された
 
コマンド> expire   # 副鍵(sub)の有効期限を変更
Changing expiration time for a subkey.
鍵の有効期限を指定してください。
         0 = 鍵は無期限
        = 鍵は n 日間で満了
      w = 鍵は n 週間で満了
      m = 鍵は n か月間で満了
      y = 鍵は n 年間で満了
鍵の有効期間は? (0)1y   # コマンド実行から1年間で満了にする
Key expires at 02/14/07 23:08:28
これで正しいですか? (y/N) y
 
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Fooyama Taro ”
1024ビットDSA鍵, ID 65BD****作成日付は2003-10-14
 
パスフレーズを入力:********   # パスフレーズを入力
pub  1024D/65BD****  作成: 2003-10-14  満了: 2007-02-14  利用法: CS
                     信用: 絶対的        有効性: 絶対的
sub* 2048g/95F6****  作成: 2003-10-14  満了: 2007-02-14  利用法: E
[ultimate] (1). Fooyama Taro 
 
 # ↑副鍵(sub)の有効期限が1年後になる
 
コマンド> save   # 保存して終了

公開鍵は変わるので、PGP 公開鍵サーバーにあげ直す必要があるはず。
ちなみに、フィンガープリント(fingerprint)は変わらない。

リンク (2006/02/14 追記)

・Understanding GnuPG for Mac OS X
http://homepage.mac.com/mio_rhapsody/gnupg/Understanding.html
詳しいです。

・The GNU Privacy Handbook
http://www.gnupg.org/gph/en/manual.html
上記サイトが元にしたサイト (英語)

・Tomio's Page (GnuPG &\1 GPGMail &\1 ABKey &\1 GNUMail for Mac OS X)
http://homepage.mac.com/mio_rhapsody/gnupg/index.html
面白そうなサイトです。

本家のGnuPGを使ってみる (2004/03/14 追記)

本家のGnuPGを使ってみました。
2004/03/14現在のバージョンは、1.2.4です。

  1. Download - GnuPG.orgから、「gnupg-w32cli-1.2.4.zip」をダウンロードします。
  2. 適当なディレクトリに解凍します。
    今回は「C:\GnuPG」に解凍しました。
  3. Windowsに特化した情報を得るため、解凍したファイルの中の「README.W32」を読みます。
  4. まずローカライズを行います。(自信なし)
    「ja.mo」を「c:\gnu\locale\ja\gnupg.mo」という名前でコピーします。
    c:\GnuPG> copy ja.mo c:\gnu\locale\ja\gnupg.mo
    
  5. 「gnupg-w32.reg」を少し書き換えて実行します。
    REGEDIT4
     
    [HKEY_CURRENT_USER\Software\GNU]
     
    [HKEY_CURRENT_USER\Software\GNU\GNUPG]
     
    [HKEY_CURRENT_USER\Software\GNU\GNUPG]
    "HomeDir"="C:\\Documents and Settings\\USERNAME\\.gnupg"
    "gpgProgram"="C:\\GnuPG\\gpg.exe"
     
    [HKEY_CURRENT_USER\Control Panel\Mingw32]
     
    [HKEY_CURRENT_USER\Control Panel\Mingw32\NLS]
     
    [HKEY_CURRENT_USER\Control Panel\Mingw32\NLS]
    "MODir"="C:\\GnuPG\\Locale\ja"
    

これでいいはず、、、。

有効性(validity)と信用度(trust)
・the Web of Trust (IIJ 技術研究所)
http://pgp.iijlab.net/pgp/trust.html

有効性と信用度
鍵リングに登録される公開鍵には有効性(validity)と信用度(trust)という値があります。信用度は自分で設定し、有効性は計算により算出されます。それぞれ以下のような意味を持っています。

有効性
ある公開鍵が、本当にその公開鍵のユーザ ID で示される人に属しており、改竄もされていないと信頼できる度合。
信用度
ある人 A が他の人 B を紹介する際に、紹介者としてどれだけ A を信用するかという度合。 A が B を C に紹介するとは、 A が B の公開鍵に署名し、A の署名の付いた B の公開鍵を何らかの方法で C が入手することを意味します。

公開鍵には複数の人が署名可能であり、それぞれの信用度の合計から有効性を決定します。

ある人の公開鍵に署名を行う際、信用度という値(重み)をつけます。
公開鍵には複数の人の信用度をつけることができます。
有効性は、この信用度により計算されます。
どの程度で有効と判断するかは、COMPLETES_NEEDED(デフォルトは 1)とMARGINALS_NEEDED(デフォルトは 2)というPGPの変数によって変わってきます。

・・・ということかな?(私の解釈)

実験したこと

失効するとどこまで出来るかまだわかってない。。。
後で理解の助けにするかもしれないので、試したことを書き残しておきます。

手順
1. 鍵ペアを生成する
2. メールを自分に送信(署名、署名+暗号化、暗号化)
3. 破棄証明を生成
4. メールを自分に送信(署名、署名+暗号化、暗号化)
5. 破棄証明をインポート
6. メールを自分に送信(署名、署名+暗号化、暗号化)
7. 受信したメールを確認する。

手順2.と4のメール
 署名を確認することはできない。
 復号化はパスフレーズ入力後可能。

手順6のメール
 送信不可能だった。

あれ?何がわからないかも、わからなくなった<ばか

PGP 公開鍵サーバー

PGP 公開鍵を登録/検索できるサーバーです。
PGPを利用している人々の間で公開鍵の交換を円滑にするためのものです。
登録されている公開鍵についてなんら保証するものではありません。
本人のものかを確認する手段として、鍵指紋 (key fingerprint) を利用する方法があります。
1ヶ所登録すると世界中の公開鍵サーバに配布されます。

・PGP 公開鍵サーバー (pgp.nic.ad.jp で実験運用)
http://pgp.nic.ad.jp/pgp/pks-commands-j.html

注意事項によると、

このWWWサーバは、 pgp.nic.ad.jp で実験運用している PGP Public KeyserverへのPGP公開鍵登録サービス、及びPGP Public KeyserverからのPGP 公開鍵検索サービスを提供します。

だそうです。

・Welcome to KEYSERVER . NET (PGP Public Keys Server)
http://www.keyserver.net/en/

・pgp.dtype.org
http://wwwkeys.pgp.net/
Enigmailでデフォルトで設定されているKeyServer。

関連リンク

・The International PGP Home Page
http://www.pgpi.org/
PGP

・The GNU Privacy Guard - GnuPG.org
http://www.gnupg.org/
GNUPG

・PGP User's Manual for Windows
http://www.cla-ri.net/pgp/

・Official PGP home page in Japan
http://pgp.iijlab.net/
日本語によるPGP関連の情報。
個人的には、このサイトにあった「暗号メールと電子署名」というドキュメントがわかりやすかったです。「暗号メールとは何か?」と「暗号メールの仕組み」。
ちょっと古いドキュメントみたいですが(2003/10/14現在、ファイルの更新日は2002/4/16)。

差出人Aliceは受取人Bobとすると、

(差出人の処理)
Aliceは本文をBobの公開鍵で本文を暗号化し、暗号化前の本文のHashをAliceの秘密鍵で暗号化(これを電子署名と呼ぶ)して送る。

(受取人の処理)
Bobは、Bobの秘密鍵で本文を復号化する。また、電子署名をAliceの公開鍵で復号化し、復号化した本文のHashと同じかを確認する。

って事。(あってる?)

間違いがあったら、教えてください。m(_._)m

トラックバック(2)

このブログ記事を参照しているブログ一覧: GnuPG

このブログ記事に対するトラックバックURL: http://kinshachi.ddo.jp/mt/mt-tb.cgi/16

» メモ(PukiWiki/TrackBack 0.1)~のトラックバック

Top / メモ メモ † ↑ツール † ソフト QEMU ハード C3003P ↑サービス † 検索 Koders - Source Code Search Engine (ソースコード検索) SCIRUS for scientific information only (科学論文検索) SPIRES HEP Literature Database (... 続きを読む

» PGP暗号化ブログ(sima2*blog)~のトラックバック

gnupg いや、ホントにエントリが暗号化されてるんだってばw... 続きを読む

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ikeが2003年10月15日 23:57に書いたブログ記事です。

ひとつ前のブログ記事は「Enigmail」です。

次のブログ記事は「Boot Disks」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

Powered by Movable Type 4.261