安全与隐私

我们能保证什么,不能保证什么

准确地说:Gather 的消息内容端到端加密,服务端不持有内容明文。下面列出具体做法,也列出目前还没做到的地方。

把话说给对的人,把钥匙留在自己手里。

加密方式

  • 单聊:X3DH 密钥协商 + 双棘轮(Double Ratchet),与 Signal 协议同类。
  • 群聊:每个发送者一条独立的密钥链,消息带发送者的 Ed25519 签名。
  • 底层算法:Ed25519、X25519、AES-GCM、HKDF-SHA256。
  • 加密失败时消息不会发出,不会退回明文。

身份与账号

  • 不需要手机号、邮箱或实名,身份是本机生成的密钥对。
  • 私钥和助记词只保存在你的设备上,节点和我们都拿不到。
  • 因此助记词一旦丢失,没有人能帮你找回账号。

节点能看到什么

消息要送达,网络必须知道一部分信息。我们不隐瞒这一点。

信息节点
消息正文、图片、语音、文件的内容和文件名看不到
你的昵称、头像等个人资料看不到
群名称、群公告看不到
群成员名单(不存放在节点上)看不到
你的 IP 地址与连接身份你连接的入口节点能看到
你在什么时间发送消息、发送得多频繁你连接的入口节点能看到
你发出的消息是发给谁的你连接的入口节点能看到

节点之间转发时会隐藏发件人;离线暂存的消息只关联一个每天更换的信箱标识。但你自己连接的入口节点仍然知道你在和谁通信。

离线消息怎么存

对方不在线时,消息以密文存放在多个节点上。存储节点只看到一个每天更换的信箱标识和密文,看不到收件人和发件人;只有收件人能证明自己有权取走。暂存最长 30 天。

已经做的元数据保护

  • 节点之间转发消息时隐藏发件人。
  • 在线状态使用每天轮换的标识。
  • 推送通知只用来唤醒设备,不携带任何身份或内容。
  • 节点日志中的地址做了脱敏。

节点网络

  • 节点之间对等连接,基于 libp2p 与 Kademlia DHT,没有中心数据库或账号服务器。
  • 节点需要持有经认可的运营方签发的证书才能加入网络(许可制),每个节点在本地自行验证。
  • 应用内置多个入口并验证签名,当前节点不可用时自动切换。

发布与构建

  • 节点的版本发布清单需要 3 把发布密钥中的任意 2 把共同签名才有效,带防回滚与过期时间;节点程序不会自行下载更新。
  • 节点程序采用可复现构建流程,并附带软件物料清单(SBOM)。

目前还没做到的

安全说明只有把限制也说清楚才有意义。

  • 你连接的入口节点仍然知道你的消息发给了谁;对这一层元数据的进一步保护还在设计中。
  • Gather 目前只经过团队内部的安全审查,尚未经过独立第三方审计。
  • 节点目前由我们运营,还没有独立的第三方运营方。
  • 本机上的聊天记录依赖手机系统自身的加密与锁屏保护,请为手机设置锁屏密码。
  • 语音与视频通话在部分网络环境下可能无法接通。