协议演进 / BIP/比特币改进提案 / BIP-150

BIP-150 对等节点认证

让节点用预共享的身份公钥在加密通道上相互认证,确认对方身份并据此开放或限制节点服务,且不给指纹识别留机会。本 BIP 目前处于已关闭状态。

一、档案卡

档案卡
编号BIP-150
标题Peer Authentication
作者Jonas Schnelli <[email protected]>
指定日期2016-03-23
层级Peer Services(对等服务)
类型Specification(规范类)
状态Closed(已关闭)
阅读版https://bips.dev/150
官方原文https://github.com/bitcoin/bips/blob/master/bip-0150.mediawiki

二、放在哪一族

P2P 网络身份与隐私族的一篇,与它的前置文档是一对:

BIP-151:对等通信加密。本篇的认证必须跑在它建立的加密通道之上——原文第一条规范就写明,加密会话未建立,不得开始认证。

两者之后,这条路线由 BIP-324(v2 P2P 加密传输协议)以另一套设计承接;本篇与 BIP-151 的状态均为 Closed。

在本篇内部,认证解决的问题不是“数据会不会被偷看”(那是加密的事),而是“对面到底是不是我以为的那个节点”。

三、它要解决什么

原文的设想从节点运营者的两个需求出发:

原文列出的认证收益包括:

难点在于隐私:认证过程本身不能变成一种“探测”工具——随便连上来问一句,就能试出对方是不是某个身份。整篇规范的哈希问答设计,都是为了在证明身份的同时不给指纹识别留机会。原文同时明说:本篇不做“首次使用即信任”(TOFU),身份公钥必须事先通过其他渠道交换。

四、规则本身

4.1 前提与总则

4.2 两份本地名单与身份密钥

每个支持认证的节点要维护两份可由用户编辑的“数据库”:

本地身份密钥为 ECC 密钥(私钥 32 字节),一个节点可以配置多把。原文特别提醒:每个网络接口(IPv4、IPv6、Tor)应使用各自独立的身份密钥,否则可能把某个 Tor 地址与某个 IP 地址关联起来。

4.3 双向认证的四步问答

认证要求双方互相认证,全程只交换哈希与签名,不直接亮出公钥:

  1. 请求方发送 AUTHCHALLENGE(哈希);
  2. 应答方回 AUTHREPLY(签名);
  3. 请求方发送 AUTHPROPOSE(哈希);
  4. 应答方再发 AUTHCHALLENGE(哈希),请求方再回 AUTHREPLY(签名)。

三个消息的构造都有防探测设计:

配套的隐私纪律是:验证失败也不能撕破脸。原文规定,即便签名无效,请求方仍须继续流程、改发 32 字节随机数充当 AUTHPROPOSE;认证过程中途断开连接或中止,同样不被允许——因为“断开”这个动作本身就会泄露“对不上”的信息。

4.4 认证后重新换钥与身份地址

第二次 AUTHREPLY 完成之后,双方必须按 BIP-151 重新生成对称加密密钥(re-keying),但换钥的推导哈希要把双方的身份公钥一并算进去,使加密会话与已认证的身份绑定。

为方便人工核对,身份公钥应以“身份地址”的形式展示与记录:对公钥做 ripemd160(sha256) 后作 Base58Check 编码,前缀字节为 0x0F、后跟身份地址版本号 0xFF01,外观上如同一个可比对的指纹字符串。

4.5 兼容与代价

向后兼容:不支持本篇的节点会忽略新的 AUTH* 消息。原文自陈的缺点是慢:当 authorized-peers 名单很大时,应答方要对名单里的每个公钥逐个算哈希比对 AUTHPROPOSE,名单越大越慢。

五、谁必须动

普通持币人:不涉及钱包与地址体系。这里的“身份”是节点的身份,不是用户的比特币身份;不动私钥,也不上链。

钱包开发者:直连节点的轻钱包若想使用受限服务,需要实现这套认证握手并管理 known-peers;托管型与接口型钱包一般不涉及。

全节点与矿工:完全自愿。节点运营者自行决定是否配置身份密钥、维护两份名单、以及把哪些服务设为“认证后可用”。不实现的节点照常联网,只是进不了别人的白名单。

共识层:本篇不触碰共识。它全程是节点之间的可选会话层协议,认证与否不影响区块与交易的有效性。

六、现在算不算数,以及一个常见误读

状态为 Closed(已关闭)。这套认证方案没有成为比特币 P2P 网络的通行做法;它的前提 BIP-151 同样为 Closed,而节点间加密这条线后来由 BIP-324 以不同设计推进。本篇档案序言中亦留有一句评论摘要,记为“有一人表示不鼓励实现(Discouraged for implementation)”——这属于提案讨论的留痕,本页如实转述,不另作评价。

常见误读:

“BIP-150 是给比特币地址做实名认证。”

完全不对。它认证的是节点与节点之间的连接身份,材料是运营者事先私下交换的节点身份公钥;它不登记地址、不绑定用户、不产生任何链上记录。把 P2P 层的运维认证读成用户层面的身份制度,是把两个层面混在了一起。

七、延伸

本页内容整理自 bitcoin/bips 仓库与 bips.dev,事实已与仓库核对;解读仅供学习参考。