gnupgのソースの署名の検証

■gnupgの署名の検証
 「.dsc」で行っているが、「.asc」でも手順は同じ。
 パッケージも行えるが、ソースの方が「.dsc」ファイルがついてくるので簡単。
 
$ sudo apt-get source --download-only gnupg
$ ls gnupg_1.4.10*
$ ls gnupg_1.4.12*
gnupg_1.4.12-7.debian.tar.gz  gnupg_1.4.12-7.dsc  gnupg_1.4.12.orig.tar.gz

$ gpg -d gnupg_1.4.12-7.dsc
Format: 3.0 (quilt)
Source: gnupg
Binary: gnupg, gnupg-curl, gpgv, gnupg-udeb, gpgv-udeb, gpgv-win32
Architecture: any all
Version: 1.4.12-7
Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org>
Uploaders: Sune Vuorela <debian@pusling.com>, Daniel Leidert <dleidert@debian.org>, Thijs Kinkhorst <thijs@debian.org>
Homepage: http://www.gnupg.org
Standards-Version: 3.9.3
Vcs-Browser: http://svn.debian.org/wsvn/pkg-gnupg/gnupg/
Vcs-Svn: svn://svn.debian.org/svn/pkg-gnupg/gnupg/trunk/
Build-Depends: debhelper (>> 7), libz-dev, libldap2-dev, libbz2-dev, libusb-dev [!hurd-i386], libreadline-dev, file, gettext, libcurl4-gnutls-dev
Build-Depends-Indep: mingw-w64
Package-List:
 gnupg deb utils important
 gnupg-curl deb utils optional
 gnupg-udeb udeb debian-installer extra
 gpgv deb utils important
 gpgv-udeb udeb debian-installer extra
 gpgv-win32 deb utils extra
Checksums-Sha1:
 790587e440ec7d429b120db7a96a237badc638fd 4939171 gnupg_1.4.12.orig.tar.gz
 ff054dc49db8081005e25c06261945f4d1ec5c3e 92800 gnupg_1.4.12-7.debian.tar.gz
Checksums-Sha256:
 bb94222fa263e55a5096fdc1c6cd60e9992602ce5067bc453a4ada77bb31e367 4939171 gnupg_1.4.12.orig.tar.gz
 95c339745e3fde8ad21aad39c1b83ce318fea348cab2d6f3437ef1ac7df549ab 92800 gnupg_1.4.12-7.debian.tar.gz
Files:
 f9a65ccd7166d3fdb084454cf7427564 4939171 gnupg_1.4.12.orig.tar.gz
 8d52378d6cebc32ec40c9726f120cf74 92800 gnupg_1.4.12-7.debian.tar.gz

gpg: 20130103043300秒 JSTにRSA鍵ID 401DAC04で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません

■公開鍵を取得

$ gpg --keyserver pgp.mit.edu --recv-keys 401DAC04
gpg: 鍵401DAC04をhkpからサーバーpgp.mit.eduに要求
gpg: 鍵E1C21845: 公開鍵“Thijs Kinkhorst <thijs@kinkhorst.com>”を読み込みました
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   1  信用: 0-, 0q, 0n, 0m, 0f, 1u
gpg: 深さ: 1  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 1m, 0f, 0u
gpg:     処理数の合計: 1
gpg:           読込み: 1  (RSA: 1)

■署名の確認
 1050個もの公開鍵が不足している。

$ gpg --check-sigs 401DAC04
pub   4096R/E1C21845 2007-01-25
uid                  Thijs Kinkhorst <thijs@kinkhorst.com>
sig!3        E1C21845 2007-01-25  Thijs Kinkhorst <thijs@kinkhorst.com>
sig!3        E1C21845 2007-01-25  Thijs Kinkhorst <thijs@kinkhorst.com>
uid                  Thijs Kinkhorst <thijs@uvt.nl>
sig!3        E1C21845 2009-07-18  Thijs Kinkhorst <thijs@kinkhorst.com>
uid                  Thijs Kinkhorst <thijs@debian.org>
sig!3        E1C21845 2007-01-25  Thijs Kinkhorst <thijs@kinkhorst.com>
uid                  Thijs Kinkhorst <kink@squirrelmail.org>
sig!3        E1C21845 2007-01-25  Thijs Kinkhorst <thijs@kinkhorst.com>
sub   2048R/401DAC04 2012-06-16 [満了: 2014-06-16]
sig!         E1C21845 2012-06-16  Thijs Kinkhorst <thijs@kinkhorst.com>
sub   2048R/1001EBD3 2012-06-16 [満了: 2014-06-16]
sig!         E1C21845 2012-06-16  Thijs Kinkhorst <thijs@kinkhorst.com>

