caffから受け取った署名を自分の鍵へ取り込む(gpg import)

Pocket

ずいぶん間が開いてしまいましたが、GnuPG key signの作業をする(signing-party/caff)の続きです。前回は自分が相手に対して署名を行い、その結果を送るための手続きについて説明しました。今回はその逆、自分が受け取った相手からの署名を自分の鍵に追加する方法について説明します。

メールをファイルに保存

相手がcaffを使っている場合、pgp鍵のおそらくは各IDごとに1通のメールが届きます。

pub   4096R/9C0C1404 2009-09-11
                 指紋 = 9945 2B4D D28B EEAC 8AB5  C931 B066 62EC 9C0C 1404
uid                  NOKUBI Takatsugu <knok@daionet.gr.jp>
uid                  NOKUBI Takatsugu <knok@debian.org>
uid                  NOKUBI Takatsugu <knok@namazu.org>
uid                  NOKUBI Takatsugu <knok@fsij.org>
sub   4096R/07098680 2009-09-11
sub   2048R/861243E1 2012-08-23

私の鍵の場合だと、IDとしているメールアドレスは4つあるので、一人当たり4通メールが送られてきます。それらを1つづつファイルとして保存します。

メールの内容は、それぞれのIDに対応する、自身の公開鍵で暗号化されたpgp asciiメッセージです。

Subject: Your signed PGP key 0xB06662EC9C0C1404
Content-Transfer-Encoding: 7bit
Content-Type: multipart/encrypted;
 protocol="application/pgp-encrypted";
 boundary="----------=_1409005317-7907-1"
User-Agent: caff 0.0.0.638 - http://pgp-tools.alioth.debian.org/
To: knok@daionet.gr.jp
From: "Sender" <user@example.jp>
X-Mailer: MIME-tools 5.505 (Entity 5.505)
MIME-Version: 1.0
Message-Id: <20140825222158.8DAC3399@example.jp>
Date: Tue, 26 Aug 2014 07:21:58 +0900 (JST)

This is a multi-part message in MIME format...

------------=_1409005317-7907-1
Content-Type: application/pgp-encrypted; name="signedkey.msg"
Content-Disposition: attachment; filename="signedkey.msg"
Content-Transfer-Encoding: 7bit

Version: 1

------------=_1409005317-7907-1
Content-Type: application/octet-stream; name="msg.asc"
Content-Disposition: inline; filename="msg.asc"
Content-Transfer-Encoding: 7bit

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1

hQIMA8hTZXMHCYaAAQ//XfTpsTvsdKaLNZ2TkYf/lDRtHo9DRjtSiFSYT4lWcFwF
9yxFzX8TL/L+7o2xZTZ7nXTOHAIMkgxi5KXnIDY5O8iNvrN9pqh3VmKDhB2GWHRD
yJGIBiQZ+bPavFWgiscWhy7FqhWfGi7XHBEbEIhfn9FBrziwgvLwkkC24ufUtnOM
/u39RDXrJKpi0GT0rMW+Ykg9vs6QNSdyDeBQRRS16KTRyljSGmRX/Q3y57WVw09v
(以下略)

メールの復号化

このメールをpgpコマンドで復号化します。

$ gpg -o msg mail.eml

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“NOKUBI Takatsugu <knok@daionet.gr.jp>”
4096ビットRSA鍵, ID 07098680作成日付は2009-09-11 (主鍵ID 9C0C1404)
gpg: このセッションでgpg-agentは無効です
パスフレーズを入力:

gpg: 4096-ビットRSA鍵, ID xxxxxxx, 日付2009-06-19に暗号化されました
      “Sender <sender@example.jp>”
gpg: 4096-ビットRSA鍵, ID 07098680, 日付2009-09-11に暗号化されました
      “NOKUBI Takatsugu <knok@daionet.gr.jp>”

上記コマンド例では、入力されたファイルをmsgというファイル名で復号化しています。復号化した内容は、caffの標準テンプレートであれば以下のようになります。

MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: multipart/mixed; boundary="----------=_1409005317-7907-0"

This is a multi-part message in MIME format...

