
前两天有个朋友问我:“我发的微信消息,到底谁能看到?“这个问题看似简单,细想其实挺让人后背发凉的。你每天在手机上敲下的那些话——跟同事吐槽老板、跟家人聊银行卡号、跟朋友约周末去哪儿——它们从你的手机出发,经过基站,穿过层层网络节点,最终到达对方手机。这中间经过了多少双手?端到端加密(End-to-End Encryption,简称 E2EE)就是针对这个问题给出的答案:一种让消息只有你和收信人能看懂的加密方式。今天这篇文章,我用大白话把它讲清楚。
想象一下你写了一封特别私密的信,要寄给远方的哥们。
普通聊天软件的做法是这样的:你把信交给快递员,快递员拿了一个透明的箱子装着你的信,一路送到你哥们手上。虽然箱子本身有锁(传输加密),快递员打不开箱子,但快递公司的仓库管理员可以打开箱子看里面的信,甚至抄一份存档。
而端到端加密的做法是:你在信封里用一种只有你和你哥们才知道的密码写了一封密信,然后再交给快递员。快递员拿着箱子送,仓库管理员打开箱子,看到的也只是一堆看不懂的乱码。只有你哥们拿到信封,用你们约定的密码解密,才能读出信的内容。
关键区别就在这里:中间的所有人——快递员、快递公司、仓库管理员、甚至路边的黑客——都看不懂你的信。 只有通信的两个人能读懂。
用技术语言来说,端到端加密的密钥只存在于发送方和接收方的设备上,服务器只是负责把加密后的数据"搬运"过去,它没有能力解密。
很多人一听"加密"就觉得是程序员的事,其实原理没那么复杂。我拆成三个步骤来讲:
你和小明要开始加密聊天,第一件事不是发消息,而是"交换钥匙”。
这里说的钥匙,学名叫"密钥对”——一个公钥和一个私钥。公钥可以公开,就像你家的信箱地址,谁都可以往里塞信;私钥必须保密,就像信箱的钥匙,只有你有。
你把公钥告诉小明,小明也把他的公钥告诉你。你们各自把对方的公钥存在自己手机里,这一步就完成了。
这个交换过程本身也是加密保护的,黑客没法在中间偷换钥匙。具体怎么做到的?用到了一种叫"迪菲-赫尔曼密钥交换"(Diffie-Hellman Key Exchange)的数学方法。你不需要记住这个名字,只需要知道:两个人在不安全的通道上,也能安全地约定出只有他们才知道的密码。想深入了解的朋友可以看看 Signal Protocol 的官方文档,那里面写得很详细。
现在你要给小明发消息了。你的手机用小明的公钥把这条消息"锁起来"——把"今晚火锅"变成类似"x7$kQ9@mP…“的一串乱码。
这个加密过程发生在你的手机本地,消息加密之后才通过网络发出去。也就是说,消息离开你手机的那一刻,就已经是别人看不懂的状态了。
小明的手机收到了这串乱码,用他自己的私钥"解锁”,“今晚火锅"这几个字就重新出现在屏幕上。
整个过程里,提供聊天服务的那家公司——不管它是 Signal、WhatsApp 还是蝙蝠聊天——他们的服务器上存储的永远是那串乱码。就算有人拿着法院传票去查,拿到的也是一堆无意义的字符。
这就是端到端加密的完整流程。说到底就是:密钥在用户手里,不在服务器上。

