GPG:签名与验证(验证 Firefox 安装包 & 发送签名邮件)

Published: 2022-04-22

Tags: PGP

本文总阅读量

前提

  1. 了解最基本的 PGP、对称加密、GPG 概念。
  2. 会生成 PGP 密钥。

文本加解密

加密

使用接收者的公钥来加密

gpg --recipient F70EEB62 --output demo.en.txt --encrypt demo.txt

demo.en.txt 即为加密后的文件,接收者可以用他的私钥解密。

解密

gpg --decrypt --output demo.de.txt demo.en.txt

文件签名与验证

如果你要发送邮件,使用<内容+ASCII签名>是个不错的方案,如果要为你的软件签名,那么建议使用<独立的二进制签名>文件提供下载。

签名

有时我们不需要将内容加密,而是要他人能够核对是有我发布的,这时对内容进行签名。

为文件签名

gpg --sign demo.txt

demo.txt.gpg(内容+二进制签名)

生成的文件为二进制格式,无法阅读,如果需要粘贴到文本或邮件,可以生成 ASCII 格式的签名文件。

gpg --clearsign demo.txt

demo.txt.asc(内容+ASCII签名)

如果你需要文件与签名文件分开,例如分发一个软件,那么使用如下命令

gpg --detach-sign demo.txt

demo.txt.sig(独立的二进制签名)

如果想采用 ASCII 码形式,要加上 armor 参数

gpg --armor --detach-sign demo.txt

demo.txt.asc(独立的ASCII 签名)

这样文件与 ASCII 签名就独立开来了

指定签名的私钥

当本地有多个密钥时,可以这样指定私钥

gpg --default-key 91790C152CE950BF34C5D691F9C857B1F70EEB62 --clearsign demo.txt

验证

gpg --verify demo.txt.asc demo.txt

# gpg --verify demo.txt.sig demo.txt

示例一:验证 Firefox 安装包

掌握了基本的签名及验证方式,我们就可以对一些开源软件进行验证。

以,Firefox 的 FTP 下载地址为例:https://ftp.mozilla.org/pub/firefox/releases/99.0b8/

在这个页面可以看到如下内容

主要关注这几个文件

  • KEY
  • SHA256SUMS
  • SHA256SUMS.asc

其中 KEY 是 Mozilla 用于发布软件的公钥。

SHA256SUMS 是一个列表,保存着 FTP 供下载文件的哈希信息,用户下载的程序校验哈希值等于这里列出的哈希就表示文件没有被篡改和替换,下载途中也没有损坏。

下载 win64/zh-CN/Firefox Setup 99.0b8.exe

校验

sha256sum Firefox\ Setup\ 99.0b8.exe

没有问题,SHA256SUM 哈希值相同。

那么还有个问题,如果 FTP 中的 SHA256SUMS 文件也一并被篡改了,那同样不能保证软件的安全。

接下来 KEY 文件派上用场了,将 KEY 中的内容复制,我使用的是 GPG Keychain 软件,打开后即可添加上 Mozilla 公钥。

再将 SHA256SUMS.txtSHA256SUMS.asc 文件下载到本地

通过 gpg --verify 命令验证,可知 SHA256SUMS 文件确为 Mozilla 创建,未被篡改。

那 KEY 文件中的公钥不会被替换吗?可以替换,但我们可以进行多方确认。

Mozilla 的公钥我们除了从 FTP 获取,也可以通过其它途径核对。

渠道1:通过 Google 搜索 “mozilla release pgp public key” 能够查询

渠道2:通过公钥公共服务器查询

例如访问 https://keys.openpgp.org/search?q=release@mozilla.com

可以获取到 Mozilla 的公钥指纹。

这样,可以确保我们下载的 Firefox 是安全的。

示例二:发送一封签名内容的 Email

在学习 PGP 知识时,看到一篇文章,作者留下了他的公钥和邮箱📮

