加密方式
- 单聊:X3DH 密钥协商 + 双棘轮(Double Ratchet),与 Signal 协议同类。
- 群聊:每个发送者一条独立的密钥链,消息带发送者的 Ed25519 签名。
- 底层算法:Ed25519、X25519、AES-GCM、HKDF-SHA256。
- 加密失败时消息不会发出,不会退回明文。
准确地说:Gather 的消息内容端到端加密,服务端不持有内容明文。下面列出具体做法,也列出目前还没做到的地方。
把话说给对的人,把钥匙留在自己手里。
消息要送达,网络必须知道一部分信息。我们不隐瞒这一点。
| 信息 | 节点 |
|---|---|
| 消息正文、图片、语音、文件的内容和文件名 | 看不到 |
| 你的昵称、头像等个人资料 | 看不到 |
| 群名称、群公告 | 看不到 |
| 群成员名单(不存放在节点上) | 看不到 |
| 你的 IP 地址与连接身份 | 你连接的入口节点能看到 |
| 你在什么时间发送消息、发送得多频繁 | 你连接的入口节点能看到 |
| 你发出的消息是发给谁的 | 你连接的入口节点能看到 |
节点之间转发时会隐藏发件人;离线暂存的消息只关联一个每天更换的信箱标识。但你自己连接的入口节点仍然知道你在和谁通信。
对方不在线时,消息以密文存放在多个节点上。存储节点只看到一个每天更换的信箱标识和密文,看不到收件人和发件人;只有收件人能证明自己有权取走。暂存最长 30 天。
安全说明只有把限制也说清楚才有意义。