PGP
我鼓励读者使用 GnuPG 向我发送加密的信息。不要说你的信息不重要根本没必要加密,等你要用加密的时候就已经太晚了 —— 对于互联网。
PGP(Pretty Good Privacy)/ OpenPGP 是一套公开密钥加密标准。它的核心思想是:你用我的公钥加密信息,只有持有对应私钥的我能解开。 这样即使邮件中途被截获、被服务商存储,旁人也读不出明文。下面会一步步说明如何获取并核对公钥,以及如何用它给我写一封加密信。
- 我的 PGP 标识:
[email protected] - 指纹:
FFFFA487A0E51D2E6F0C4E685968BC2CEE74E569
获取公钥
通过 HTTPS 获取公钥时,TLS 已经验证了服务器身份——你拿到的确实是来自 openpgpkey.stx8.com 的公钥,网络层的中间人攻击已被 TLS 拦截。
命令行(GnuPG)
方式一:WKD 自动发现(推荐)
写收件人邮箱 [email protected] 时,GnuPG 会自动通过 WKD(Web Key Directory)从我的服务器拉取公钥:
1 | gpg --locate-keys [email protected] |
这将显示类似下面的内容(指纹、子密钥等细节可能随我轮换密钥而不同,但应看到公钥被成功导入):
1 | gpg: key 5968BC2CEE74E569: public key "shikong <[email protected]>" imported |
如果报错(比如 No valid OpenPGP data found),说明 WKD 没拉到,请改用下面的公钥服务器方式。
方式二:从公钥服务器获取
从 keys.openpgp.org 拉取:
1 | gpg --keyserver hkps://keys.openpgp.org --recv-keys FFFFA487A0E51D2E6F0C4E685968BC2CEE74E569 |
或从 keyserver.ubuntu.com 拉取(前者不可达时的备用镜像):
1 | gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys FFFFA487A0E51D2E6F0C4E685968BC2CEE74E569 |
成功时会看到 gpg: key ... imported 之类提示。如果两个密钥服务器都拉不到,请参照下面的__解决方法(使用公钥)__。
解决方法(使用公钥)
如果你遇到了无法解决的问题,不妨下载并使用这个公钥来代替。或者,你还可以使用以下指令:
1 | curl -fsSL https://openpgpkey.stx8.com/.well-known/openpgpkey/stx8.com/hu/s8y7oh5xrdpu9psba3i5ntk64ohouhga | gpg --import - |
我的公钥也可在 keys.openpgp.org 上找到,并可从 这个链接 下载。
图形界面
Thunderbird(内置 OpenPGP)
Thunderbird 78 及以上版本内置了 OpenPGP 支持,无需额外安装。写信给 [email protected] 时,Thunderbird 会自动通过 WKD 发现我的公钥:
- 新建邮件,收件人填
[email protected] - 点击底部「加密」按钮
- 如果本机还没有我的公钥,Thunderbird 会自动从
openpgpkey.stx8.com拉取(WKD) - 加密成功即可发送
如果自动发现失败,也可以手动搜索:进入「OpenPGP 密钥管理器」→「查找」→ 输入 [email protected] 或指纹 FFFFA487A0E51D2E6F0C4E685968BC2CEE74E569,从 keys.openpgp.org 导入。
Mailvelope(浏览器插件)
如果你不想碰命令行,可以装 Mailvelope 浏览器插件,它能在网页邮箱里直接加解密:安装后进入「Key Management」→「Search」,把指纹 FFFFA487A0E51D2E6F0C4E685968BC2CEE74E569 填进去搜索导入。
用公钥给我写一封加密信
公钥到手之后,就可以加密了。假设你想加密的明文存在 message.txt 里:
1 | gpg -aer [email protected] message.txt |
这会在同目录生成 message.txt.asc——一份 ASCII 形式的密文。命令说明:
-a(--armor):输出 ASCII 文本(方便粘贴进邮件正文),不加则生成二进制.gpg。-e(--encrypt):加密。-r [email protected](--recipient):用我的公钥作为收件人(gpg 会按邮箱找到刚才导入的钥匙)。
把 message.txt.asc 的全部内容发给我即可。只有用我这边对应的私钥才能解密,任何中间环节(邮件服务商、网络监听者)看到的都只是一堆乱码。
小提示:如果你希望我回信时也能加密给你,请在信里附上你自己的公钥(gpg -a --export 你的邮箱 的输出),并简要说明那是你的公钥。这样我回复时就会用你的公钥加密。
公钥信息 · [email protected]
导入后可以用下面的命令核对指纹:
1 | gpg --fingerprint FFFFA487A0E51D2E6F0C4E685968BC2CEE74E569 |
输出应与下方的主指纹完全一致。下面是这把钥匙的详细参数,供深度核对或记录:
- 算法 / 创建 / 到期:brainpoolP512r1 · 2026-07-09 · 2030-12-31
- 主指纹:
FFFA A487 A0E5 1D2E 6F0C 4E68 5968 BC2C EE74 E569 - 签名子密钥(ed25519):
8C18 B451 EE94 15F6 F6AA E7D7 5C93 D746 5B87 2D84· 到期 2030-12-31 - 认证子密钥(ed25519):
E5AC 0502 E734 C58F 6DF4 CB33 29F3 F79B FC5A 5BDF· 到期 2030-12-31 - 加密子密钥(rsa4096):
1B3D 73D1 6D09 F3B3 F70D 9FC8 1E4F 7695 F703 AC71· 到期 2030-12-31 - 加密子密钥(cv25519):
F450 BAE2 9B41 9C96 66E0 F3C6 E436 3812 34B9 3729· 到期 2030-12-31