下载软件安装包时,很多人只看哈希值,或者干脆什么都不看。更稳妥的做法,是同时验证发布者的 PGP 签名。
PGP 验签主要解决两件事:
- 文件确实由对应发布者签名
- 文件在下载后没有被改动
它不能直接证明“这个软件一定安全”,但至少能证明你拿到的文件和发布者签出的版本一致。
你需要准备什么
开始之前,先确认你手里有下面几样东西:
- 待验证的文件
- 对应的签名文件,常见扩展名如
.asc、.sig、.gpg - 发布者公钥
gpg工具
如果本机还没有 gpg:
# macOS
brew install gnupg
# Debian / Ubuntu
sudo apt update
sudo apt install -y gnupg
通用验签流程
1. 获取发布者公钥
优先从以下来源拿公钥:
- 项目官网
- 官方仓库
- 官方 release 页面
不要只看短 Key ID。真正该核对的是完整指纹(fingerprint)。
2. 导入公钥
gpg --import public-key.asc
3. 核对指纹
gpg --fingerprint
这一步一定要和官网公布的指纹逐字符比对。只要指纹对不上,后面的 Good signature 都没有意义。
4. 验证签名
gpg --verify file.asc file
对于 detached signature,通常就是这种写法。
5. 读取结果
常见结果可以这样理解:
Good signature:签名正确,文件未被修改BAD signature:签名不匹配,文件可能损坏或被替换Can't check signature: No public key:你还没导入对应公钥This key is not certified with a trusted signature:通常表示本地信任链未建立,不等于签名错误;前提是你已经自己核对过指纹
一个 qBittorrent 示例
假设你要验证 qBittorrent 5.2.0 的 macOS 安装包:
curl -L https://github.com/qbittorrent/qBittorrent/raw/master/5B7CC9A2.asc -o /tmp/qbittorrent-5B7CC9A2.asc
gpg --import /tmp/qbittorrent-5B7CC9A2.asc
gpg --fingerprint 5B7CC9A2
gpg --verify ~/Downloads/qbittorrent-5.2.0.dmg.asc ~/Downloads/qbittorrent-5.2.0.dmg
关键不是把命令背下来,而是理解顺序:
- 先拿公钥
- 核对指纹
- 再验证签名
如果顺序反了,验签就会流于形式。
常见误区
只验证 SHA-256,不验证签名
哈希值当然有用,但它只能证明“你下载的文件和你看到的哈希一致”。如果哈希本身来自不可信来源,这一步并不够。
只看短 Key ID
短 ID 存在碰撞风险。至少核对完整指纹。
看到 Good signature 就完全放心
还不够。你仍然需要确认这个公钥确实属于目标项目,而不是来自第三方镜像站或随手转存的页面。
一句话总结
PGP 验签不是“安全感装饰品”,它是下载链路里最基本的一道验证。只要一个项目提供了签名和公钥,就值得花几十秒把这件事做完整。