DebConf12 のキーサインパーティに参加するまでにやったことまとめ

7/8〜7/14開催の DebConf12 : DebConf12 - Home に会社のお金で参加できることになり、キーサインパーティ : Keysigning - DebConf12 なるものがあるよーと、とある先輩が教えてくれたのでいろいろ調べてみた。

資料

http://tokyodebian.alioth.debian.org/pdf/debianmeetingresume201009-presentation.pdf

内容を要約すると、

  • PGP/GnuPG認証局がないので、自分が相手を信頼するしかない。
  • キーサインパーティを行って、PGP/GnuPG の公開鍵をソーシャルな情報とともに交換し、信頼の輪(web of trust) を広げる。

というわけで、カンファレンスで出会った人たちとお互いに紹介しあって、信頼できそうだなと思ったら相手の PGP/GnuPG 公開鍵に署名しましょう、という趣旨のもと行われるパーティのようだ。

僕はというと、そもそも鍵自体持っていないので、まずは鍵を準備するところからはじめる。キーサインパーティ当日の流れとか所作的なところは、終わったあとでまとめたいと思う。

GnuPG のインストール

まずは GunPG がインストールされていることを確認する。

$ dpkg -l gunpg
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ 名前                      バージョン             説明
+++-===========================-===========================-======================================================================
ii  gnupg                       1.4.10-2ubuntu1             GNU privacy guard - a free PGP replacement

gnupg がインストールされてない場合は、以下のコマンドでインストール。

$ sudo apt-get install gnupg

以降は、gnupg 1.4.10 がインストールされていることを前提とする。

GnuPG 鍵の作成

鍵の作成は gpg --gen-key コマンドを使う。

$ gpg --gen-key
gpg (GnuPG) 1.4.10; Copyright (C) 2008 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/oiwatatsuya01/.gnupg」ができました
gpg: 新しい構成ファイル「/home/oiwatatsuya01/.gnupg/gpg.conf」ができました
gpg: 警告: 「/home/oiwatatsuya01/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/home/oiwatatsuya01/.gnupg/secring.gpg」ができました
gpg: 鍵輪「/home/oiwatatsuya01/.gnupg/pubring.gpg」ができました

鍵のタイプの設定:ここでは 1 を選択。

ご希望の鍵の種類を選択してください:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
選択は? 1

鍵の長さの設定:1020ビットのDSA鍵はSHA1ハッシュ関数が使われるが、SHA1ハッシュは脆弱性が報告されている。そのため最低でも2048ビット以上、かつ4096ビットがイマドキらしいのでここでは4096と入力。

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
要求された鍵長は4096ビット

有効期限の設定:環境に合わせて鍵の有効期限を設定する。基本は 0(無期限)でOK。

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0) 0
Key does not expire at all

入力確認:問題なければ y を入力。

これで正しいですか? (y/N) y

個人情報の設定:ここでは名前、電子メールなどを入力する。れにより鍵に名前のついたヘッダを追加することができる。

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichhduesseldorf.de>"

本名: Tatsuya Oiwa
電子メール・アドレス: tatsuyaoiw@gmail.com
コメント: 
次のユーザーIDを選択しました:
    “Tatsuya Oiwa <tatsuyaoiw@gmail.com>”

入力確認:問題なければ O (OK) を入力。

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

パスフレーズ:任意のパスフレーズを入力。

秘密鍵を保護するためにパスフレーズがいります。

マウスを動かしたりキーボードを叩いたりして乱数を発生させるので、鍵の作成中は何しててもOK。

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。

gpg: /home/oiwatatsuya01/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵A0E6B4A1を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   4096R/A0E6B4A1 2012-07-05
      指紋 = EE9F 5B9E 1BAD 4A01 7E5A  8BD9 CC9D 5AD3 A0E6 B4A1
uid                  Tatsuya Oiwa <tatsuyaoiw@gmail.com>
sub   4096R/3C2D5D73 2012-07-05

以上で鍵の作成は完了。

破棄証明書の作成

鍵を破棄したい場合に使う証明書を作成する。

$ gpg -o revoke.asc --gen-revoke tatsuyaoiw@gmail.com

sec  4096R/A0E6B4A1 2012-07-05 Tatsuya Oiwa <tatsuyaoiw@gmail.com>

1 でOK。

この鍵にたいする失効証明書を作成しますか? (y/N) y
失効の理由を選択してください:
  0 = 理由は指定されていません
  1 = 鍵がパクられました
  2 = 鍵がとりかわっています
  3 = 鍵はもう不用です
  Q = キャンセル
(ここではたぶん1を選びます)
あなたの決定は? 1
予備の説明を入力。空行で終了:
> 

yes でOK。

失効理由: 鍵がパクられました
(説明はありません)
よろしいですか? (y/N) y

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Tatsuya Oiwa <tatsuyaoiw@gmail.com>”
4096ビットRSA鍵, ID A0E6B4A1作成日付は2012-07-05

gpg: このセッションでgpg-agentは無効です
ASCII包装出力を強制します。  
失効証明書を作成しました。

見つからないような媒体に移動してください。もしワルがこの証明書への
アクセスを得ると、そいつはあなたの鍵を使えなくすることができます。
媒体が読出し不能になった場合に備えて、この証明書を印刷して保管するの
が賢明です。しかし、ご注意ください。あなたのマシンの印字システムは、
だれでも見える場所にデータをおくことがあります!

万が一鍵を破棄する場合は、以下のコマンドで鍵を破棄する。

$ gpg --import revcert.asc

キーサーバに公開鍵を登録

キーサーバは様々な種類があるが、ここでは @ さんレコメンドの MIT PGP Key Server に登録することにした。

$ gpg --keyserver pgp.mit.edu --send-keys A0E6B4A1

公開鍵に署名をして、メールで送信

公開鍵をテキストファイルに書き出す。(export-clean, export-minimal)

$ gpg --armor --export-options export-clean,export-minimal --export A0E6B4A1 > publickeyblock

公開鍵に署名する。

$ gpg --local-user A0E6B4A1 --clearsign publickeyblock

DebConf12の宛先に署名入り公開鍵を送信。

$ mail -s "KeySigning Party @ DebConf12" anibal@debian.org < publickeyblock.asc 

署名入り公開鍵の作成 & メール送信までを一気にやりたい場合。

(echo -e "To: anibal@debian.org\nFrom: Tatsuya Oiwa <tatsuyaoiw@gmail.com>\nBcc: tatsuyaoiw@gmail.com\nSubject: KeySigning Party @ DebConf12\n"; gpg --armor --export-options export-clean,export-minimal --export A0E6B4A1 | gpg --local-user A0E6B4A1 --clearsign) | sendmail -t 

その他のコマンド

自分の署名を確認する。

$ gpg --fingerprint tatsuyaoiw@gmail.com