鍵がないため1050個の署名を検査しません

■Debian開発者の公開鍵を導入、インポートする
 ※aptで検証するわけではない点に注意。(APTでの検証はapt-key)
  バイナリ形式で、982も処理するので結構時間がかかる。

$ apt-cache search ^debian-keyring
debian-keyring - Debian 開発者の GnuPG 鍵集

$ sudo apt-get install -y debian-keyring
$ dpkg -L debian-keyring | grep "gpg"
/usr/share/keyrings/debian-nonupload.gpg
/usr/share/keyrings/debian-role-keys.gpg
/usr/share/keyrings/debian-maintainers.gpg
/usr/share/keyrings/debian-keyring.gpg

$ gpg --import /usr/share/keyrings/debian-keyring.gpg
...
gpg:     処理数の合計: 982
gpg:           読込み: 980  (RSA: 320)
gpg:         変更なし: 2

■FTP GPG公開鍵をインポートする。

$ gpg --import /usr/share/keyrings/debian-role-keys.gpg
...
gpg:     処理数の合計: 9
gpg:           読込み: 9  (RSA: 3)
gpg: WARNING: digest algorithm MD5 is deprecated
gpg: please see http://www.gnupg.org/faq/weak-digest-algos.html for more information
gpg: 絶対的に信用する鍵が見つかりません

■上記を自動的に設定する方法もある。

$ grep "^#[a-z].*uto-key" ~/.gnupg/gpg.conf
#keyserver-options auto-key-retrieve
#auto-key-locate cert pka ldap hkp://subkeys.pgp.net

■署名の検証

$  gpg --verify gnupg_1.4.12-7.dsc
gpg: 20130103043300秒 JSTにRSA鍵ID 401DAC04で施された署名
gpg: “Thijs Kinkhorst <thijs@kinkhorst.com>”からの正しい署名
gpg:                 別名“Thijs Kinkhorst <thijs@uvt.nl>”
gpg:                 別名“Thijs Kinkhorst <thijs@debian.org>”
gpg:                 別名“Thijs Kinkhorst <kink@squirrelmail.org>”
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: E0D3 FAAA 6F50 A5DA 9D5B  2938 3396 1588 E1C2 1845
副鍵の指紋: 7803 55B5 EA6B FC82 35A9  9C4B 56F6 1A79 401D AC04

■この公開鍵を信頼すると表示されなくなる。

$ gpg --fingerprint | grep -B 1 "E0D3 FAAA 6F50 A5DA 9D5B  2938 3396 1588 E1C2 1845"
pub   4096R/E1C21845 2007-01-25
                 指紋 = E0D3 FAAA 6F50 A5DA 9D5B  2938 3396 1588 E1C2 1845

$ gpg --list-key E1C21845
pub   4096R/E1C21845 2007-01-25
uid                  Thijs Kinkhorst <thijs@kinkhorst.com>
uid                  Thijs Kinkhorst <thijs@uvt.nl>
uid                  Thijs Kinkhorst <thijs@debian.org>
uid                  Thijs Kinkhorst <kink@squirrelmail.org>
sub   2048R/401DAC04 2012-06-16 [満了: 2014-06-16]
sub   2048R/1001EBD3 2012-06-16 [満了: 2014-06-16]

$ gpg --fingerprint E1C21845
pub   4096R/E1C21845 2007-01-25
                 指紋 = E0D3 FAAA 6F50 A5DA 9D5B  2938 3396 1588 E1C2 1845
uid                  Thijs Kinkhorst <thijs@kinkhorst.com>
uid                  Thijs Kinkhorst <thijs@uvt.nl>
uid                  Thijs Kinkhorst <thijs@debian.org>
uid                  Thijs Kinkhorst <kink@squirrelmail.org>
sub   2048R/401DAC04 2012-06-16 [満了: 2014-06-16]
sub   2048R/1001EBD3 2012-06-16 [満了: 2014-06-16]

