倉敷
悟
![]() |
GnuPG と い う と 、 「あ あ 、 な ん か apt-get の 時 に ゴ チ ャゴ チ ャ文 句 言 って く る ア レ か」 といった印象をお持ちの方もおられ るのではないかと思います。 実は Debian には様々な形で GPG が組みこまれていて、 ssh 等にならぶマストアイテムといって も過言ではありません。 このセッションでは、 GPG の用途と役割について簡単にご紹介した後、 典型的な使用方法についてデ モを行います。
端的に GPG とは何か、 というと:
より詳しい解説は、 下記 URL で読むことができます。
etch 以降、 配布しているパッケージアーカイブの改竄防止のため、 Release ファイルに GPG でデジタル署名を施しています。 APT でパッケージを取得する際に、 この署名を確認して、 検証できない場合は警告が表示されるようになってい ます。
公式アーカイブの公開鍵はパッケージとして配布されているので、 これをインストールしておけば、 後は APT がよしなに 面倒をみてくれます。
kura@acacia:~$ dpkg -l | grep keyring
ii debian-archive-keyring 2007.07.31 GnuPG archive keys of the Debian archive ii debian-multimedia-keyring 2007.02.14 GnuPG archive key of the debian-multimedia r |
上記の例では debian-multimedia の鍵も入っていますが、 公式でないアーカイブでも、 鍵が配布されていれば同じように検 証をしてくれます。
Debian では、 GnuPG が本人の身分証明手段として広く浸透しており、 特にパッケージまわりで作業しようと思うと、 なんだ かんだで必要になります。
私に見えてる範囲では:
といった場面で自分の GPG 鍵が必要です。 また、 ただ作るだけではなくて、 Debian Developer と keysign を行っておく必要も あります。
現時点では、 「Debian は使うだけだし、 面倒だから別に要らないや」 と思うかも知れません。
ただ、 他にもメリットがありますし、 これを機会に是非 GnuPG を使ってみてください。 最初に必要なのは、 たった一つ、 「これから作る鍵をちゃんと維持するぞ」 という意気込みだけです。
というわけで、 自分の鍵を作ってみましょう。
kura@acacia:~$ gpg --gen-key
gpg (GnuPG) 1.4.6; Copyright (C) 2006 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: directory ‘/home/kura/.gnupg’ created gpg: can’t open ‘/gnupg/options.skel’: そのようなファイルやディレクトリはありません gpg: keyring ‘/home/kura/.gnupg/secring.gpg’ created gpg: keyring ‘/home/kura/.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? |
まず、 鍵の種類を聞かれます。 ここはデフォルトのままで構いませんので、 何も入力せずに enter を押し ます。
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) |
次に、 鍵の流さを聞かれます。 選択の目安としては、 1024 は短かすぎるので NG、 デフォルトの 2048 はまぁ OK、 計算機 資源が余っているなら 4096 もアリ、 といったところでしょうか。
この例では、 そのまま enter を押して、 デフォルトの 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) Key does not expire at all Is this correct? (y/N) y |
次は、 鍵の有効期限を選びます。 私の場合、 最初ここをどうするべきか困ったところですが、 これまで keysign してもらった 方々のを見る限り、 期限なしで問題ないようです。
というわけで、 そのまま enter を押して、 確認にも y と答えます。
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: KURASHIKI Satoru Email address: lurdan@gmail.com Comment: |
ここでは、 自分の個人情報を設定します。 keysign などでは、 公的な証明書とのつきあわせを行いますので、 その時に確認で きる本名を入力する必要があります。 このあたり、 日本のネットワーク文化とはいまひとつ馴染みがよくないかも知れませ んね。
GPG 鍵では、 一つの ID に対して複数のメールアドレスを設定することができるので、 Comment でそれを明示することが できます。
You selected this USER-ID:
"KURASHIKI Satoru <lurdan@gmail.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O |
最終的に、 ユーザ ID がこうなりますよ、 という確認です。 問題ないので O と入力します。
You need a Passphrase to protect your secret key.
Enter passphrase: Repeat passphrase: |
ここでパスフレーズを確認含めて 2 回入力します。 パスフレーズには流さの制限がないので、 覚えやすい長さの英文を使う といいのではないでしょうか。
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. .+++++++++++++++..++++++++++.++++++++++++++++++++++++++++++++++++++++.+++++++++++++++.+++++++++++++++.+++++.++ ++++++++++++++++++.++++++++++>.++++++++++..............+++++ Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 230 more bytes) 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: /home/kura/.gnupg/trustdb.gpg: trustdb created
gpg: key 9751B54D marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 1024D/9751B54D 2008-03-21 Key fingerprint = 3AAA 2ED1 ACDA 49AE 4C68 66B9 CE7D E89C 9751 B54D uid KURASHIKI Satoru <lurdan@gmail.com> sub 2048g/B79D76D0 2008-03-21 |
このように完成しています。 最後に表示された 「key fingerprint」 のうち、 最後の 2 ブロックが自分の鍵の ID となり ます。
最後に表示されている部分で、 「pub」 の行が公開鍵、 「sub」 の行が秘密鍵を表しています。
kura@acacia:~$ ls -l .gnupg
合計 20 -rw------- 1 kura kura 1167 2008-03-21 16:06 pubring.gpg -rw------- 1 kura kura 1167 2008-03-21 16:06 pubring.gpg~ -rw------- 1 kura kura 600 2008-03-21 16:06 random_seed -rw------- 1 kura kura 1316 2008-03-21 16:06 secring.gpg -rw------- 1 kura kura 1280 2008-03-21 16:06 trustdb.gpg |
生成された鍵は、 このように $HOME/.gnupg/ に保管されています。 これらのファイルは超大事なので、 大切に取り扱うよ うにしましょう。
ちなみに、 上の例で使っている鍵は、 この記事のために作ったもので、 もはや存在しません。
通常は、 自分の鍵束 ($HOME/.gnupg/*) には、
が 入 って い ま す 。 こ れ ら の 情 報 を 確 認 す る 基 本 的 な コ マ ン ド を ご 紹 介 し ま す 。 な お 、 鍵 束 の 中 で 特 定 の 鍵 を 指 定 す るには、 次 のうちどれかが使えます。
自分の鍵束にある公開鍵を一覧表示:
$ gpg --list-keys
|
そのうち特定の公開鍵を表示:
$ gpg --list-keys KURA
|
鍵指紋 (fingerprint) を確認:
$ gpg --fingerprint KURA
|
鍵署名を確認:
$ gpg --list-sigs KURA
|
私が GPG を使うのは、 主に gmail 上のメールアドレスなので、 firefox のプラグイン「firegpg」 を使っています。 対象となる 本文を選択して増えたボタンを押すだけなので簡単に使うことができます。
keysign のためには、 次のものが必要です。
私の場合、 鍵の指紋は手で書いたり、 鍵表示をそのままコピペして印刷したりしていました。
pub 1024D/9751B54D 2008-03-21
Key fingerprint = 3AAA 2ED1 ACDA 49AE 4C68 66B9 CE7D E89C 9751 B54D uid KURASHIKI Satoru <lurdan@gmail.com> sub 2048g/B79D76D0 2008-03-21 |
公的な証明書を使って、 keysign の相手とお互いに相手が相手であることを確認し、 用意した鍵指紋 (fingerprint) の印刷を交 換します。
これだけです。 簡単ですね。
端末の前に戻ったら、 まずは相手の公開鍵を手に入れましょう。
$ gpg --keyserver subkeys.pgp.net --recv-keys 0x????????
|
keyserver は、 相手が Debian Developer であれば keyring.debian.org も使えます。 また、 ? の部分には、 もらった鍵指紋 (fingerprint) の最後の 8 文字を入力します。
無事に公開鍵が入手できたら、 それに署名をします。
$ gpg --edit-key 0x????????
|
gpg のコマンドモードに入るので、 「uid (数字)」 で署名をする uid を選び (*マークがつきます)、 「sign」 と入力します (fingerprint とメールアドレスを確認して署名)。
なお、 相手が複数の uid を持っている場合、 私は一通り全てに署名することにしています。
終わったら、 「quit」 と入力し、 変更を保存してください。
次のように署名の結果を表示して、 自分の名前が表示されていることを確認してください。
$ gpg --list-sigs 0x????????
|
ここまでで問題がなければ、 相手の公開鍵をテキストファイルに export します。
$ gpg --export -a 0x???????? > someones.key
|
後は、 これを相手に送るだけです。 添付するなり、 本文に貼るなりして、 メールで送信します。 相手の公開鍵で暗号化してお くとよいでしょう。
さて、 相手も同じように署名をしてくれているはずですので、 しばらくするとメールで自分の公開鍵を送ってもらえるはず です。
届いたら、 テキストファイルに export された鍵を自分の鍵束にとりこみ、 ついでなので公開鍵サーバにも送っておきます。
$ gpg --import yours.key
$ gpg --keyserver subkeys.debian.org --send-keys 0x???????? |
? には、 自分の公開鍵 ID を入力します。
第 11 回関西 Debian 勉強会 2008 年 3 月
____________________________________________________________________________________________