现在给他发送一封加密邮件:https://blog.xavierskip.com/2021-02-22-openpgp/

浏览器插件推荐:Mailvelope

导入接收方的公钥

切换到 Encrypt 标签,选择接受者的邮箱,上传文件或者输入文本

将加密后内容发送给这位同学即可~

也欢迎给我发送一封签名邮件。这是我的邮箱📮:kissbug8720@gmail.com

PGP 公钥

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBGJWwG8BEACmBEgKp97HZ/t8UIWh1TKD/VbmCYaiJgehzGTdkeQkiXHzTXtJ
DVdSpcZ7qxz1PBpMGb7BbtY4NPi7QiO4GgmPCjXX/PNgWxCMADgfFikx/X3hB3j+
kA1yOiAxaCbwgFFYIMkzYrgPQbwdyF0zi/QX3lZQcqKS7pJs9flKS9v3r44qMRVN
g4zZaM3WX4QLX5AKreydV51RVkijBrzMIoe7Euft7JJNwvhHzTbZmk4G/DOkQd8H
6xpeSlXNz9z8fTeChWeAgkbcqvbXUVCjBgye2wRx/WRUiEMvsDcfSoF7F9gOLYSr
uRox96i2f6c35xP5cATdl93szGyBWOR6uDRn+OVFdNR1ChzvLar9CI8M093bwTBx
4NxGZDuiFJDKlwT9PNRfZ0OemYSpHFBud4Oagu7eWI20Gp60k5qRMbu+eItWJouN
nDFWin/VTzyp5fKz3dNYVxiDbkAHYkSYY+Hvza7x7f+eeKvi4bQ2XsEveKiidW+N
QsL2W0eEfwl54jGpMe9+9E0abJm4nxdJL5TfS7jtcEU09Jdji8X1ZgWkYe8/ozG2
kinuF1Qst0iRrYzBALLadNEb7oCPysM8ijLB95aMhDvSracPT42shJFq1oaKAhLS
pvM6K4Om56NGzM2MV3rdFGicw3s+o38EV2iqhmBFN9cduhNYL2rJii21JQARAQAB
tCNraXNzYnVnODcyMCA8a2lzc2J1Zzg3MjBAZ21haWwuY29tPokCVAQTAQgAPhYh
BJF5DBUs6VC/NMXWkfnIV7H3DutiBQJiVsBvAhsDBQkHhh5/BQsJCAcCBhUKCQgL
AgQWAgMBAh4BAheAAAoJEPnIV7H3Dutiyw4P/2SFKdweFJ/lVdBf1aMxD8HgbW4I
tFesdUcJ1ywEfgCS7QkMM3N4aNbkc9fUlu6hXli94HcmthOaOomJO7Iok5bBe51h
BD1OjgrjKicuPielBr6U+0cP32k3J57OB3uapaRoZq40pjDQ+6pnPnS4cWwJFeoH
B/+hPLiRWgP7FxG1vAE4KfCRHg8En3HzfsyU3QbLcwH1gfGLuHAsys/LSwm1vRr1
zPhYDuAgIzW3gdFxuNrfSHkloB+qSyUwA/li0UzrGLYs1x5RBdIcmtZA9F61fORN
EaBd3tE6YlYCIu5wIw/Wmhw5f4RuQIKa6ZuvjlTvG8q8XPnc1ZtGQTb4vLDyXT03
Jee/Bkq5HlHAwz8t5TTA0fAs+GwFHkVFKt1MNStR8tfrMU9Yi/Pudoe0AuAXM454
JSSNQEeBU7w7KW331mQ4TrrfCSujnAd6VNc3LxwqOAcXyONCtRci6B94w3D/M6sZ
m71ANGGZYtJZctyFtPFjjBYSB4awgHzNeudu6c5y1s4nbrLP3WruR09xlQs7/yDl
7jXF0SCga0TZzw+s38kxkuMvSl0cOlCpWt9Jn5iSHmAts3oU7EMNuv7IrGrq5+EE
0h9/db1/na897hrCNn2PoS0WESpaZGcz7tPkJuH6uCoSMQCd3/FQgREmQ4Fcxo1K
f0NfoKYNeJmKArZkuQINBGJWwG8BEACnwBZ4T1bExf6Q1z81s5Mo/IceKIXgfGrO
DVizkLGazBGZxl9dbpJZVroiOVmSsKYrjQrpiP4QPmTkKmkYz55V6QlLox2Mej9I
uCZ9s3W2ZLOHAS9uF4/CO1YK+2dRVZPcAKdGJ0KYJsvcP4sNj8aVqVrV+RBSi/Eu
IGKicHWK+sul/ZKSme3QjR9v7ldvrkTRzp29XUU+py2KH/QxQy8lgkJgsrXvWvlp
fak4oh9FpcbXZifofelbJhdU34DkXgTRIv3zQhFherw3dUxJuy9cbJSF3vjiSjWP
rXt3RY+MSl+cJvIzrBe8zyAWErQnZJJ9+Z6D357imR+L2sPfNdl+2WSpk4tMY856
jA54KXyrUMWkURJDLC8vlKBJem+eR8ALYATvWGJSjDM3ZAcM2bRMN297wXEG58Oz
ySZb72dOw2kLlW8AyH+sMoFuCIIhKbBDN+ETyHCnNSs2pCSlD+wATgIJO8iRHAyP
WeCP2K62luKkGlPOGGZWUr6SQkMPHxW7rbYqpVNekjQFEKP70uaj4R7SN5zPOzO6
yqfMm+E0x67htk35nhf7FvlVuWDpbyTIpNm16dSrRqhvojoQWnwS9gEEGv+Q1DH6
rsVGtauxwC/O39ZfjC9Ont2YQUUgrezFCgpOT/kgJp5c7M/821GOUHfFwZG9T6o7
auMZ2af+CwARAQABiQI8BBgBCAAmFiEEkXkMFSzpUL80xdaR+chXsfcO62IFAmJW
wG8CGwwFCQeGHn8ACgkQ+chXsfcO62Jneg//eMNrqECkqrfc3iE2J1PHdTEOOaiP
Cv1IJ78sr5UYw5fHsTI4WnTP/WzqgTBMP98Hhk6cfqkXF6sdRX4jkKrID5czB5BX
ZsbbvhfFtww69D8UsTNZWtpMec0hZYNrl6H/UiGQnBnq8tgG3ho6tbUqvuHa6ibn
9vEa2XLRlhBk0HYKAiJyGYrnLwbRd2o4utLcqqsGLLqY5S5peK6t4kC/2OrwAe/2
Mfs9xqZmwts6Sg9VdV7RbjTAqYUAiaBlQ0wgw7AREocQPF2MelQOd9fwHyXBTUwx
8eXfxsKhn52HhPQbqhxDyS6+oIa0IyaxrBl74qo9Qne/rRrh0xTizJg4Hw54ACFi
ddMfDTwiZNnrinBEuStIEz+8qgFt3gb+8B0n7/uGf9yjV/hv2xU/NWJNOKoh6onb
GoCUVnsvrmPjy6BRDkTM89dHS971MNGi42+qoHvRgFbpbpWL8+M9RqRXM0d2FlXq
kCkHKK/Cj9tm5GpXQBcqbOoOv5RBZCxWS3Zi9i/1g57kgFc8UxyAr1LHo5A5jE7g
20Rz5wmNj7oerg8tnfXS5YuBefYCmGdJiaP2FGQChDwCwmoVjEPd/kwNRYRFeROP
JgNzEgM6icF/O4p//Ee4xDXPmeTqOzbEgg1CWssz+bbH1wX8cVJ8TmUcgy3BIvqH
i4ov7ufgXXsrDXk=
=Gug1
-----END PGP PUBLIC KEY BLOCK-----

参考