如果你想要同时验证下载文件的可靠性(拥有者)和完整性(内容),你需要依赖于加密签名
GnuPG(GNU Privacy Guard)来检查文件的可靠性和完整性。
GPG除了可用于信息加密和解密外,还是一个很好的签名算法,能有效的校验文件的完整性
在 Debian、Ubuntu 和其他 Debian 衍生版上:
sudo apt install gnupg
在 Fedora、CentOS 或者 RHEL 上:
sudo yum install gnupg
$ gpg --gen-key ... ... pub rsa2048 2018-09-08 [SC] [expires: 2020-09-07] 8A943ACBD8268ED61FB3F51A1DA57D31E159DBD6 8A943ACBD8268ED61FB3F51A1DA57D31E159DBD6 uid Rick Xu <rickxu1989@gmail.com> sub rsa2048 2018-09-08 [E] [expires: 2020-09-07]
一旦 key 生成完毕后,公钥和私钥会存储在 ~/.gnupg 目录
xhxu-mac:test-gpg xhxu$ ls -l ~/.gnupg/ total 32 srwx------ 1 xhxu 254449427 0 Sep 9 00:05 S.gpg-agent srwx------ 1 xhxu 254449427 0 Sep 9 00:05 S.gpg-agent.browser srwx------ 1 xhxu 254449427 0 Sep 9 00:05 S.gpg-agent.extra srwx------ 1 xhxu 254449427 0 Sep 9 00:05 S.gpg-agent.ssh drwx------ 4 xhxu 254449427 128 Sep 9 00:05 openpgp-revocs.d drwx------ 6 xhxu 254449427 192 Sep 9 00:05 private-keys-v1.d -rw-r--r-- 1 xhxu 254449427 2888 Sep 9 00:05 pubring.kbx -rw------- 1 xhxu 254449427 1320 Sep 9 00:05 trustdb.gpg
记住key ID
gpg --import signing-key.asc
导入的公钥的指纹
gpg --fingerprint KEY_ID
看到 key 的指纹字符串。把这个和网站上显示的指纹做对比。如果匹配,你可以选择信任这个文件拥有者的公钥。
一旦你决定相信这个公钥(不是一定要选择相信才能继续),你可以通过编辑 key 来设置信任级别:
gpg --edit-key KEY_ID
检查导入的 key 列表:
gpg --list-keys
gpg --verify FILE_KEY FILE_NAME
如果命令的输出包含了 “Good signature from <文件所属者>”,那么下载的 sha256 文件就被成功地认证和核实了。如果下载的文件的任何地方在签名后被篡改了,那么验证就会失败。
如果有 .asc 文件,即文件拥有者分别公布了一个文件和它的 asc 签名文件
gpg --verify file.ext.asc file.ext
gpg --sign-key KEY_ID