FairEmail OpenPGP 端到端加密配置与使用
什么是 OpenPGP 端到端加密
常规的邮件发送路径是:你的客户端 → 邮件服务商服务器 → 收件人邮件服务商服务器 → 收件人客户端。这条路径上,邮件服务商(Google、微软等)在技术上有能力读取邮件内容(尤其是非加密邮件)。
OpenPGP 端到端加密(End-to-End Encryption,E2EE)改变了这一点:
- 邮件在你发出前就已经加密
- 加密后的邮件即使被中间任何服务商截获,也无法解密(没有收件人的私钥)
- 只有收件人用自己的私钥才能解密查看内容
密钥管理采用非对称加密体制:公钥可以公开分享,私钥必须自己保管。用对方公钥加密 → 只有对方私钥能解密。用自己私钥签名 → 对方公钥能验证。
FairEmail 的 OpenPGP 支持方式
FairEmail 本身不包含 PGP 实现——它依赖 Android 系统上安装的 OpenPGP 兼容应用来完成加密解密操作。最常用的开源 PGP 应用是 OpenKeychain。
为什么要设计成依赖外部 PGP 应用
开发者的理由:PGP 加密是一个复杂且容易出错的领域,FairEmail 选择让专业的 PGP 应用来处理密钥管理和密码学运算,自己只负责触发和展示结果。这样既保持了 FairEmail 的轻量,又能复用成熟的加密库。
前置条件
安装 OpenKeychain
- 从 F-Droid 或 GitHub 下载安装 OpenKeychain(Play Store 上也有但已下架,推荐 F-Droid 版本)
- 首次启动 OpenKeychain,按引导创建自己的 PGP 密钥对(或导入已有密钥)
- 密钥创建后,OpenKeychain 会显示你的公钥指纹——这个指纹就是别人用来找到你公钥的标识
导入联系人公钥
要给某人发送 PGP 加密邮件,你需要先获取对方的公钥:
- 直接让对方发给你公钥文件(
.asc或.pub格式)→ 在 OpenKeychain 中「导入」 - 或从公钥服务器(key servers)搜索对方的公钥(需要知道对方的指纹或邮箱地址)
在 FairEmail 中启用 PGP
启用 PGP 加密分两步:为每个账户开启 PGP 支持,然后在需要发送加密邮件时手动勾选加密选项。
第一步:账户级开启
- FairEmail 设置 → 手动设置 → 账户 → 选择某个账户
- 找到「加密」相关选项
- 勾选「启用 OpenPGP 加密」
- 勾选后 FairEmail 会自动扫描你 OpenKeychain 中的密钥对和联系人公钥
第二步:手动选择加密
在写信界面:
- 点击右上角的「锁」图标(PGP 功能开启后才会出现)
- 在弹出菜单中:
- 加密:用收件人的公钥加密邮件(你需要已经导入收件人的公钥)
- 签名:用你的私钥对邮件进行数字签名(收件人可以验证这封邮件确实是你发的、内容未被篡改)
- 加密并签名:两个都做
FairEmail 会自动检测当前收件人是否有可用的 PGP 公钥。如果有,加密按钮会亮起;如果没有,FairEmail 会提示「收件人没有可用的 PGP 公钥」。
接收和验证 PGP 邮件
当有人给你发来 PGP 加密或签名的邮件时,FairEmail 会自动处理:
解密加密邮件
- FairEmail 检测到邮件是 PGP 加密格式(
-----BEGIN PGP MESSAGE-----开头的 block) - 自动调用 OpenKeychain 解密
- OpenKeychain 可能要求你输入私钥的口令(Passphrase)来解锁密钥
- 解密成功后,FairEmail 显示正常的邮件内容
- 解密失败 → 显示加密的原始文本 + 错误提示
验证签名邮件
- FairEmail 检测到邮件有 PGP 签名 block
- 用发件人公钥验证签名
- 签名有效 → 邮件头区域显示绿色 ✓ 图标 + 「签名已验证」
- 签名无效 → 显示红色 ✗ 图标 + 「签名无效,邮件可能被篡改」
- 未知签名者 → 提示「签名来自未知密钥,你确定这是发件人吗?」
发送加密邮件的完整流程
假设你要给 bob@example.com 发一封加密邮件:
- 已经在 OpenKeychain 中导入了 Bob 的公钥(指纹
ABCD1234) - FairEmail 账户已开启 PGP 支持
- 写信界面填写收件人
bob@example.com、主题、正文 - 点击右上角锁图标 → 勾选「加密」
- FairEmail 自动找到 Bob 的公钥,加密选项亮起
- 点击「发送」
- FairEmail 调用 OpenKeychain,用 Bob 的公钥加密邮件内容
- 加密后的邮件作为附件(
.asc文件)或直接在邮件正文中发送 - Bob 收到后,FairEmail 自动调用 OpenKeychain 解密
常见问题
「收件人没有可用的 PGP 公钥」
你还没有导入这个收件人的公钥。解决方法:让对方发一份公钥文件(或公钥指纹),导入 OpenKeychain。
解密时要求输入口令
这是正常的——OpenKeychain 为了保护你的私钥,在创建时会要求你设置一个口令。每次使用私钥(解密邮件、签名邮件)时都需要输入这个口令。你可以设置一个较短的解锁超时(比如 5 分钟内重复操作不需要再输口令)。
OpenKeychain 找不到我的密钥
确认:
- OpenKeychain 中的密钥对应的邮箱地址和你 FairEmail 账户的邮箱地址完全一致
- FairEmail 账户设置中已经开启了 PGP 支持
- 设备上安装的 OpenKeychain 是最新版
YubiKey 硬件密钥
OpenKeychain 支持 YubiKey 等硬件安全令牌存储 PGP 密钥。在 FairEmail 中使用 YubiKey 时,加密 / 解密 / 签名操作需要物理接触 YubiKey(比如触摸一下)。