------------=_1409005317-7907-0
Content-Type: text/plain; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: binary

Hi,

please find attached the user id
        NOKUBI Takatsugu <knok@daionet.gr.jp>
of your key B06662EC9C0C1404 signed by me.

If you have multiple user ids, I sent the signature for each user id
separately to that user id's associated email address. You can import
the signatures by running each through `gpg --import`.

Note that I did not upload your key to any keyservers. If you want this
new signature to be available to others, please upload it yourself.
Note that I did not upload your key to any keyservers. If you want this
new signature to be available to others, please upload it yourself.
With GnuPG this can be done using
        gpg --keyserver subkeys.pgp.net --send-key B06662EC9C0C1404

If you have any questions, don't hesitate to ask.

Regards,
Sender

------------=_1409005317-7907-0
Content-Type: application/pgp-keys;
 name="0xB06662EC9C0C1404.1.signed-by-0x2E8162547E37CE41.asc"
Content-Disposition: attachment;
 filename="0xB06662EC9C0C1404.1.signed-by-0x2E8162547E37CE41.asc"
Content-Transfer-Encoding: 7bit
Content-Description: PGP Key 0xB06662EC9C0C1404, uid NOKUBI Takatsugu
 <knok@daionet.gr.jp> (1), signed by 0x2E8162547E37CE41

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQINBEqq3iEBEAC2u1/t+pm5FSK//w9Qp/KxHW17rM+tOxqBNqVAZbFpOFu9Sa1i
U/C85ujEHKRIuLyESfzLg3gQmeojTritYPzG04s+bP+bbjujMkZZGhbrl4VjWA0L
DLO7uxwS/4scnBrlOONPaeRfP43T8a1hK2E0+8uIGhJIUt5fyW0o7Cs1MvL6T7UZ
YEwUW9lqciFhYEXr2zC6JYuofLytG1nUUFY4gcLWX/XSi1NUutL7Z5uJK3Ct8nlc
2AxFmPWkTYOcU6HpePQLlB7YGdldS8+41QkeDJm+w+ljqfI1vrVFT+SIHza8RiuW
(以下略)

署名の取り込み

この復号化されたファイルには、添付ファイルとして鍵への署名があります。本文中にも説明がありますが、gpg –importコマンドを実行することで署名を自分の鍵に取り込むことができます。

$  gpg --import msg
gpg: 鍵9C0C1404:“NOKUBI Takatsugu <knok@daionet.gr.jp>”新しい署名を1個
gpg:     処理数の合計: 1
gpg:       新しい署名: 1
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、classic信用モデル
gpg: 深さ: 0  有効性:   3  署名: 127  信用: 0-, 0q, 0n, 0m, 0f, 3u
gpg: 深さ: 1  有効性: 127  署名:  33  信用: 126-, 0q, 0n, 0m, 1f, 0u
gpg: 次回の信用データベース検査は、2016-07-04です

これを、届いたメールの数だけ実施します。さすがに毎回passphreaseを入力するのはしんどいので、gpg-agent等を使うと楽になります。gpg-agentはバージョン2系からついてきます。1.4系にはありません。エージェントの使い方はssh-agentとよく似ているので、そちらに慣れている人であれば楽に使えるでしょう。

私は以下のようなワンライナーで一括処理をするようにしています。

for i in *.eml; do gpg --yes -o msg $i ; gpg --import msg; done

公開キーサーバー上の鍵の更新

最後に、公開キーサーバーへ新しい(電子署名の増えた)鍵を送信して更新します。これは普段から公開キーサーバーに鍵を登録している人だけがすればよい作業なので、運用によっては不要な作業です。

$ gpg --keyserver pgp.nic.ad.jp --send-keys 9C0C1404
gpg: 鍵9C0C1404をhkpサーバーpgp.nic.ad.jpへ送信
$ gpg --keyserver keyring.debian.org --send-keys 9C0C1404
gpg: 鍵9C0C1404をhkpサーバーkeyring.debian.orgへ送信

以上で作業は終わりです。

By knok

I am a Debian Developer and a board member of Free Software Initiative (FSIJ).