Caloogy 文章
English

端到端加密对比:WhatsApp、Signal、Telegram 和自建方案

日期
2026 年 10 月 30 日
系列
密码学
阅读
4 分钟
主题
E2eeSignal protocolWhatsappTelegram

一句话版本

"加密"有两种完全不同的意思:传输加密只保护"你的手机到服务器"这一段,服务器能看到明文;端到端加密(E2EE)只有通信双方能解开,服务器只转发密文。 主流应用在这件事上差别很大:WhatsApp、Signal、iMessage 默认端到端加密;Telegram 的普通聊天和所有群聊不是端到端加密,只有手动开启的"私密聊天"才是。此外,端到端加密保护的是内容,不保护"谁在什么时候和谁说话"这类元数据。

全文分三层:

  1. 通俗理解:寄挂号信和寄保险箱
  2. 实际用处:各家应用逐一对比
  3. 原理与工程要点:Signal 协议、身份核对、群聊和多人通话的难点、元数据与备份

第一层:通俗理解

1.1 两种"加密"

比喻 服务器能看到内容吗
传输加密 你把信交给邮局的密封邮车,邮车很安全,但邮局拆开分拣,再装上另一辆密封邮车送出去 能
端到端加密 你把信锁进一个只有收件人有钥匙的保险箱,邮局只负责搬箱子 不能

很多应用宣传"我们的消息是加密的",指的可能只是第一种。

1.2 为什么有的应用不做端到端

传输加密方便实现很多功能:

端到端加密下,这些都变得困难,因为服务器什么都看不到。


第二层:实际用处

一对一聊天 群聊 语音视频通话 默认开启 身份核对方式
Signal E2EE E2EE E2EE 是 安全码 / 二维码
WhatsApp E2EE(2016 年起全面默认,采用 Signal 协议) E2EE E2EE 是 安全码 / 二维码;密钥透明
iMessage E2EE E2EE FaceTime E2EE 是 联系人密钥验证
Facebook Messenger E2EE(2023 年底起默认) 逐步推进中 E2EE 是 —
Telegram 普通聊天:仅传输加密;私密聊天:E2EE(需手动开启) 仅传输加密 一对一通话 E2EE 否 通话时双方核对几个表情符号
Zoom — 可选 E2EE 可选 E2EE 否 —

几个值得注意的细节:


第三层:原理与工程要点

3.1 Signal 协议的两个部分

阶段 算法 解决的问题
建立会话 X3DH(现在是 PQXDH) 对方不在线也能安全地开始对话:服务器预先存放对方的一批一次性公钥,发起方组合做几次 DH
收发消息 双棘轮 每条消息一个新密钥,提供前向保密和事后恢复(见《前向保密》)

服务器的角色只是"公钥分发处"和"密文转发站"。

3.2 端到端加密的软肋:你怎么知道对方的公钥是真的

端到端加密依赖一个前提:你拿到的对方公钥,确实是对方的。如果服务器(或攻破服务器的人)给你一个假公钥,它就能在中间解密再加密,当一个隐形的中间人。

对策都是带外核对(见《带外核对》):

3.3 群聊和多人通话为什么难

3.4 自建方案的检查清单

如果自己搭建通话或消息系统,可以对照这几个问题:

问题 说明
服务器能看到明文吗? 一对一 WebRTC 是端到端的;经过 SFU 就不是
有前向保密吗? 实时通话通常有;存储的内容通常没有(见《前向保密》)
对方身份怎么确认? 如果公钥或证书指纹经过自己的服务器传递,服务器被攻破就能做中间人;需要提供短码核对
存储的数据怎么加密? 用接收方公钥做信封加密(见《信封加密》),服务器只存密文
元数据呢? 谁、何时、和谁、多长时间,通常仍然暴露给服务器

3.5 元数据

端到端加密保护的是内容。但"谁在什么时间、和谁、联系了多久、多频繁"这些元数据,往往比内容更能说明问题。一位前美国情报官员曾直言:"我们根据元数据杀人。"Signal 用"密封发件人"等技术尽量减少服务器能看到的元数据;大多数应用则仍然能看到完整的社交关系图。


总结

层次 要点
区分 传输加密:服务器能看;端到端加密:服务器只转发密文
现状 Signal、WhatsApp、iMessage 默认 E2EE;Telegram 默认不是
软肋 公钥真假要靠带外核对或密钥透明;云备份;元数据
难点 群聊(MLS)、多人通话(SFU 需要额外一层帧加密)