綾小路龍之介の素人思考

[GnuPG] 分離署名の検証、公開鍵の入手

署名ファイルには、署名の歳に使われた秘密鍵に対応する公開鍵のIDが含まれている。IDから公開鍵を検索、入手して、公開鍵を用いて署名の検証を行う。

テスト用のファイルをGnuPGのダウンロードページから入手。分離署名と、これにより署名されたファイル。

$ wget ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.18.tar.bz2
--2012-02-11 05:44:29--  ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.18.tar.bz2
           => “gnupg-2.0.18.tar.bz2”
Resolving ftp.gnupg.org... 217.69.76.55
Connecting to ftp.gnupg.org|217.69.76.55|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /gcrypt/gnupg ... done.
==> SIZE gnupg-2.0.18.tar.bz2 ... 4016606
==> PASV ... done.    ==> RETR gnupg-2.0.18.tar.bz2 ... done.

    [                 <=>                ] 4,016,606    924K/s   in 4.2s

2012-02-11 05:44:37 (924 KB/s) - “gnupg-2.0.18.tar.bz2” saved [4016606]

$ wget ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.18.tar.bz2.sig
--2012-02-11 05:44:42--  ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.18.tar.bz2.sig
           => “gnupg-2.0.18.tar.bz2.sig”
Resolving ftp.gnupg.org... 217.69.76.55
Connecting to ftp.gnupg.org|217.69.76.55|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /gcrypt/gnupg ... done.
==> SIZE gnupg-2.0.18.tar.bz2.sig ... 287
==> PASV ... done.    ==> RETR gnupg-2.0.18.tar.bz2.sig ... done.

    [ <=>                                ] 287         --.-K/s   in 0.005s

2012-02-11 05:44:46 (62.2 KB/s) - “gnupg-2.0.18.tar.bz2.sig” saved [287]

分離署名を引数にして、gpgで検証する。以下のような結果。公開鍵が無いといわれる。分離署名にはどの公開鍵を使っているのかの情報が含まれることがわかる。分離署名と、署名されたファイルの両方を与えることも出来る。

$ gpg --verify gnupg-2.0.18.tar.bz2.sig
gpg: Signature made Thu 04 Aug 2011 11:58:18 PM JST using RSA key ID 4F25E3B6
gpg: Can't check signature: public key not found
$ gpg --verify gnupg-2.0.18.tar.bz2.sig gnupg-2.0.18.tar.bz2
gpg: Signature made Thu 04 Aug 2011 11:58:18 PM JST using RSA key ID 4F25E3B6
gpg: Can't check signature: public key not found

分離署名につけられた公開鍵のIDを元に、公開鍵を検索するには以下のようにする。keyserverは適当なものが選択されるが、引数に与えることも出来る。新しく登録された鍵は末端のサーバーまで同期が取れていない場合がある。

$ gpg --search-keys '4F25E3B6'
gpg: searching for "4F25E3B6" from hkp server keys.gnupg.net
(1) Werner Koch (dist sig)
   2048 bit RSA key 4F25E3B6, created: 2011-01-12
Keys 1-1 of 1 for "4F25E3B6".  Enter number(s), N)ext, or Q)uit > q
$ gpg --keyserver pgp.nic.ad.jp --search-keys '4F25E3B6'
gpg: searching for "4F25E3B6" from hkp server pgp.nic.ad.jp
(1) Werner Koch (dist sig)
   2048 bit RSA key 4F25E3B6, created: 2011-01-12
Enter number(s), N)ext, or Q)uit > q

分離署名を手に入れる。

$ gpg --recv-keys '4F25E3B6'
gpg: requesting key 4F25E3B6 from hkp server keys.gnupg.net
gpg: key 4F25E3B6: public key "Werner Koch (dist sig)" imported
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
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

再度検証を行う。Good signatureと言われ、検証に成功したことがわかる。

$ gpg --verify gnupg-2.0.18.tar.bz2.sig gnupg-2.0.18.tar.bz2
gpg: Signature made Thu 04 Aug 2011 11:58:18 PM JST using RSA key ID 4F25E3B6
gpg: Good signature from "Werner Koch (dist sig)"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6

リファレンス

  1. Download - GnuPG.org
  2. gpg manpage
  3. 3-2.GnuPGの署名を確認する [[GnuPGのチュートリアル]]

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-04-10T06:47:22+09:00
  2. Modified: 2010-04-10T06:47:22+09:00
  3. Generated: 2017-03-05T23:09:33+09:00