Whisper 是什么:以太坊曾经内置的链下消息层 图 1
Whisper 是什么:以太坊曾经内置的链下消息层 · 图 1

一句话定位

Whisper 是 EIP-627 定义的分布式消息协议:让两个节点通过第三方中继互传加密消息,发送方不需要知道接收方的 IP、端口或在线状态。它曾以 shh RPC 接口的形式内嵌在早期以太坊客户端里,后续版本中该接口不再随客户端主线发布,同一条技术路线由 Waku 这类独立协议继续演进。它是”链下通信层”在以太坊里最早的系统化尝试,理解它是理解第二层为什么需要一条消息轨道的历史入口。

设计动机:合约只能等人来找

以太坊账户只能被动响应交易:合约无法主动”通知”某个地址有事发生,一个 dApp 也没有原生手段向另一个地址推送数据。但早期去中心化应用需要的恰恰是这类能力——挂单方广播订单、两个陌生钱包协商通道参数、聊天室成员同步消息。走链上交易太贵且延迟高,走中心服务器又违背去信任目标。Whisper 的答案是:既然全节点本来就在互相转发区块和交易,顺手转发一段不透明的密文也无妨——节点不看内容,只管扩散。

信封、主题与订阅

Whisper 的消息单位是信封:一段对称或公钥加密的字节包,附带存活时间、工作量证明随机数和一个固定四字节主题标签。节点之间先交换兴趣声明——“我对主题 T 有订阅”——携带该主题的信封就沿 gossip 链路扩散。接收方节点拿订阅密钥尝试解密,解不开直接丢弃,解出的原文交给上层应用。密钥协商完全离线,双方不需要在网络层注册身份,这是”暗”字的第一层含义。协议还允许资源受限的轻量节点连接一个中继节点,把订阅主题在存活期内的历史消息整段重放下来。

功率因子:拿带宽换链路隐私

如果中继只按订阅转发,观察转发图就能推断谁在和谁通信。Whisper 的对策叫功率因子:在单位时间的总工作量预算内,节点自愿多转发用随机密钥加密的假信封,真消息淹没在噪音里,流量分析的成本被抬高。存活时间与工作量证明让无脑刷消息有经济成本。纸面上这套设计完整,代价是网络放大率高、带宽消耗大,工程上长期被诟病。

为什么从客户端里搬出去

Whisper 的规范状态长期停在草案阶段,实现散落在多个客户端的分支里,互操作性差。最终它从以太坊客户端主线移除,官方路线指向存储网络与更聚焦的消息协议——Waku 从 Whisper 直接派生,把消息层做成独立进程、独立规范、独立迭代。这条经验后来被反复验证:把消息、存储这类非共识功能塞进共识客户端,会让它们的迭代被共识发布节奏拖住,出安全问题时还会连累主客户端。

概念遗产

今天回头看,状态通道与闪电网络的两阶段协商、隐私交易池的意向撮合、链下订单簿广播,都继承了 Whisper 的核心直觉:链负责结算真相,密文 gossip 负责撮合与通知,两者用密码学对齐利益。评估任何链下消息方案时,可以用 Whisper 的三个老问题做检查表:密钥怎么离线建立、假名流量怎么抵抗链路分析、协议迭代怎么独立于共识客户端。

快速问答

问:Whisper 现在还能用吗? 答:以太坊主网客户端主线已不带 shh 接口;需求对应到 Waku 等独立协议与专项方案,接入前先核对协议现状与实现维护状态。

问:它和事件日志有什么区别? 答:事件日志写在链上、全网可见、要付 Gas;Whisper 传的是不进块的密文,节点只见密文与主题,不保证投递也没有共识记录。

问:为什么它不能像交易那样保证送达? 答:gossip 中继没有全局状态,存活期一过消息即蒸发;送达语义要靠上层协议自己补,这也是一直没有定案的部分。

一个常见误会

不少二手资料把 Whisper 描述成”完全匿名的通信系统”,这是误读。信封内容对中继不透明,但收发双方的流量模式——什么时间、在哪个主题上、以什么频率收发——仍可能被观察。功率因子只能部分掩盖这一层,且它本身消耗真实带宽,部署中常被调低甚至关闭。把 Whisper 读成”加密即隐私”是高估,把它吸收进专项系统的协议直觉读成遗产,更接近事实。

风险提示:本文仅作技术科普,不构成任何投资建议。