节点怎么确认对面是谁:BIP-150 对等认证与防指纹 图 1
节点怎么确认对面是谁:BIP-150 对等认证与防指纹 · 图 1

节点信任的默认值太低

比特币节点对入站连接几乎不设防:任何人都能连上、要数据、试探规则边界。运维者想区别对待——比如给自家节点优先级、给可信中继更高配额——现实工具只有按 IP 段免限的白名单开关。IP 的问题很明显:会被伪造、会变、能把同一屋檐下的人捆在一起。BIP-150 在 2016 年 3 月给出了一个讲究得多的方案:用密钥证明”我是你认识的节点”,而且整个过程不能让旁观者借认证试探你的社交图谱。

挑战应答的四步

方案建立在加密信道之上:先按 BIP-151 建立加密会话(同样未落地),拿到一个会话标识,再做认证。每台节点可以持有多把三十二字节的身份密钥,规范要求每个网络接口(IPv4、IPv6、隐藏服务)各自一把,免得一个隐藏服务地址和公网地址被串到一个身份上。公钥要事先通过别的渠道交换——邮件、纸质、PGP——提案明确拒绝”首次使用即信任”。

认证定义三条消息:AUTHCHALLENGE 携带一个挑战哈希(由会话标识、一个角色字符、以及”对面应当是谁”的公钥哈希拼成);AUTHREPLY 携带对面身份密钥对会话标识的签名;AUTHPROPOSE 用来提议对本信道做认证。完整流程是双向的:请求方先亮挑战,应答方若发现挑战哈希与自己公钥算出的不符,就在回复里填六十四字节零——但不能中途断开,也不能暴露拒绝,必须继续走完全程。这个”失败也要礼貌”的规则是为了防指纹:如果拒绝表现为断线,任何路过的人都能通过观察断线把”谁认识谁”的名单还原出来。

节点维护两张用户可编辑的表:known-peers 存熟客的公钥和网络标识,authorized-peers 存被授予额度的公钥。认证只影响服务分级,不影响共识规则——它是运维层的机制。

结局与原因

BIP-150 状态 Closed,评论摘要写着”不鼓励实现”,BIP-151 同样没有进入实现。原因不复杂:它依赖的加密传输层没能推行;节点侧的运维需求被更便宜的方案覆盖了——按地址段授权特定权限、给可信对端加白名单、上传预算闸门这类配置已经够用;而”让每个节点维护公钥社交图”的运营成本对普通家庭节点过高。另外方向竞争一直存在:与其加密并认证,不如默认所有人都可疑、把服务差异做成概率与配额。

一个可以自查的对照

把 BIP-150 当作一面镜子照今天的配置:你的节点现在靠什么区分”自己人”和路人?如果答案是”对方 IP 在防火墙白名单里”,那它同时泄露在明文路由和访问日志里;如果答案是”没区分”,那每个连接的待遇一样——这正是设计者认为危险的默认。另一个值得知道的现状:比特币核心至今提供按地址段放行的白名单前缀选项,被放行的对端不受罚分与限流影响——权限粒度粗(按地址段而非按身份),运维够用,隐私归零。认证方案输掉的不是技术评审,而是部署成本对比。

留下来的想法

即便没落地,BIP-150 提的问题在 2020 年代换了名字重新出现:节点如何在不自证身份的前提下与信任同伴优先同步、如何让”连接”本身不再泄露关系。今天的答案更多在传输层(加密与可达性)和运维层(白名单权限的粒度),而不是共识层。它也是一份清醒提醒:隐私设计里,“怎么说不”和”怎么说”同样重要——拒绝的方式若是可观察的,名单本身就是泄露面。本文只讨论协议机制,不构成任何投资建议。