如何验证软件包的签名
我们的下载页面中每一个文件都附带了一个与软件包有着相同名字的文件, 其扩展名是“.asc”。例如,最新的 Windows 安装套件:dist/vidalia-bundles/vidalia-bundle-0.2.1.26-0.2.9.exe.asc。
这些 .asc 文件是 PGP 签名。通过它们你可以验证你所下载的文件确实由我们所提供。
当然,你需要首先知道我们的 PGP 密钥:如果不知道 PGP 密钥,你就无法证实签名确实来自我们。 我们使用的签名密钥是:
- Roger's (0x28988BF5) 通常对源代码文件进行签名。
- Nick's (0x165733EA, 或子密钥 0x8D29319A)
- Andrew's (0x31B0974B)
- Peter's (0x94C09C7F, 或子密钥 0xAFA44BDD)
- Matt's (0x5FA14861)
- Jacob's (0x9D0FACE4)
第一步:导入密钥
你能直接通过 GnuPG 导入密钥
gpg --keyserver subkeys.pgp.net --recv-keys 0x28988BF5
或搜索密钥
gpg --keyserver subkeys.pgp.net --search-keys 0x28988BF5
当你选择其中一个时,它将被加入你的密钥环(keyring)。
第二步:验证指纹
使用下列命令验证 PGP 指纹
gpg --fingerprint (在这里输入密钥 ID)
密钥的指纹应该是
pub 1024D/28988BF5 2000-02-27
Key fingerprint = B117 2656 DFF9 83C3 042B C699 EB5A 896A 2898 8BF5
uid Roger Dingledine <arma@mit.edu>
pub 3072R/165733EA 2004-07-03
Key fingerprint = B35B F85B F194 89D0 4E28 C33C 2119 4EBB 1657 33EA
uid Nick Mathewson <nickm@alum.mit.edu>
uid Nick Mathewson <nickm@wangafu.net>
uid Nick Mathewson <nickm@freehaven.net>
pub 1024D/31B0974B 2003-07-17
Key fingerprint = 0295 9AA7 190A B9E9 027E 0736 3B9D 093F 31B0 974B
uid Andrew Lewman (phobos) <phobos@rootme.org>
uid Andrew Lewman <andrew@lewman.com>
uid Andrew Lewman <andrew@torproject.org>
sub 4096g/B77F95F7 2003-07-17
pub 1024D/94C09C7F 1999-11-10
Key fingerprint = 5B00 C96D 5D54 AEE1 206B AF84 DE7A AF6E 94C0 9C7F
uid Peter Palfrader
uid Peter Palfrader <peter@palfrader.org>
uid Peter Palfrader <weasel@debian.org>
pub 1024D/5FA14861 2005-08-17
Key fingerprint = 9467 294A 9985 3C9C 65CB 141D AF7E 0E43 5FA1 4861
uid Matt Edman <edmanm@rpi.edu>
uid Matt Edman <Matt_Edman@baylor.edu>
uid Matt Edman <edmanm2@cs.rpi.edu>
sub 4096g/EA654E59 2005-08-17
pub 1024D/9D0FACE4 2008-03-11 [expires: 2010-03-11]
Key fingerprint = 12E4 04FF D3C9 31F9 3405 2D06 B884 1A91 9D0F ACE4
uid Jacob Appelbaum <jacob@appelbaum.net>
sub 4096g/D5E87583 2008-03-11 [expires: 2010-03-11]
(如果你想要进一步确认密钥的真实性,你应该在多个不同的地方进行检查; 更好的方法是通过对密钥进行签名建立一条到这些密钥的可信路径。)
第三步:验证下载的软件包
如果你使用的是 GnuPG,将下载的软件包连同 .asc 文件置于相同的目录中, 然后输入“gpg --verify (whatever).asc (whatever)”。 使用下面的命令,你将得到“Good 签名”或“BAD 签名”这样的结果:
gpg --verify tor-0.1.0.17.tar.gz.asc tor-0.1.0.17.tar.gz gpg: Signature made Wed Feb 23 01:33:29 2005 EST using DSA key ID 28988BF5 gpg: Good signature from "Roger Dingledine <arma@mit.edu>" gpg: aka "Roger Dingledine <arma@mit.edu>" 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: B117 2656 DFF9 83C3 042B C699 EB5A 896A 2898 8BF5
请注意这里有一条警告,因为你并未将相应密钥设为可信的。这意味着程序仅仅验证了签名由那一密钥生成。 用户需要自行判断密钥确实属于开发者。最好的方法是与他们见面,然后交换 PGP 指纹。 密钥也可以被签名。如果你查看 Roger 或 Nick 的密钥,会有其他人已经证实“这确实是 Roger/Nick”。 如果你信任那个第三方,则对 arma/nick 你也就有了某种程度的信任。
所以,你能放心地忽略那条警告,或者赋予密钥以某种程度的信任。
这里是一个 BAD 签名的例子,仅供参考。它意味着签名和文件内容不匹配:
gpg --verify tor-0.1.0.17.tar.gz.asc gpg: Signature made Wed Feb 23 01:33:29 2005 EST using DSA key ID 28988BF5 gpg: BAD signature from "Roger Dingledine <arma@mit.edu>"
如果你得到了和上面类似的消息,你就不能再信任文件的内容了。
如果你在 Debian 上运行 Tor,请阅读将这些密钥导入 apt 的说明。
