一、闪电消息没有裸奔阶段
比特币主网节点间的传统通信是明文,闪电网络则从第一条字节开始就不同:BOLT8 规定,两个闪电节点在交换任何通道消息之前,必须先完成一次加密且互相认证的密钥协商握手。实现上它选择的是 Noise 协议框架的 XK 模式,具体实例化为 Noise_XK_secp256k1_ChaChaPoly_SHA256——哈希用 SHA-256,曲线用比特币同款 secp256k1,对称加密用符合 RFC 8439 的 ChaCha20-Poly1305。握手成功后进入消息阶段,所有闪电协议消息都以带关联数据的认证加密(AEAD)密文传输,不存在任何明文业务报文。

二、三条消息、一点五趟往返
握手由三条固定长度的消息组成:第一击 50 字节、第二击 50 字节、第三击 66 字节,合计只需一点五趟往返。发起方必须预先知道响应方的节点公钥——这正是 XK 模式的先验消息条件:发起方以对方的静态公钥参与第一轮椭圆曲线密钥协商(ECDH),随后两轮再分别引入双方的一次性临时密钥。握手过程中每击都附带一个密文长度为零的 AEAD 载荷,也就是只发认证标签不发数据,对方的 MAC 校验通过才代表”到目前为止链路上没有任何中间人”,任何一次校验失败都要求立即断开连接。
三、收方身份不出局的隐身术
XK 模式有个常被忽略的隐私红利:响应方的节点公钥在握手中从不以任何形式直接上线,认证完全通过一系列 ECDH 结果与摘要校验隐式完成。旁听者能从流量里观察到的只是两个临时公钥的交换,无法据此确认与谁在说话。握手全程所有收发字节都被增量卷进一个叫 h 的握手摘要,h 本身也从不传输,它充当每段零长载荷的关联数据,把”先发的内容”绑死在”后发的校验”上。会话密钥由链接密钥 ck 经 HKDF 派生,每个会话都必须用强随机数现生成临时密钥对,不复用。
四、密钥轮换与版本位
会话不是一劳永逸:BOLT8 定义了密钥轮换机制,每条方向的数据密钥在累计足够多的消息后被强制换新,新密钥同样从握手派生的链接密钥推导,旧密钥作废。此外每条握手消息以一个版本字节开头,接收方对未知版本号必须直接拒绝,防止”以为说同一种方言”的静默错位。
五、这层加密不能证明什么
BOLT8 保证的是链路上窃听者读不到内容、改不了内容、冒充不了双方,边界也要看明白。它不掩盖你连了哪些节点——连接本身的图谱可见性要靠别的手段收敛;它不保护终端设备,节点磁盘被读走时握手再漂亮也无济于事;它也不认证通道对手的链下行为诚实性,那是承诺交易与惩罚机制的责任田。理解一次握手省了哪几趟往返、藏住了谁的公钥,比记住算法名字更能帮你判断:闪电网络把”谁在跟谁说话”这个隐私问题,放在传输层解决了一部分,把”对面说话算不算数”放在协议层解决了另一部分。
六、和比特币 P2P 层对照着看
比特币主网长期运行明文 P2P,节点间交换的区块与交易内容本身无保密需求;BIP324 这类新近标准化工作才给连接层补上加密,动机是防运营商级别的流量识别与中间盒干扰。闪电网络则相反:通道状态、HTLC 内容、路由路径全部是敏感信息,哪怕内容无秘密、流量模式本身就是元数据。于是同一套密码学积木在两层承担了不同任务:主网传输加密解决”别人能否识别你在同步什么”,闪电传输加密解决”别人能否拼出你的支付图谱”。顺带一提,闪电的节点公钥同时参与通道数据签名,BOLT8 用它做认证复用的正是这同一把身份钥匙——这也提醒运维者:节点私钥泄露等于连接层与协议层同时沦陷,轮换节点身份必须连同所有通道一起迁移,成本远高于换一条 TLS 证书。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。