这是最容易踩坑的地方。很多软件宣传自己"使用了加密技术”,但"加密"和"端到端加密"差着十万八千里。我们来看三种常见的加密层级:
你用微信发消息,手机和腾讯服务器之间的连接确实有加密(TLS/SSL)。但这种加密只保护"路上"这一段——就像快递员用的是密封货车,路上没人能偷看。但到了快递公司的仓库,信是可以被打开的。
腾讯的服务器收到你的消息后,会解密、处理、再转发给对方。服务器上存的是明文,腾讯的员工(理论上)和配合调查的执法人员(现实中)是可以看到内容的。
有些公司会说"我们的数据在服务器上是加密存储的"。意思是仓库里的信锁在保险柜里,保险柜有密码。但问题来了:保险柜的钥匙在谁手里?在公司手里。公司随时可以打开。
这不是端到端加密,因为密钥不在用户手里。
只有当密钥只存在于你和对方的设备上,中间的任何环节——包括服务器提供方——都无法解密时,才是真正的端到端加密。
简单记:看密钥在谁手里就对了。密钥在你手上 = 端到端加密,密钥在服务器上 = 不是。
了解了原理,最实际的问题来了:那我平时用的软件,到底哪个是真加密?
我按照安全程度从高到低列一下(详细对比可以看我们的 加密聊天软件哪个安全):
Signal — 目前公认最安全的加密聊天软件,开源、端到端加密、默认开启、不留元数据。连 EFF 的安全通讯评分 都给了满分。它是加密通讯界的标杆,很多其他软件的加密协议都是参考它来的。
WhatsApp — 2016 年全面启用端到端加密,用的就是 Signal Protocol。加密本身没问题,但它归 Meta 旗下,元数据(谁跟谁聊过、什么时间聊的)是可以收集的。消息内容别人看不到,但你的社交关系网是透明的。
蝙蝠聊天(Baileys) — 国内少有的支持端到端加密的软件,功能上对标 Signal,还加了一些本地化功能。我们之前做过 Signal 和蝙蝠聊天的详细对比,有兴趣可以看看。
Telegram — 这是个需要特别说明的。Telegram 的普通聊天不是端到端加密,只是传输加密,服务器存的是明文。只有手动开启的"秘密聊天"(Secret Chat)才支持端到端加密。而且秘密聊天不支持多设备同步、不支持云端备份,每次都要重新建立。如果你用 Telegram 保护隐私,务必记得切换到秘密聊天模式。
微信 / QQ / 钉钉 — 都不支持端到端加密。这些软件用的是传输加密,服务器上有明文。这不是什么秘密,它们也没标榜过自己有端到端加密。


说到这里可能有人觉得:那用了端到端加密就彻底安全了吧?不是的。端到端加密保护的是消息传输这一个环节,但威胁不止来自传输过程。
就算消息内容加密了,但你几点钟发了消息、发了多少条、发给谁、聊了多长时间——这些元数据通常是公开的。元数据就像是信封外面的信息:寄件人、收件人、邮戳时间。虽然看不到信里写了什么,但通过分析谁跟谁联系、联系频率、联系时间,也能推断出很多信息。这个在安全领域叫做"流量分析"。
你发了端到端加密的消息给对方,对方手机上是能看到明文的。他可以截图、拍照、复制转发。端到端加密保护的是传输过程,防不了"收到消息之后的背叛"。如果你担心这个问题,可以考虑搭配使用 阅后即焚功能。
如果你的手机本身不安全——比如装了键盘记录软件、中了木马、或者手机借给了别人——那消息在加密之前或者解密之后都是可以被读取的。就好比你把保险柜的钥匙放在了门口的鞋柜上,保险柜再结实也没用。
端到端加密解决了"传输途中被偷看"的问题,但没解决"发送之前被偷看"、“接收之后被偷看”、“设备被入侵”、“账号被接管"这些问题。真正的安全是一个体系,需要加密传输、设备安全、账号安全、物理安全多管齐下。
把今天聊的东西捋一下:
端到端加密的核心原理其实一句话就能概括:密钥在用户手里,中间的所有环节都无法解密消息。 它通过密钥交换、本地加密、本地解密三个步骤,确保只有通信双方能读懂消息内容。
但它不是万能的。元数据会暴露、对方可以泄露、设备本身需要安全。端到端加密是隐私保护中最重要的一环,但不是唯一的一环。
如果你关心自己的隐私,第一步就是搞清楚自己用的软件到底有没有真加密。如果答案是"没有”,那至少对敏感信息要有所保留。或者干脆换一个真正支持端到端加密的工具。
安全这件事,从来不靠运气,靠的是了解和选择。