微信搜索​我吃你家米了​关注公众号

验证软件的PGP签名_d3

PGP,Pretty Good Privacy

是一种公钥加密算法

PGP常被用来加密和签名通信数据

我们可以使用PGP来验证我们从网站上下载下来的软件没有被篡改

软件的作者会使用PGP软件对他们软件进行签名,这样你就可以在下载后验证软件的完整性

因为PGP是非对称加密,作者会用自己的私钥进行软件的签名,因此我们需要先获取到作者的公钥,一般网站会直接提供

然后我们需要检查该公钥的指纹以确保它是正确的公钥

然后将正确的公钥导入到PGP的keyring中

然后下载软件的签名文件

然后使用公钥验证软件的签名,如果签名正确,那么就说明软件没有被篡改

下面是一个例子:验证VeraCrypt(一款加密软件)的签名

​软件代码托管地址​

​软件官网​

首先下载二进制文件

​wget https://launchpadlibrarian.net/289850375/veracrypt-1.19-setup.tar.bz2​

然后下载PGP公钥和软件的签名文件

​wget https://www.idrix.fr/VeraCrypt/VeraCrypt_PGP_public_key.asc​

​wget https://launchpad.net/veracrypt/trunk/1.19/+download/veracrypt-1.19-setup.tar.bz2.sig​

我们需要先将我们下载的公钥导入到PGP的keyring中

​gpg --import VeraCrypt_PGP_public_key.asc​

gpg: key 821ACD02680D16DE: 1 signature not checked due to a missing key
gpg: key 821ACD02680D16DE: public key "VeraCrypt Team (2018 - Supersedes Key ID=0x54DDD393) <veracrypt@idrix.fr>" imported
gpg: Total number processed: 1
gpg: imported: 1
gpg: no ultimately trusted keys found

记住上面的keyid ​​821ACD02680D16DE​

然后检测一下公钥的指纹是否和网站上的一致

​gpg --fingerprint 821ACD02680D16DE​

pub   rsa4096 2018-09-11 [SC]
5069 A233 D55A 0EEB 174A 5FC3 821A CD02 680D 16DE
uid [ unknown] VeraCrypt Team (2018 - Supersedes Key ID=0x54DDD393) <veracrypt@idrix.fr>
sub rsa4096 2018-09-11 [E]
sub rsa4096 2018-09-11 [A]

我发现这个指纹和官网给出的并不一致,而且谷歌浏览器提示我该网站存在危险,所以公钥很有可能是被篡改了

​针对这个地方,我跟我的同事探讨了一下,然后我进入​​软件的官网​​,在上面我看到了新的公钥指纹5069A233D55A0EEB174A5FC3821ACD02680D16DE,这个和我们上面下载的公钥的指纹是一致的,所以结论就是​​代码托管网站​​上提供的公钥指纹是16年的老公钥,而给出的公钥链接是18年的新公钥​

还有一种方法去下载公钥​,我们可以直接去PGP的服务器上下载公钥,根据网站上提供的公钥ID进行下载

配置文件​​~/.gnupg/gpg.conf​​,在这里可以更改PGP服务器地址

​gpg --recv-keys 0x54DDD393​

gpg: key EB559C7C54DDD393: 260 signatures not checked due to missing keys
gpg: key EB559C7C54DDD393: public key "VeraCrypt Team <veracrypt@idrix.fr>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1

这个的指纹和网站上提供的就是一样的

root@localhost:~# gpg --fingerprint EB559C7C54DDD393
pub rsa4096 2014-06-27 [SCE]
993B 7D7E 8E41 3809 828F 0F29 EB55 9C7C 54DD D393
uid [ unknown] VeraCrypt Team <veracrypt@idrix.fr>

最后使用导入进去的公钥进行验证

root@localhost:~# gpg --verify veracrypt-1.19-setup.tar.bz2.sig veracrypt-1.19-setup.tar.bz2
gpg: Signature made Mon 17 Oct 2016 12:58:47 PM EDT
gpg: using RSA key EB559C7C54DDD393
gpg: Good signature from "VeraCrypt Team <veracrypt@idrix.fr>" [unknown]
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: 993B 7D7E 8E41 3809 828F 0F29 EB55 9C7C 54DD D393