现代电子邮件可以基于现有技术构建
Hacker News 摘要原标题:Modern email can be built from borrowed parts
这篇文章探讨了如何利用现有的互联网技术构建一种现代化的电子邮件系统。作者 Andros Fenollosa 提出,SMTP 协议已经拖累了电子邮件系统 40 年,现在是时候基于 HTTP 协议来设计其继任者了。这个系统的目标不是取代现有的邮件系统,而是一个名为 HMTP(超文本邮件传输协议)的实验性协议,它只保留了 user@domain 这种地址形式,其余部分全部重新设计。
核心理念:基于成熟技术的拼装
作者指出,新系统不需要发明任何新技术,而是将已经在大规模使用的成熟方案重新组合。这些方案包括:
• 传输层与状态码:直接使用 HTTP 和 TLS,由 Let's Encrypt 提供加密支持。
• 用户发现:使用 WebFinger 协议,这在 Mastodon 和联邦宇宙中已经得到验证。
• 消息递送:采用 ActivityPub 协议中的 POST 方法向收件箱发送内容。
• 发件人验证:结合 Webmention 和 DKIM 模式。
• 签名与加密:使用 Ed25519 签名和 HPKE 加密。
• 身份管理:使用类似于 ATProto(Bluesky)的签名链,确保密钥轮换后身份依然有效。
• 同步与读取:采用 IETF 标准化的 JMAP 协议。
系统的六大核心设计
1. 发现与授权(更优的 MX 记录)
新系统不再依赖修改 DNS 记录,而是通过存放于特定路径(.well-known/hmtp/)的静态 JSON 文档来完成。这允许用户在同一个域名下,为不同的信箱指定不同的邮件提供商,实现了 MX 记录无法做到的精细化控制。
2. 支持密钥轮换的身份识别
身份不应该等同于密钥,因为密钥会丢失或过期。该方案提出了两个锚点:一是加密连续性,通过签名链让旧密钥为新密钥背书;二是将域名控制权作为备选方案。如果用户丢失了密钥,可以在域名下声明新密钥。
3. 带有队列的递送(存储转发)
递送过程是向收件人的收件箱发送一个 POST 请求。为了保证可靠性,客户端先将邮件发给自己的服务器,再由服务器负责排队、重试。为了避免重复发送,每封邮件都有基于内容哈希的唯一 ID,接收服务器会根据 ID 进行去重。
4. 原生签名与加密
邮件不再是松散的文本,而是一个包含 ID、发件人、收件人、日期、回复指向和签名的结构化对象。
• 静态真实性:邮件自带密码学证明,即使转发也能保留原始签名。
• 端到端加密:收件人通过 X25519 密钥对内容进行加密,服务器存储的是其无法读取的密文。
• 结构化对话:通过内容哈希精确重建对话树,不再依赖猜测。
• 引用附件:邮件不直接携带附件,而是包含一个指向附件的 URL 和哈希值,接收方按需下载。
1. 分层反垃圾邮件机制
• 身份成本:由于身份与域名挂钩,建立独立身份需要购买域名。
• 首信许可:陌生人的第一封信会进入请求箱(类似 Signal 或 Instagram),只有用户接受后,后续对话才能开启。
• 可选邮资:服务器可以对首次联络要求支付费用(返回 402 状态码),提高群发垃圾邮件的成本。
1. 统一的读取规范
邮件的发送、读取、同步和搜索都基于 JSON 和 HTTP 协议。通过 JMAP 协议处理读取,通过 SSE 或 WebPush 实现实时推送。
结论与实践
作者总结道,HMTP 解决了电子邮件的所有痛点:身份伪造变得不可能,信誉验证被密码学证明取代,附件不再占用大量存储空间,且整个系统可以运行在现有的网页服务器和证书设施之后。
为了证明可行性,作者用 Python 实现了一个原型。该原型实现了带签名的递送、源头验证、端到端加密、首信许可和队列重试等核心功能。作者提醒这只是一个设计实验,其中的密码学部分尚未经过审计,不建议用于处理高度机密的信息。
原文:https://en.andros.dev/blog/d7ed8b07/modern-email-can-be-built-from-borrowed-parts/