テスト用のファイルを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