公開鍵方式の暗号化と著名に使われる PGP (Pretty Good Privacy) のGNU実装。
暗号に関する歴史は分厚い本が書けるほどの人間物語。 普段なにげに使っている暗号が、その昔にはこんなことになっていたとは。
もっと詳しい内容はオライリーのPGPで読むことができる
以下、PGPがどういう理論の上に成り立っているのかの資料。
http://ja.wikipedia.org/wiki/Diffie-Hellman鍵共有
Mac 版の GnuPG をさくっと落として使ってみる
まず Version
$ gpg --version
gpg (GnuPG) 1.4.8
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, RSA-E, RSA-S, ELG-E, DSA
暗号法: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
ハッシュ: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2
秘密鍵と公開鍵のセットを作成する
$ ls .gnupg
ls: .gnupg: No such file or directory
$ gpg --gen-key
gpg (GnuPG) 1.4.8; Copyright (C) 2007 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: ディレクトリー「<$HOME>/.gnupg」ができました
gpg: 新しい構成ファイル「<$HOME>/.gnupg/gpg.conf」ができました
gpg: 警告: 「<$HOME>/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「<$HOME>/.gnupg/secring.gpg」ができました
gpg: 鍵輪「<$HOME>/.gnupg/pubring.gpg」ができました
ご希望の鍵の種類を選択してください:
(1) DSAとElgamal (既定)
(2) DSA (署名のみ)
(5) RSA (署名のみ)
選択は?
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
<n> = 鍵は n 日間で満了
<n>w = 鍵は n 週間で満了
<n>m = 鍵は n か月間で満了
<n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)
Key does not expire at all
これで正しいですか? (y/N) y
あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
本名: Takanao Endoh
電子メール・アドレス: takanao@endoh.tk
コメント:
次のユーザーIDを選択しました:
“Takanao Endoh <takanao@endoh.tk>”
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。
パスフレーズを入力:
パスフレーズを再入力:
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
.+++++++++++++++.++++++++++++++++++++++++++++++..++++++++++.++++
.+++++++++++++++.++++++++++++++++++++++++++++++..++++++++++.++++
gpg: <$HOME>/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵238BFAE5を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。
gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
pub 1024D/238BFAE5 2007-12-23
指紋 = 057E 2DEC AF85 95A4 41BA 6BC1 B537 0A4A 238B FAE5
uid Takanao Endoh <takanao@endoh.tk>
sub 4096g/******** 2007-12-23
でき上がった鍵の情報を見る。 fingerprint は公開鍵の digest hash
$ gpg --fingerprint
<$HOME>/.gnupg/pubring.gpg
-------------------------------
pub 1024D/238BFAE5 2007-12-23
指紋 = 057E 2DEC AF85 95A4 41BA 6BC1 B537 0A4A 238B FAE5
uid Takanao Endoh <takanao@endoh.tk>
sub 4096g/******** 2007-12-23
公開鍵にIDを追加する。 最後に追加したIDが primary になるので、変更して保存しておく
$ gpg --edit-key 238bfae5
gpg (GnuPG) 1.4.8; Copyright (C) 2007 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
秘密鍵が使用できます。
pub 1024D/238BFAE5 作成: 2007-12-23 満了: 無期限 利用法: SC
信用: 絶対的 有効性: 絶対的
sub 4096g/******** 作成: 2007-12-23 満了: 無期限 利用法: E
[ultimate] (1). Takanao Endoh <takanao@endoh.tk>
コマンド> help
...
コマンド> adduid
本名: MiCHiLU
電子メール・アドレス: dj@michilu.com
コメント:
次のユーザーIDを選択しました:
“MiCHiLU <dj@michilu.com>”
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Takanao Endoh <takanao@endoh.tk>”
1024ビットDSA鍵, ID 238BFAE5作成日付は2007-12-23
pub 1024D/238BFAE5 作成: 2007-12-23 満了: 無期限 利用法: SC
信用: 絶対的 有効性: 絶対的
sub 4096g/******** 作成: 2007-12-23 満了: 無期限 利用法: E
[ultimate] (1). Takanao Endoh <takanao@endoh.tk>
[ unknown] (2) MiCHiLU <dj@michilu.com>
コマンド> uid 1
pub 1024D/238BFAE5 作成: 2007-12-23 満了: 無期限 利用法: SC
信用: 絶対的 有効性: 絶対的
sub 4096g/******** 作成: 2007-12-23 満了: 無期限 利用法: E
[ultimate] (1)* Takanao Endoh <takanao@endoh.tk>
[ unknown] (2) MiCHiLU <dj@michilu.com>
コマンド> primary
コマンド> save
鍵のIDリストを表示して確認する
$ gpg --list-sigs
<$HOME>/.gnupg/pubring.gpg
-------------------------------
pub 1024D/238BFAE5 2007-12-23
uid Takanao Endoh <takanao@endoh.tk>
sig 3 238BFAE5 2007-12-23 Takanao Endoh <takanao@endoh.tk>
uid MiCHiLU <dj@michilu.com>
sig 3 238BFAE5 2007-12-23 Takanao Endoh <takanao@endoh.tk>
sub 4096g/******** 2007-12-23
sig 238BFAE5 2007-12-23 Takanao Endoh <takanao@endoh.tk>
鍵は binary なのでTEXT形式で貼付けたい場合は、exportして ASCII形式に変換する
$ gpg -a --export
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.8 (Darwin)
mQGiBEduPoERBACTFOxoGDSsF7LDcMW48rOVEdl151aNj/bG+nl5ZSOfyKfp3U2e
cXJk4Y5JSwsatbnlkFZSyntjXmBfeDYmu5lcgU4y8v+NWyW7laF60Dj4+HzulyAR
...
BQJHbj6BAhsMAAoJELU3Ckoji/rlJ88Aniy2UH6dtxxgxdB6zlGx4/K8amEIAJ0Z
xkQCthPdsUV6TNEPLx+xuVRZOg==
=cuST
-----END PGP PUBLIC KEY BLOCK-----
さて、公開鍵はどのようにして配布するのか。
公開鍵は公に晒されても無問題なので、どのようにして配布してもよい。 しかし、その公開鍵が意図する人物によって作成されたという保証はない。 fingerprint を当人から直接聞いて確認するのが、もっとも確か。 これを補助する仕組みとして、「信用の和」 (Web of trust) がある。
公開鍵を登録できるサーバが公開されている
公開鍵を鍵サーバに送信する
$ gpg --send-keys 238BFAE5
gpg: 鍵238BFAE5をhkpサーバーsubkeys.pgp.netへ送信
登録した公開鍵を鍵サーバから検索する
$ gpg --search-keys 238BFAE5
gpg: “238BFAE5”をhkpサーバーsubkeys.pgp.netから検索
(1) MiCHiLU <dj@michilu.com>
Takanao Endoh <takanao@endoh.tk>
1024 bit DSA key 238BFAE5, 作成: 2007-12-23
Keys 1-1 of 1 for "238BFAE5". 番号(s)、N)次、またはQ)中止を入力してください >1
gpg: 鍵238BFAE5をhkpからサーバーsubkeys.pgp.netに要求
gpg: 鍵238BFAE5:“Takanao Endoh <takanao@endoh.tk>”変更なし
gpg: 処理数の合計: 1
gpg: 変更なし: 1
PGPの作者 Philip R. Zimmermann の鍵ももちろんある
$ gpg --search-keys c7a966dd
gpg: “c7a966dd”をhkpサーバーsubkeys.pgp.netから検索
(1) Philip R. Zimmermann <prz@acm.org>
1024 bit RSA key C7A966DD, 作成: 1993-05-21
Keys 1-1 of 1 for "c7a966dd". 番号(s)、N)次、またはQ)中止を入力してください >Q
