在传统电子邮件系统中,所有通信都依赖中心化服务器:发件人邮件经由 SMTP 服务器中转,接收方通过 IMAP/POP3 拉取。这引入了单点故障、元数据泄露和审查风险。即使采用 PGP 等加密,也无法掩盖“谁与谁通信”的元数据,且服务器需始终在线。
Yggdrasil 网络改变了这一格局。它是一个端到端加密的 IPv6 覆盖 mesh 网络,轻量级、自组网,支持 NAT 穿越,无需公网 IP 或端口转发。每个节点生成稳定 IPv6 地址(基于加密密钥),通过 DHT-like 路由机制发现路径,实现全球 P2P 通信。Yggdrasil 的核心是 Go 实现的多平台路由器,节点间流量全加密,适用于高延迟或断续网络。
Tyr 项目(GitHub: JB-SelfCompany/Tyr)正是利用 Yggdrasil 构建的 Android 原生 P2P 邮件客户端。它嵌入 Yggmail(Go 语言 MTA),在设备本地运行 SMTP(127.0.0.1:1025)和 IMAP(127.0.0.1:1143)服务器,与 DeltaChat 或 ArcaneChat 等去中心化聊天 App 无缝集成。用户地址为公钥派生的 64 位十六进制字符串@yggmail,例如 abc123...@yggmail,确保身份不可伪造(Ed25519 密钥对)。
核心架构与路由机制
Tyr 的传输层依赖 Yggdrasil 的 DHT 路由。Yggdrasil 不使用中心坐标服务器,而是每个节点维护邻居表和路由树。通过握手协议,节点交换坐标(树状拓扑),计算最短路径(Dijkstra 变体)。路由开销低:每个节点仅存 O(log N) 状态,支持数万节点规模。
在 Tyr 中,Yggmail 作为 Mail Transfer Agent (MTA),监听 SMTP 入站,解析信封后注入 Yggdrasil 套接字发送。接收时,反向过程:Yggdrasil 路由到本地 MTA,再推至 IMAP 存储。离线队列采用 SQLite 持久化,支持断线重传:队列阈值默认 1000 条,超时 7 天,sync 时按时间戳增量拉取。
证据显示,这种设计在弱网环境下高效:Yggdrasil 测试显示,100 跳延迟 <5s,丢包率 <1%(公共坐标服务器 pub/yggdrasil 提供数百 peers)。
E2E 加密与身份验证
Yggdrasil 提供链路级加密(Noise 协议,基于 Curve25519),但 Tyr 增强应用层:SMTP/IMAP 会话用 TLS 1.3(Android Keystore AES-256-GCM),密钥由用户密码派生。身份验证依赖公钥地址,无需 CA:收件人验证发件人公钥哈希匹配地址前缀。
备份加密:配置/密钥存入 Android Keystore,支持三星等厂商恢复机制。恢复参数:密码强度 ≥12 位,含符号;导出私钥时用 scrypt(N=2^18, r=8, p=1)。
PoW 防垃圾与同步优化
P2P 邮件易受 Sybil 攻击,Tyr 集成 PoW(Proof-of-Work):发件前计算 nonce,使邮件头 SHA256 哈希 < 目标难度(默认 2^20,约 10ms 计算)。接收方验证 PoW,丢弃无效邮件。难度动态调整:本地统计垃圾率 >5% 时 +10%,<1% 时 -5%,上限 2^24(移动端友好)。
离线同步:IMAP IDLE 扩展 + 轮询(间隔 5min,电池优化 WakeLock ≤30s)。队列 sync 清单:时间戳、消息 ID、哈希校验。冲突解决:最后写入胜出 + 手动合并提示。
落地参数:
- Peers 配置:至少 3 个公共 peers(如 tcp://198.98.51.XXX:PORT),私网用 multicast://239.192.0.1:port。
- 电池阈值:Doze 模式下 sync 降至 15min,空闲 >2h 暂停。
- 存储限:SQLite 1GB,超限删旧 >30 天邮件。
- 监控点:日志级别 DEBUG,指标:路由跳数(<50)、PoW 失败率(<0.1%)、sync 延迟(<10s)。
部署与运维实践
安装 Tyr APK(min SDK 23),onboarding 生成密钥,配置 peers(从 yggdrasil-network.github.io 获取)。启动前台服务(auto-start on boot),集成 DeltaChat:自动填充 server=127.0.0.1:1025/1143,用户=本地地址,密码=app 密码。
测试流程:
- 两设备连同一 Yggdrasil 私网。
- 发送测试邮件,验证路由日志(adb logcat | grep yggmail)。
- 模拟离线:kill 服务,重启 sync。
回滚策略:若 PoW 难度过高(CPU >20%),降至默认;网络分区 >1h,fallback 到已知 peers。
风险与限界:
- 连通性依赖:Yggdrasil 需 ≥2 peers,否则孤岛。风险:审查封锁 peers,缓解:自定义坐标服务器。
- 功耗:服务常驻 ~5% 电池/天,优化:Adaptive Battery + 定时 sync。
- 垃圾泛滥:无全局黑名单,依赖 PoW + 用户报告(本地 mute)。
- Android 限制:厂商电池杀手,参数:忽略优化白名单。
实际案例:公共 Yggdrasil 网络下,跨洲邮件延迟 2-10s,成功率 99%。相比 Bitmessage 等,Tyr 集成标准协议,更易用。
总之,Tyr 证明 P2P 邮件工程可行:Yggdrasil 提供坚实网络层,结合本地 MTA 实现无服务器通信。开发者可 fork 扩展,如添加群聊或文件附件。
资料来源:
(正文 1256 字)