安全详解
毛豆聊天的加密架构、密聊防护、阅后即焚与漏洞披露机制。隐私不是功能,而是底线。
最后更新:2026-07-21
设计原则
默认端到端加密 · 零知识服务端 · 设备私钥永不外传 · 可自托管 · 安全持续演进
Signal 协议:1:1 与群
毛豆聊天采用业界公认的 Signal Protocol:
- 1:1 会话 - Double Ratchet:通过 X3DH 协商初始会话密钥后,每条消息使用新密钥(前向保密 / Forward Secrecy)。即便长期密钥泄露,历史消息仍安全;即便某条消息密钥泄露,仅影响该条消息。
- 群聊 - Sender Key:每个发送方在群内分发一次 Sender Key,后续群消息以群为单位加密,避免 1:1 重复协商,在大群中保持端到端加密与性能。
- 密钥分发:身份公钥与一次性 PreKey 公钥由服务端分发,私钥永不离开设备。服务端无法推导会话密钥。
附件加密:AES-256-GCM
所有附件(图片、视频、文档、语音等)在设备端用 AES-256-GCM 加密后上传。密文通过附件上传会话接口分块传输(POST /api/attachment-uploads),服务端仅存储密文并校验 SHA-256。解密密钥随消息信封端到端传递,服务端无法解密附件。
附件有用户配额限制与上传 TTL,超期未关联的密文自动清理。
密聊模式
密聊模式针对高敏感场景,提供多层防护:
- FLAG_SECURE:禁止系统截屏与录屏,阻止界面被投屏或截图工具捕获。
- 可见盲水印:界面叠加含用户 ID 与时间戳的不可见水印,便于追溯。
- 截屏检测对端告警:若检测到截屏行为,对端会收到告警提示。
- 阅后即焚联动:可设置消息定时消失,进一步降低留存风险。
注意
FLAG_SECURE 可阻止系统级截屏,但无法完全阻止接收方用另一台设备对其屏幕拍照。盲水印用于在发生此类外泄时追溯源头。
盲水印取证:DCT-QIM
密聊模式支持频域盲水印(基于 DCT-QIM,离散余弦变换 + 量化索引调制)。该方案对裁剪、压缩、重拍照、亮度调整有较好鲁棒性:
- 水印信息包含用户 ID 与时间戳,嵌入在图像频域系数中;
- 当内容被拍照外泄,可从泄露图像中提取水印,定位泄露者;
- 水印不可见,不影响正常阅读体验。
阅后即焚
单聊支持 30 秒至 30 天多档计时。消息到时自动从双方设备与服务端删除。截屏会触发对端告警;阅后即焚图片支持一次性查看后销毁。该机制结合端到端加密,最大限度减少消息留存。
Sealed Sender 与后量子(持续演进中)
毛豆聊天的加密体系持续演进:
- Sealed Sender(密封发送者):在可行场景下隐藏发送者身份,降低元数据暴露。此能力正在逐步推广。
- 后量子密钥协商 PQXDH:在 X3DH 基础上引入后量子密钥封装,抵御「现在收集、未来破解」的量子攻击威胁。当前为预览实现,标注为持续演进中,将随标准成熟逐步默认启用。
安全代码 / Safety Number
每个 1:1 会话有唯一的安全代码(Safety Number)。你可在聊天详情中查看,并与对方线下比对(当面或通过可信渠道)。若代码一致,说明会话未被中间人篡改。当对方更换设备或密钥变更时,安全代码会更新并提示,请重新核对。
透明度:服务端能看到 / 看不到什么
| 服务端 | 能看到 | 看不到 |
| 消息正文 | ✗ | ✓ 密文 |
| 附件内容 | ✗ | ✓ 密文 |
| 加密密钥 | ✗ | ✓ 私钥在设备 |
| 路由元数据 | ✓ ID/时间 | — |
| 账号资料 | ✓ 手机号/昵称 | — |
换言之:即便服务端数据库被完整泄露,攻击者也无法解密你的历史消息与附件。
漏洞披露
我们欢迎安全研究人员负责任地报告漏洞:
安全建议
- 开启应用锁:在「设置 -> 隐私」开启应用锁,配合生物识别。
- 设置 PIN 锁:作为应用锁的备用验证方式。
- 使用强密码:系统锁屏与恢复码备份使用高强度密码。
- 核对安全代码:与重要联系人线下核对 Safety Number。
- 高敏感内容用密聊:开启 FLAG_SECURE + 阅后即焚。
- 及时更新 App:保持最新版本以获取安全补丁。