PGP 加密邮件:GPG 与端到端隐私
PGP 加密邮件完全指南:使用 GPG 实现端到端隐私
随着数字监控和个人数据泄露日益严重,学会加密电子邮件已成为保护隐私的核心技能。本教程将带你从零开始,掌握基于 OpenPGP 标准的 GPG(GNU Privacy Guard) 工具,实现真正的端到端加密邮件通信。你将理解其工作原理,学会生成密钥、加密解密邮件,并规避常见陷阱。
为什么需要 PGP 加密邮件
普通的电子邮件如同明信片,任何中间服务器和网络节点都可能阅读其内容。而 PGP(Pretty Good Privacy) 提供了一种标准化方法,确保只有你指定的收件人才能解密信息。这被称为 端到端加密(E2EE),即使邮件服务提供商也无法窥探内容。
GPG 是 PGP 的开源实现,完全免费且被广泛审计。通过 GPG,你不仅能加密邮件正文,还能进行 数字签名,验证发件人身份并确保消息未被篡改。
核心概念:公钥与私钥
在动手之前,你需要理解 PGPG 依赖的非对称加密模型:
- 密钥对:由一把公钥(Public Key)和一把私钥(Private Key)数学关联组成。
- 公钥:可以公开分享给任何人,用于加密要发给你的信息,或验证你的签名。
- 私钥:必须绝对保密,由你自己保管,用于解密发给你的信息,或为你的邮件签名。
- 信任模型:与其依赖中心化的证书机构,PGP 使用“信任网络(Web of Trust)”,通过互相签名来验证公钥归属。
核心原则:永远不要把私钥发送给任何人,永远不要把私钥上传到云存储或随机站点。
环境准备:安装 GPG
几乎所有操作系统都可以轻松安装 GPG。
Linux (Debian/Ubuntu)
sudo apt update && sudo apt install gnupg
macOS
推荐通过 Homebrew 安装:
brew install gnupg
Windows
使用官方 Gpg4win 安装包。访问 gpg4win.org 下载,其中包含了 GPG 命令行工具和图形界面 Kleopatra,适合初学者。
安装后,打开终端(Linux/macOS 的 Terminal,Windows 的 PowerShell 或 Git Bash)输入 gpg --version 确认安装成功。
第一步:生成你的密钥对
生成密钥是建立加密身份的第一步。
1. 启动生成向导
gpg --full-generate-key
2. 选择密钥类型
程序会提示选择密钥种类。直接按 Enter 选择默认的 RSA and RSA,既安全又通用。
3. 选择密钥长度
输入 4096,这是目前推荐的 RSA 密钥长度,在安全性与性能间取得良好平衡。
4. 设置有效期
你可以设定一个过期日期,例如 2y(2年)。密钥过期后可以向朋友们续期签名,也可设置永不超期。选择后按 Enter。
5. 填写用户标识
你需要输入:
- 真实姓名:你的姓名或常用昵称。
- 电子邮件地址:你用来收发加密邮件的邮箱地址,务必填写准确。
- 注释(可选):可以留空。
确认信息正确后输入 O(是)确认。
6. 设置私钥保护口令
弹出一个对话框要求你输入 强大且可记忆的密码短语。这个密码用于加密你的私钥文件,即便设备失窃,攻击者也难以使用你的私钥。请勿使用生日、简单单词。
生成过程可能需要随机数据,建议在此期间移动鼠标、打字或运行一些程序,以增强熵源。
完成后,终端会显示密钥指纹,例如 1A2B 3C4D 5E6F 7890 ABCD EF12 3456 7890 ABCD。
基本密钥管理操作
掌握命令来查看、导出和导入密钥。
列出你的密钥
gpg --list-secret-keys --keyid-format LONG
你会看到类似 sec rsa4096/1234567890ABCDEF 2025-01-01 [SC] 的输出,其中 1234567890ABCDEF 就是你的密钥 ID。
导出公钥以便分享
你需要把公钥发给通信对象,他们才能加密邮件给你。
gpg --armor --export your-email@example.com > mypublickey.asc
参数 --armor 将二进制内容转为 ASCII 文本,方便粘贴。文件 mypublickey.asc 内容形如:
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----
导入他人的公钥
收到别人的公钥文件(.asc 或 .gpg)后导入到你的密钥环:
gpg --import friend_publickey.asc
你也可以用 gpg --keyserver keys.openpgp.org --search-keys friend@example.com 从公钥服务器搜索并导入。
验证密钥指纹
导入后,务必通过另一信道(如电话或当面)确认密钥指纹,防止中间人攻击。
gpg --fingerprint friend@example.com
让对方念出完整的 40 位指纹,与你本地显示的一致。
实践:加密与解密邮件
不依赖特定邮件客户端,我们先用命令行理解核心流程,再迁移到任何软件。
加密邮件
假设要给朋友 friend@example.com 发送加密消息。创建一个文件 message.txt,写入邮件正文。
gpg --encrypt --armor --recipient friend@example.com message.txt
--recipient:指定收件人的邮箱地址(必须在密钥环中已导入其公钥)。- 执行后生成
message.txt.asc,内容即为加密后的密文。
你也可以用管道和 echo 直接加密一段文字:
echo "这是我们之间的秘密" | gpg --encrypt --armor --recipient friend@example.com
解密邮件
将收到的密文保存为 encrypted.asc,然后运行:
gpg --decrypt encrypted.asc
系统会提示你输入保护私钥的密码短语,成功后显示明文内容。
签名与验证签名
签名可以证明邮件确实由你发出,且未被篡改。
签名但不加密(适合公开声明):
gpg --clearsign message.txt
会生成一个 message.txt.asc 文件,包含明文邮件和签名。
验证签名:
gpg --verify message.txt.asc
如果输出包含“Good signature”和签名者信息,则验证通过。
加密并签名(推荐私密通信):
gpg --encrypt --sign --armor --recipient friend@example.com message.txt
收件人解密的同时也会自动验证签名。
将 GPG 集成到邮件客户端
大多数现代邮件客户端都支持 PGP,无需每次手动命令。
Thunderbird (推荐)
安装 Thunderbird + 附件 “OpenPGP” (Thunderbird 78+ 已内置,无需额外插件)。
- 打开 Thunderbird,进入 工具 > OpenPGP 密钥管理器。
- 如已有密钥对,选择 文件 > 从文件导入密钥,导入你的私钥(.asc);或直接生成新密钥。
- 在账户设置中,为对应邮箱指定使用的密钥。
- 写邮件时,工具栏会出现 加密 和 数字签名 按钮。只要收件人公钥已导入,即可一键加密。
网页邮件 + Mailvelope 浏览器扩展
如果你使用 Gmail、Outlook Web 等,推荐安装 Mailvelope 浏览器插件。
- 在扩展中导入自己的密钥对和联系人公钥。
- 撰写邮件时,页面会集成加密功能,自动加密并替换邮件内容为密文。
其他客户端
- macOS 邮件:通过 GPG Suite 集成。
- K-9 Mail (Android):搭配 OpenKeychain 实现移动端加密。
- Canary Mail、ProtonMail、TutaNota 等原生支持 PGP。
公钥分发与信任网络
如何让别人找到你的公钥?可组合使用多种方式:
- 直接发送公钥文件:将
mypublickey.asc通过即时通讯或网站提供给亲朋好友。 - 上传到密钥服务器:
gpg --keyserver keys.openpgp.org --send-keys 你的密钥ID。 - 在个人网站、社交简介中放置公钥。
- 信任网络:参加密钥签名聚会,相互签名公钥,从而构建去中心化的信任链。
安全最佳实践与常见误区
- 永远保密主私钥:考虑为日常使用创建子密钥,将主密钥离线保存。命令
gpg --edit-key可管理子密钥。 - 定期轮换密钥,发布吊销证书:生成密钥后,立即生成吊销证书:
gpg --output revoke.asc --gen-revoke your-email,并安全存储。一旦私钥泄露,可用此证书宣告公钥作废。 - 切勿在不可信设备上使用私钥:云虚拟服务器、公共电脑都视为不安全。
- 加密不会保护元数据:邮件主题行、发件人、收件人、时间等依然是明文的。如需隐藏,需结合匿名邮件服务或加密隧道。
- 端到端加密仅保护存储和传输中的内容:接收方设备如果被入侵,明文仍然可读。保护终端设备同等重要。
- 口令备份:用密码管理器保存私钥密码,并制作纸质备份放在安全位置。
故障排查与帮助
- 解密失败“No secret key”:说明你没有安装相应的私钥。检查
gpg --list-secret-keys确认已导入。 - 加密失败“Key not found”:你需要先导入收件人的公钥,且其信任级别需足够。用
gpg --edit-key friend@example.com输入trust设置信任度。 - 忘记私钥密码:无解,只能吊销密钥并生成新密钥。因此务必安全备份口令。
- 复制粘贴密文乱码:确保使用
--armor产生的 ASCII 装甲文本,而非二进制文件。
从今天开始加密你的通信
PGP 并不是一个复杂的黑客工具,而是每个人都能掌握的隐私基石。本教程提供了从概念到实操的完整路径。现在你应该可以:
- 生成并安全保管 GPG 密钥
- 加密和签名邮件
- 将 GPG 整合到日常邮件客户端
- 建立自己的可信联系人网络
选择一位朋友,交换公钥,发送你的第一封加密邮件吧。哪怕只是一句“你好,密文测试”,也是迈向隐私自主的重要一步。
拓展阅读与资源:
- GNU Privacy Handbook:
https://www.gnupg.org/gph/en/manual.html- Email Self-Defense(自由软件基金会):
https://emailselfdefense.fsf.org/- OpenPGP 最佳实践指南:
https://riseup.net/en/security/message-security/openpgp/best-practices