1.4 万 Star 的 SimpleX Chat,靠「没有账号」打败了所有隐私聊天软件
- 采用无账号架构,通过一次性链接建立连接,服务器无用户标识符
- 使用单向消息队列和分散SMP服务器,服务器互不通信且不存用户记录
- 加密采用Double Ratchet加NaCl cryptobox,并加入后量子抗性密钥交换
- 极致隐私导致易用性差,无账号恢复、冷启动难、用户体验不精致
- 验证了“掀桌子原则”,证明通讯不需要全局身份,可质疑默认约束
先抛一个问题,你觉得一个聊天软件,最少需要什么。
你大概率会脱口而出,账号。要么是手机号,要么是用户名,总得有个东西标识「你是你」,别人才找得到你。
这几乎成了所有通讯软件的出厂设定。微信要手机号,Telegram 要手机号,Signal 要手机号,WhatsApp 直接就拿手机号当账号。
但 SimpleX Chat 给出了一个相当激进的答案,一个用户标识符都不要。
没有用户名,没有手机号,没有账号,连随机生成的用户 ID 都没有。截止 2026 年 6 月 28 日,simplex-chat/simplex-chat 在 GitHub 上有 1.4 万 Star,主语言居然是 Haskell,被 Privacy Guides、Whonix、Kuketz-IT Security 这些硬核隐私社区联合推荐,还过了 Trail of Bits 的安全审计。
这件事听着有点反常识。没有账号,两个人怎么建立连接。这背后是一整套被重新设计的网络架构。
它真正砍掉的,不是账号,是「被关联的可能性」
要理解 SimpleX 为什么激进,得先看清楚传统聊天软件的隐私漏洞在哪。
哪怕一个软件号称端到端加密(比如 Signal),它也解决不了一个更底层的问题,元数据(metadata)。服务器虽然看不到你聊了什么内容,但它知道谁在和谁聊、什么时候聊、聊了多久、从哪个 IP。
而这些元数据,往往比内容本身更危险。知道你每天都在凌晨和一个特定号码通话,比知道你们聊了什么,信息量还大。
传统架构的根子在于,它用一个全局唯一的用户标识符(手机号、user ID)来路由消息。只要这个标识符存在,服务器就能把你的所有联系关系串成一张图。
SimpleX 砍的就是这一刀。
它的核心设计是,服务器上没有任何用户标识符。两个用户要建立连接,不是通过「加好友」,而是通过一次性链接或扫码。连接建立后,系统为这条单向通道生成一对一次性的「队列地址」,而这个地址和你这个人,在任何全局意义上都无法对应。
结果就是,SimpleX 的服务器根本不知道这条消息是谁发的、发给谁。它只看到一个加密队列进了一条消息,过一会儿被某个客户端取走了。
这不是「换个更好的锁」,这是「把门牌号都拆了」。
simplex 队列,一个反直觉的网络拓扑
它的网络拓扑很有意思,既不是 P2P,也不是联邦制(federated),而是它自己发明的「simplex relay」模型。
我读完它的协议文档后,觉得这个设计有几个很巧的地方。
每两个用户之间的连接,用的是单向消息队列(unidirectional queue)。你要和一个人聊天,得有两条队列,一条你发他收,一条他发你收。每条队列有两个地址,一个给发送方用,一个给接收方用,可选第三个给 iOS 推送。
这些队列由分散的 SMP 服务器中转,但服务器之间互不通信,不存用户记录,消息被接收方取走后立即删除。当前的 SMP 服务器实现甚至只在内存里暂存消息,持久化的只有队列记录本身。
你想想看这意味着什么。
n 个用户的网络里,最多可以有 n * (n-1) 条消息队列。要观察整个社交图谱,攻击者得同时攻破海量分散的服务器,而且每条队列的地址还是一次性的、可轮换的。这比任何 P2P 或联邦制方案都更难画出「谁认识谁」的关系图。
它还有一个我特别欣赏的细节。所有消息的时间戳等元数据,都被包在加密信封里发给接收方,服务器自己看不到。为了防重放攻击,每个客户端命令都要带 tlsunique 通道绑定作为 session ID,并用每条队列的临时密钥签名。
从 v6.0 开始,客户端默认启用 private message routing,把你的 IP 也藏起来。这是 per-message 级别的传输匿名,比 Tor/VPN 那种 per-connection 匿名颗粒度更细。
一层一层叠起来,SimpleX 在做的事,是从架构层面消灭可被关联的数据。
加密这一层,它比 Signal 还多走了一步
很多人会问,那它的加密强度怎么样。答案是,不输 Signal,某些维度还更狠。
消息内容用的是和 Signal 一样的 Double Ratchet 算法,提供前向安全(每条消息用独立临时密钥)和后向恢复(密钥频繁重新协商)。初始密钥协商用两对 Curve448 密钥。
但它还多套了一层。每条消息队列上额外用 NaCl cryptobox 做端到端加密,目的是未来支持冗余(同一条消息走多个服务器)时,不让攻击者在 TLS 被攻破的情况下看到相同密文。
最激进的是 v5.6 加进来的后量子抗性密钥交换。它在 double ratchet 的每一个 ratchet 步骤都做一次后量子密钥交换,不只是初始协商。Apple 的 iMessage PQ3 也有类似设计,SimpleX 把这个思路用到了聊天协议上。
说实话,这种加密堆叠的偏执程度,在通讯软件里是顶级的。它假设的是一个,「TLS 已经被攻破、服务器是恶意的、网络在被全程监听」的最坏场景,然后在这个场景下依然保证你和谁说话这个事实不被泄露。
极致隐私的代价,不是所有人扛得住
聊到这我必须把另一面讲清楚,否则就是软文了。
SimpleX 的隐私是极致的,但极致的隐私是有代价的,这个代价就是易用性。
最大的门槛是,没有账号就没有「找回」这件事。你换手机、丢设备,你的所有连接和聊天记录就没了,因为没有任何中心化的身份帮你恢复。它把主权完全交还给了你,也把风险完全交还给了你。对大多数人来说,这个心理成本太高。
其次是冷启动难。微信、Telegram 之所以能成网络,是因为账号体系让「找朋友」这件事零成本。SimpleX 没有账号,你每加一个联系人,都得扫码或发一次性链接,没法搜索、没法推荐、没法「你可能认识」。这让它天生不适合做大众社交,只适合小圈子的强隐私通讯。
再有,它的用户体验还谈不上精致。客户端虽然有 iOS、Android、桌面、CLI,但活跃用户规模和资源都远不如商业 IM,bug、卡顿、功能缺失都会遇到。1.4 万 Star 在隐私圈是大项目,放到大众通讯软件里就是个小众社区。
最后是信任成本。它过了 Trail of Bits 的审计,这点是加分项,但它的核心团队规模不大,长期维护和资金都靠捐款(GitHub Sponsors、加密货币)。一个承载你秘密通讯的工具,能不能再活十年,是个真实的风险。
所以我的判断是,SimpleX 适合对隐私有极端要求的少数人,记者、活动人士、安全研究员、不想被任何平台画像的极客。对普通用户,Signal 已经足够好,别为了一个理论上的更强隐私,去承担换设备丢一切的代价。
掀桌子原则,把「默认如此」拆开看看
看完 SimpleX 的协议文档,我最大的收获不是那些加密细节,而是一个更上层的认知。
我们太久地习惯了「账号是通讯的前提」这件事,以至于忘了问一句,为什么必须这样。
SimpleX 用一整套重新设计的架构证明,通讯不需要全局身份。你可以不知道对方是谁、对方也可以不知道你是谁,只要你们能在某条一次性通道上交换密钥,消息就能送达,而且这个过程可以做到任何第三方都无法关联。
这件事的隐喻,其实超出了聊天软件。它验证了一个可迁移的工程判断,我把它叫**「掀桌子原则」**。很多我们以为不可妥协的约束,不是因为它最优,只是因为它对某个既得方有利,于是成了行业默认,没人去动它。SimpleX 掀了「账号是通讯前提」这桌子,证明不这样也行。
这个判断放到任何系统设计上都成立。做架构选型时,值得把那些「默认如此」的东西单拎出来问一句,这个约束是物理必然,还是历史惯性。是物理必然的(比如密码学定律)就认,是历史惯性的(比如账号体系、比如某个所谓「行业标准」流程),就可能藏着最大的创新空间。SimpleX 掀桌子的代价是它注定小众,但它证明了那张桌子是可以掀的。
当然,掀桌子的代价是,它注定小众。
但任何一个领域要往前走,都需要有人先把那个「默认如此」的东西拆掉看看,证明「不这样也行」。SimpleX 在通讯领域做了这件事。哪怕你不用它,它也值得每一个做系统设计的人,认真读一遍它的协议。
因为它会让你重新审视,自己手里那些「理所当然」的设计,到底有多少是真正的约束,又有多少只是惯性。
评论互动