GNU Privacy Guard(GnuPG或GPG)是一个密码学软件,用于加密、签名通信内容及管理非对称密码学的密钥。GnuPG是自由软件,遵循IETF订定的OpenPGP技术标准设计,并与PGP保持兼容。
GnuPG是自由软件基金会的GNU计划的一部分,曾受德国政府资助。
以上是关于GPG的维基百科简介。
一般情况下,我们通常使用GPG来对发布的程序进行签名;以及验证程序的签名是否正常,以确认程序来源的可靠性。
验证程序签名
虽然大多数人没有这个习惯,但我们应当在从一个站点下载完程序后,对其进行安全性验证。一般常用的文件安全验证有如下几种方式:
- 验证文件哈希值,MD5/SHA256 等
- 查看 Windows执行文件 数字签名
- 文件 GPG签名 验证
下面来介绍下这几种方式:
验证文件哈希值
部分从软件/程序官网下载的文件,会提供相对应文件的MD5/SHA256值:
例如,从Python官方下载的安装包:
验证很简单,计算我们下载完成的文件MD5,跟官方提供的进行对比即可,如一致可证明内容未没篡改。
Linux:
md5sum filename
Windows:
windows需要使用第三方工具。
查看Windows执行文件的数字签名
一般作为公司正式发布的Windows安装软件,都会为其添加签名,即满足Windows内部的安全机制,也证明安装程序为未被篡改的受信任发布者所发布的
GPG签名验证
从上面截图可以看出,Python的发布文件同样支持GPG签名验证。
要验证GPG签名,首先要导入官方提供的签名公钥:
在Python的总下载页面可以找到其所有发布的GPG公钥文件.
选择使用自己下载程序的对应版本的公钥即可,同时提供的还有一个叫key id的字符串,也就是公钥的“指纹”,当我们导入完公钥,可以以此来验证公钥的合法性:
wget https://keybase.io/nad/pgp_keys.asc?fingerprint=xxx -O pgp_keys.asc gpg --import pgp_keys.asc gpg --list-keys gpg --fingerprint AA65421D
下载签名文件,并验证被签名的文件:
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz.asc gpg --verify Python-3.7.4.tgz.asc Python-3.7.4.tgz
当看到Good signature from xx时,说明主机中有一个公钥对此文件的签名验证成功。