协议演进 / BIP/比特币改进提案 / BIP-156
BIP-156
交易先沿随机选定的一条路径单线传播(茎阶段),再按常规扩散(绒阶段),以削弱对手把交易关联到源 IP 的能力。本 BIP 目前处于已关闭状态。
一、档案卡
| 编号 | BIP-156 |
|---|---|
| 标题 | Dandelion - Privacy Enhancing Routing |
| 作者 | Brad Denby <[email protected]>, Andrew Miller <[email protected]>, Giulia Fanti <[email protected]>, Surya Bakshi <[email protected]>, Shaileshh Bojja Venkatakrishnan <[email protected]>, Pramod Viswanath <[email protected]> |
| 指定日期 | 2017-06-09 |
| 层级 | Peer Services(对等服务) |
| 类型 | Specification(规范类) |
| 状态 | Closed(已关闭) |
| 阅读版 | https://bips.dev/156 |
| 官方原文 | https://github.com/bitcoin/bips/blob/master/bip-0156.mediawiki |
二、放在哪一族
交易传播与网络层隐私一族。比特币的隐私短板不只在链上:一笔交易最初从哪个节点冒出来,本身就可能把交易与某个 IP 地址关联起来。BIP-156 处理的正是广播环节的去匿名化风险,与链上地址复用、金额关联等问题分属不同层面。
它的学术来源是 Dandelion 论文(原文 References 列有 Sigmetrics 2017 的 Dandelion 论文与 Sigmetrics 2018 的后续工作 Dandelion++ 论文,两者是研究文献,不是 BIP)。在本仓库内,原文文件头没有 Requires、Replaces 等关系字段;它与既有传播方式的关系是对照关系——既有的扩散(diffusion)是它要修补的对象,而不是它依赖的规范。
三、它要解决什么
3.1 扩散为什么会泄密
没有 Dandelion 时,一个节点生成交易后,会以相互独立的指数延迟把交易发给各个对等节点。学界称这种方式为扩散(diffusion)。原文 Abstract 与 Motivation 指出,这种传播在统计上是对称蔓延的:消息以源头为中心向四周散开,网络对手——尤其是布设了间谍节点、相互勾结的对手——可以据此把交易与源 IP 地址关联起来。
更糟的是指纹攻击(fingerprint attack):若对手是掌握 P2P 网络拓扑的僵尸网络式对手(原文指出这种规模的僵尸网络常见且便宜,对手可用探测消息学到网络结构),它可以先离线模拟交易传播,为每个节点生成“指纹”,再把间谍节点实际观察到的传播轨迹与指纹比对。原文的模拟结论是:这类对手在每个节点平均观察不到十笔交易,就能对整个网络实现完全去匿名化。
3.2 目标与边界
Dandelion 的目标是给出形式化的匿名性保证,且做法务实、轻量:不引入额外加密机制,而只改交易的路由方式。原文同时把边界说清:
- 它保护的是整个网络层面的匿名性底线,让不使用 Tor 的普通用户也受益,采用率越高收益越大;哪怕邻居都不支持,最坏情形下交易也会先多走一跳再扩散;
- 它的保证是概率性的,且不覆盖节点已被对手包围(eclipse)、或被 ISP 级别对手专门盯防的情形——关心定向去匿名化的人仍应使用 Tor;
- 仅靠路由的方案受基本下界约束,不可能做到完美匿名;原文的结论是它在“不加额外加密”的同类方案中提供了接近最优的保证。
四、规则本身
4.1 两个阶段:茎与绒
Dandelion 分三个环节理解:先构造一张隐私图,再沿隐私图传播,最后回到普通扩散。
- 茎阶段(stem phase):交易先沿随机选定的一条路径逐跳单线前进,而不是一上来就向所有对等节点扩散;
- 绒阶段(fluff phase):交易在茎上走过随机跳数后,转入现有的扩散方式,向全网铺开。
名字即由此而来:先是一根茎,再散作蒲公英绒。机制的关键有二:打破扩散的对称性;让来自不同源头的交易在同一条路径上混合前进。
4.2 隐私图:每个节点选两个 Dandelion 目的地
隐私图是现有 P2P 网络的一张子图,以完全去中心化的方式构造:每个节点从自己的出站对等节点中随机选出少数几个作为“Dandelion 目的地”,从入站连接到达的茎阶段交易就转发给这些目的地。
原文讨论过理想形态:哈密顿回路能给出接近最优的隐私保证,但在去中心化、无信任的环境里构造它并不可行。实际推荐是:每个节点从出站对等节点中无放回地均匀随机选两个目的地,测试表明这一做法在隐私接近的同时鲁棒性更好。参考实现中目的地个数上限参数 DANDELION_MAX_DESTINATIONS 即取 2;节点可自选不同取值而不脱离隐私图。
4.3 按入站边路由:防住指纹攻击的核心
若每个节点对每笔茎交易都重新随机挑一个目的地转发,指纹攻击就会得手——同一源头的两笔交易会走出两条不同的路径,对手从而得到多个可聚合比对的数据点。
原文因此规定“按入站边路由”(per-inbound-edge routing):每个入站对等节点被固定映射到同一个 Dandelion 目的地,凡从该入站边到达的交易,一律转发给同一个目的地;映射时优先从“已挂路线最少”的目的地集合中均匀随机挑选。这样,同一源头的交易总是走同一条路径,对手被限制在只能观察到单个样本的位置,构造不出有用的指纹。
4.4 何时转入绒阶段:十分之一概率与路线洗牌
每个节点在转发茎交易前掷一次加权硬币:原文取 10% 的概率让交易就此转入绒阶段、按扩散发出,其余概率继续沿茎前进。这个取值是原文测试中在茎长与传播延迟之间的平衡点;节点可自选不同概率而不脱离隐私图。
Dandelion 路线映射还要定期重洗:映射表平均每十分钟清空并重建一次(原文说明此值是启发式选取的,目的是让对手难以学到隐私图),且重建间隔本身必须是随机的。
4.5 茎池与禁运计时器
数据结构上,茎交易与普通交易分开存放:普通内存池(mempool)不变,另设一个同类实例 stempool 专放茎交易。信息只从 mempool 流向 stempool;茎交易到达时只进 stempool、不进 mempool,普通交易到达时两者都进;茎交易一旦转入绒阶段,才进入 mempool。茎交易与普通交易的区别仅在网络消息类型上,必须可区分。
鲁棒性靠“禁运”(embargo)兜底:茎路径是单线的,路径上任一节点掉线,交易就会停摆。因此每个转发茎交易的节点在收到时启动一个随机时长的计时器;若计时到期时该交易仍未以普通交易的形式出现在内存池中,节点就自行把它转入绒阶段、按扩散发出。由此,即使邻居全都不支持 Dandelion,交易也不会被困死在茎上。
兼容性:支持 Dandelion 的节点在不支持的节点看来与普通节点无异;支持方通过探测消息识别对端是否同样支持。
五、谁必须动
普通持币人:无直接动作。它改变的是交易被广播时的走法,不改变交易内容、手续费或确认规则;收益是源头更难被网络观察者定位。
钱包开发者:一般不涉及;只有自带完整 P2P 广播逻辑的实现才需要实现茎/绒两阶段与 stempool 逻辑。把交易交给全节点代广播的轻钱包,其隐私取决于所连节点的实现。
全节点:本 BIP 的实现主体:维护目的地与按入站边的路线映射、定期洗牌、分池存放、执行绒化概率与禁运计时器。
共识层:完全不动。这是纯粹的 P2P 路由层提案,区块与交易的有效性规则不受任何影响。
六、现在算不算数,以及一个常见误读
状态为 Closed(已关闭)。按现行 BIP 状态体系,这意味着该提案已被关闭,不再是有效的现行规范——不能把它当作“比特币网络现在就是这样广播交易的”来引用。今天节点实际如何传播交易,由各实现自身的网络策略决定,不以 BIP-156 为准。它留下的价值是把一类攻击(扩散去匿名化与指纹攻击)和一套被严格论证过的对策(茎/绒两阶段、按入站边路由)完整记录在案。
常见误读:
“Dandelion 是一种加密混币技术,用了它交易就完全匿名,连专门盯防也防得住。”
不对。原文反复强调它只做路由、不引入额外加密机制,给出的也是概率性保证,并受“仅靠路由的方案”的基本下界约束。它明确不覆盖节点被包围(eclipse)和被 ISP 级对手定向盯防的情形——原文的说法是,这类用户仍应使用 Tor。把它读成“全能匿名开关”,恰好读反了作者划定的边界。
七、延伸
- 阅读版:https://bips.dev/156
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0156.mediawiki
- 相关:原文未在文件头列依赖或前后任 BIP;其学术来源(Dandelion 与 Dandelion++ 论文)与参考实现链接见官方原文的 References 与 Implementation 两节
- 仓库总目录:https://github.com/bitcoin/bips
