跳到正文

GPG 加密 ​

Swanmail 支持 OpenPGP 邮件的签名、加密、解密和验签,既支持其他邮件客户端普遍采用的 PGP/MIME 格式(RFC 3156),也支持较早的内联格式。所有密钥材料都保存在你的设备上:私钥用保存在 macOS 钥匙串、由 Windows DPAPI 保护或保存在 Linux Secret Service 中的密钥在静态时加密,公钥与私钥一起存放在应用的数据目录中。

设置密钥对 ​

生成新密钥对 ​

  1. 打开设置 → GPG 加密。
  2. 输入姓名和邮箱,然后点击生成密钥对。
  3. 生成后会显示密钥指纹。你可以随时点击清除按钮清除密钥。

生成的密钥不带密码短语,以便自动用于加密和解密;私钥由操作系统钥匙串中的密钥保护。

导入已有密钥对 ​

如果你已有 PGP 密钥对,将 armored 公钥和私钥粘贴到导入密钥对表单中,然后点击导入。Swanmail 会在保存前验证两把密钥的指纹一致。

从系统 GPG 导入 ​

如果你已安装 gpg 并在系统密钥环中存有私钥,点击从系统 GPG 导入下的加载可用密钥。选择要使用的密钥并点击导入。Swanmail 会从 gpg 导出公钥和私钥,并存入自己的密钥文件。

PGP 格式 ​

设置 → GPG 加密 → PGP 格式 决定签名或加密邮件的结构:

  • PGP/MIME(推荐),默认选项。整封邮件(HTML、纯文本和所有附件)作为一个 MIME 部分被签名或加密。签名邮件为带分离签名(signature.asc)的 multipart/signed;加密邮件为 multipart/encrypted,包含 Version: 1 控制部分和密文(encrypted.asc)。主题、发件人和收件人保留在保护范围之外,供邮件服务器使用。
  • 内联。只处理纯文本正文(-----BEGIN PGP MESSAGE----- 或明文签名文本)。撰写窗口必须处于纯文本模式,附件不受保护。仅在对方客户端无法读取 PGP/MIME 时使用。

发送签名或加密邮件 ​

  1. 撰写邮件。使用 PGP/MIME 时可以是 HTML 或纯文本;内联格式需要纯文本模式。
  2. 在撰写窗口底部打开加密、签名或两者。有密钥后才会显示这两个开关。
  3. 发送时,Swanmail 用你的密钥签名,并同时向每位收件人的公钥以及你自己的公钥加密,因此已发送邮件中的副本仍可阅读。同时签名和加密会生成一条既签名又加密的 OpenPGP 消息。

加密需要每位收件人的公钥。缺少任何一把时发送会中止并列出该地址。对一封邮件启用 OpenPGP 后会跳过 S/MIME,即使 S/MIME 开关处于打开状态。定时发送和规则自动回复由同一段代码完成,因此同样受到保护。

查找收件人的密钥 ​

加密需要每位收件人的公钥。Swanmail 可以在网络上查找:

  • Web Key Directory(WKD)。收件人所在域名在一个由邮箱地址推导出的固定 HTTPS 地址上发布密钥。Swanmail 先查询高级位置(openpgpkey.<域名>),再查询直接位置(<域名>/.well-known/openpgpkey/)。
  • keys.openpgp.org。WKD 没有结果时查询。它只会在地址所有者通过邮件确认后公开该地址。

只有用户 ID 中包含所查地址的密钥才会被采用。请求只走 HTTPS,几秒后超时,大小有上限,并且绝不会发往私有或回环地址。找到的密钥会加入 Swanmail 的密钥环(用户数据目录中的 pgp-public-keys.json,只保存公钥)。

在撰写窗口中打开加密后,会列出所有尚无已知密钥的收件人。每个地址会自动查找一次;点击查找密钥可再次查找。在设置 → GPG 加密中,按地址查找密钥… 可以对任意地址执行同样的操作,并显示添加的指纹及其来源。

查找密钥会让收件人的域名或 keys.openpgp.org 得知有人准备给该地址写信。在打开加密或你主动查找之前,不会进行任何查找。

Autocrypt ​

Swanmail 支持 Autocrypt Level 1,邮件客户端可以借此交换密钥,无需任何人手动查找。

  • 发送你的密钥。配置密钥后,从该密钥所包含地址发出的每封邮件都会带有 Autocrypt: 头,其中是你公钥的精简副本(主密钥、该地址对应的用户 ID 和一个加密子密钥)。可以在设置 → GPG 加密 → Autocrypt 中关闭。从密钥未包含的地址发出的邮件不会带这个头。
  • 获取对方的密钥。Swanmail 读取邮件头时(同步期间或打开邮件时),会记住发件人有效 Autocrypt: 头中的密钥和偏好。只有更新的邮件才能替换已记住的内容,因此乱序到达的邮件不会让密钥回退。这一过程完全不访问网络。第一次向该地址加密时,密钥才会加入你的密钥环。
  • 默认加密。打开倾向于加密邮件(prefer-encrypt=mutual) 表示你希望收到加密邮件。当你和一封邮件的所有收件人都这样表示时,加密会自动打开,并且撰写窗口会说明原因。是否关闭始终由你决定。如果不打开这个偏好,邮件头中不会写 prefer-encrypt,Autocrypt 会将其视为无偏好。

阅读签名和加密邮件 ​

Swanmail 会自动识别两种格式:

  • PGP/MIME 加密邮件在打开时用你的密钥解密。正文替换密文显示,附件列在正文上方,点击即可保存。发件人旁会显示已解密标签。
  • 内联邮件(正文以 -----BEGIN PGP MESSAGE----- 开头)同样会自动解密。若无法打开,仍会显示带解密按钮的旧横幅。
  • 签名(PGP/MIME 分离签名、内联明文签名或加密邮件内部的签名)会针对被签名的原始字节进行校验。能用你持有的密钥验证时标签显示由 … 签名;密钥已知但邮件被改动时显示签名无效;签名密钥不在你的密钥环中时显示未知密钥签名。两种格式显示相同的三种状态。

解密后的内容不会写入磁盘。数据库保存的是收到的密文,明文只在邮件显示期间存在。