利用PGP检验文件完整性

验证安装软件包完整性和真实性的另一个方法是使用加密签名。这比使用MD5校验和更可靠,但是需要更多的工作。Linux、类UNIX系统下用pgp就很简单不,此处不再做介绍,下面主要介绍在Windows系统下利用PGP检验文件完整性,关于安装GunPG部份请参考文章:用GnuPG加密解密你的重要数据!

下面我们用GnuPG(GNU Privacy Guard)对下载litecoin-0.8.7.2-win32-setup.exe软件包进行签名检验:

从官网下载源文件和签名文件:

litecoin-0.8.7.2-win32-setup.exe

litecoin-0.8.7.2-win32-setup.exe.asc

执行如下命令:

C:\Program Files\GNU\GnuPG>gpg.exe –verify litecoin-0.8.7.2-win32-setup.exe.asc

你会发现类似下面的结果:
gpg: 于 06/14/14 18:25:12 创建的签名,使用 RSA,钥匙号 969276F5
gpg: 无法检查签名:找不到公钥

出现这个很正常, 因为我们没有这个文件的公钥. 从输出信息我们知道我们需要 969276F5的公钥.

C:\Program Files\GNU\GnuPG>gpg.exe –keyserver subkeys.pgp.net –recv-keys 969276F5

–keyserver 后面的是pgp的公钥服务器, 这里我们用mit的. 

–recv-key 后面时我们要获取的公钥ID, 这里时969276F5

你会得到类似的结果:

gpg: 下载密钥‘969276F5’,从 hkp 服务器 subkeys.pgp.net
gpg: 密钥 969276F5:公钥“Litecoin Dev Team (Build Signing Key June 2013) <[email protected]>”已导入
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
gpg: 合计被处理的数量:1
gpg:           已导入:1  (RSA: 1)

然后执行:

C:\Program Files\GNU\GnuPG>gpg.exe –verify litecoin-0.8.7.2-win32-setup.exe.asc litecoin-0.8.7.2-win32-setup.exe

得到下面的结果:
gpg: 于 06/14/14 18:25:12 创建的签名,使用 RSA,钥匙号 969276F5
gpg: 完好的签名,来自于“Litecoin Dev Team (Build Signing Key June 2013) <[email protected]>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg:       没有证据表明这个签名属于它所声称的持有者。
主钥指纹: DC38 0DA4 3082 F163 78C9  7414 C37E 4723 9692 76F5

我们注意到第二行: “gpg: 完好的签名” 则证明文件是完整的.