View All Posts. MiCHiLU.com powered by Django ;-)

GnuPG (GNU Privacy Guard)

公開鍵方式の暗号化と著名に使われる PGP (Pretty Good Privacy) のGNU実装。

http://www.gnupg.org/share/logo-gnupg-light-purple-bg.png

暗号に関する歴史は分厚い本が書けるほどの人間物語。 普段なにげに使っている暗号が、その昔にはこんなことになっていたとは。

もっと詳しい内容はオライリーのPGPで読むことができる

以下、PGPがどういう理論の上に成り立っているのかの資料。

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
Sun, 30 Dec 2007 16:24:55 +0900 source edit
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.

Comments


View All Posts. MiCHiLU.com powered by Django ;-)