$ gpg --list-sig E1C21845 | grep "201[3-9]-\|20[2-9][0-9]\-"
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sub   2048R/401DAC04 2012-06-16 [満了: 2014-06-16]
sub   2048R/1001EBD3 2012-06-16 [満了: 2014-06-16]

■自分の鍵でローカル署名
 4つの公開鍵に署名。

$ gpg --lsign-key 401DAC04

pub  4096R/E1C21845  作成: 2007-01-25  満了: 無期限      利用法: SC
                     信用: 未知の     有効性: 未知の
sub  2048R/DCBA43DF  作成: 2007-01-25  満了: 2009-01-25  利用法: S
sub  2048R/7AB399FF  作成: 2007-01-25  満了: 2009-01-25  利用法: E
This key was revoked on 2008-06-16 by RSA key E1C21845 Thijs Kinkhorst <thijs@kinkhorst.com>
sub  2048R/EC5DCE28  作成: 2008-06-08  失効: 2008-06-16  利用法: S
This key was revoked on 2008-06-16 by RSA key E1C21845 Thijs Kinkhorst <thijs@kinkhorst.com>
sub  2048R/88CC9563  作成: 2008-06-08  失効: 2008-06-16  利用法: E
sub  2048R/8C55A01C  作成: 2008-06-15  満了: 2010-06-15  利用法: S
sub  2048R/435434E1  作成: 2008-06-15  満了: 2010-06-15  利用法: E
sub  2048R/B6897E7B  作成: 2010-06-15  満了: 2012-06-14  利用法: S
sub  2048R/3861CF70  作成: 2010-06-15  満了: 2012-06-14  利用法: E
sub  2048R/401DAC04  作成: 2012-06-16  満了: 2014-06-16  利用法: S
sub  2048R/1001EBD3  作成: 2012-06-16  満了: 2014-06-16  利用法: E
[ unknown] (1). Thijs Kinkhorst <thijs@kinkhorst.com>
[ unknown] (2)  Thijs Kinkhorst <thijs@uvt.nl>
[ unknown] (3)  Thijs Kinkhorst <thijs@debian.org>
[ unknown] (4)  Thijs Kinkhorst <kink@squirrelmail.org>

本当に全ユーザーIDに署名しますか? (y/N)y

pub  4096R/E1C21845  作成: 2007-01-25  満了: 無期限      利用法: SC
                     信用: 未知の     有効性: 未知の
 主鍵の指紋: E0D3 FAAA 6F50 A5DA 9D5B  2938 3396 1588 E1C2 1845

     Thijs Kinkhorst <thijs@kinkhorst.com>
     Thijs Kinkhorst <thijs@uvt.nl>
     Thijs Kinkhorst <thijs@debian.org>
     Thijs Kinkhorst <kink@squirrelmail.org>

本当にこの鍵にあなたの鍵“labunix <labunix@lpic303.test.local>”で署名してよいですか
(D289663B)

署名は、書出し不可に設定されます。

本当に署名しますか? (y/N) y

次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“labunix <labunix@lpic303.test.local>2048ビットRSA鍵, ID D289663B作成日付は2013-05-27

パスフレーズを入力:

$  gpg --verify gnupg_1.4.12-7.dsc
gpg: 20130103043300秒 JSTにRSA鍵ID 401DAC04で施された署名
gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   2  信用: 0-, 0q, 0n, 0m, 0f, 1u
gpg: 深さ: 1  有効性:   2  署名:  32  信用: 1-, 0q, 0n, 1m, 0f, 0u
gpg: 次回の信用データベース検査は、2019-03-22です
gpg: “Thijs Kinkhorst <thijs@kinkhorst.com>”からの正しい署名
gpg:                 別名“Thijs Kinkhorst <thijs@uvt.nl>”
gpg:                 別名“Thijs Kinkhorst <thijs@debian.org>”
gpg:                 別名“Thijs Kinkhorst <kink@squirrelmail.org>”

■ローカル署名のLフラグが4つ確認できる。

$ gpg --list-sig E1C21845 | grep "201[3-9]-\|20[2-9][0-9]\-"

sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig   L      D289663B 2013-05-27  labunix <labunix@lpic303.test.local>
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig   L      D289663B 2013-05-27  labunix <labunix@lpic303.test.local>
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig   L      D289663B 2013-05-27  labunix <labunix@lpic303.test.local>
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig 2        24FA3FE2 2013-04-24  [ユーザーIDが見つかりません]
sig   L      D289663B 2013-05-27  labunix <labunix@lpic303.test.local>
sub   2048R/401DAC04 2012-06-16 [満了: 2014-06-16]
sub   2048R/1001EBD3 2012-06-16 [満了: 2014-06-16]

■ローカル署名の削除と署名の再読み込み

$ gpg --delete-key thijs@uvt.nl
gpg (GnuPG) 1.4.12; Copyright (C) 2012 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  4096R/E1C21845 2007-01-25 Thijs Kinkhorst <thijs@kinkhorst.com>

この鍵を鍵輪から削除しますか? (y/N) y

$ gpg --delete-keys thijs@kinkhorst.com
$ gpg --delete-keys thijs@debian.org
$ gpg --delete-keys kink@squirrelmail.org

$ gpg --import /usr/share/keyrings/debian-keyring.gpg
...
gpg:     処理数の合計: 982
gpg:           読込み: 2  (RSA: 2)
gpg:         変更なし: 980
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u

$  gpg --list-sig E1C21845 | grep "201[3-9]-\|20[2-9][0-9]\-"

sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sig          44E7B6FD 2013-01-19  [ユーザーIDが見つかりません]
sig          D745722B 2013-02-21  [ユーザーIDが見つかりません]
sub   2048R/401DAC04 2012-06-16 [満了: 2014-06-16]
sub   2048R/1001EBD3 2012-06-16 [満了: 2014-06-16]

■余談だが、apt-keyによる公開鍵のリスト

$ sudo apt-key list
/etc/apt/trusted.gpg.d//debian-archive-squeeze-automatic.gpg
------------------------------------------------------------
pub   4096R/473041FA 2010-08-27 [満了: 2018-03-05]
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d//debian-archive-squeeze-stable.gpg
---------------------------------------------------------
pub   4096R/B98321F9 2010-08-07 [満了: 2017-08-05]
uid                  Squeeze Stable Release Key <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d//debian-archive-wheezy-automatic.gpg
-----------------------------------------------------------
pub   4096R/46925553 2012-04-27 [満了: 2020-04-25]
uid                  Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d//debian-archive-wheezy-stable.gpg
--------------------------------------------------------
pub   4096R/65FFB764 2012-05-08 [満了: 2019-05-07]
uid                  Wheezy Stable Release Key <debian-release@lists.debian.org>

■apt-keyでのフィンガープリント

$ sudo apt-key finger
/etc/apt/trusted.gpg.d//debian-archive-squeeze-automatic.gpg
------------------------------------------------------------
pub   4096R/473041FA 2010-08-27 [満了: 2018-03-05]
                 指紋 = 9FED 2BCB DCD2 9CDF 7626  78CB AED4 B06F 4730 41FA
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d//debian-archive-squeeze-stable.gpg
---------------------------------------------------------
pub   4096R/B98321F9 2010-08-07 [満了: 2017-08-05]
                 指紋 = 0E4E DE2C 7F3E 1FC0 D033  800E 6448 1591 B983 21F9
uid                  Squeeze Stable Release Key <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d//debian-archive-wheezy-automatic.gpg
-----------------------------------------------------------
pub   4096R/46925553 2012-04-27 [満了: 2020-04-25]
                 指紋 = A1BD 8E9D 78F7 FE5C 3E65  D8AF 8B48 AD62 4692 5553
uid                  Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d//debian-archive-wheezy-stable.gpg
--------------------------------------------------------
pub   4096R/65FFB764 2012-05-08 [満了: 2019-05-07]
                 指紋 = ED6D 6527 1AAC F0FF 15D1  2303 6FB2 A1C2 65FF B764
uid                  Wheezy Stable Release Key <debian-release@lists.debian.org>

■keyringパッケージによるアップデート

$ sudo apt-key update
gpg: 鍵B98321F9:“Squeeze Stable Release Key <debian-release@lists.debian.org>”変更なし
gpg: 鍵473041FA:“Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>”変更なし
gpg: 鍵65FFB764:“Wheezy Stable Release Key <debian-release@lists.debian.org>”変更なし
gpg: 鍵46925553:“Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>”変更なし
gpg:     処理数の合計: 4
gpg:         変更なし: 4