协议演进 / BIP/比特币改进提案 / BIP-451
BIP-451
规定钱包如何把粉尘攻击送来的小额 UTXO 安全烧掉:整笔打进 OP_RETURN、金额全作手续费,按地址分开处理且不伤隐私。本 BIP 目前处于草案状态。
一、档案卡
| 编号 | BIP-451 |
|---|---|
| 标题 | Dust UTXO Disposal Protocol |
| 作者 | bubb1es <[email protected]>, haris <[email protected]> |
| 指定日期 | 2026-04-28 |
| 讨论日期 | 2026-01-25 |
| 层级 | Applications(应用) |
| 类型 | Specification(规范类) |
| 状态 | Draft(草案) |
| 阅读版 | https://bips.dev/451 |
| 官方原文 | https://github.com/bitcoin/bips/blob/master/bip-0451.md |
二、放在哪一族
钱包隐私防护与 UTXO 管理族,处理的是“收到不想要的小钱之后怎么办”。
它与 BIP-125(Opt-in RBF,手续费替换)关系最紧:原文的第三方批量合并机制正是靠 RBF 把内存池里多笔未确认的处置交易替换成一笔来完成的。除此之外,它依赖的都是既有机制——OP_RETURN 输出的中继策略、ALL|ANYONECANPAY 签名哈希类型——不引入任何新规则。原文的相关工作还提到 dust-b-gone、dusts 两个既有工具,本提案是把这类实践标准化的一次尝试。
标准化的目的,原文列了四条:统一格式使处置交易无法被用来指纹识别用户用的是哪款钱包;统一签名约定使互不相干的人的处置可以合并成一笔,省区块空间;把隐私最佳实践写成规范,避免各家实现各犯各的错;统一标记也便于链上分析工具识别处置交易、反过来追溯粉尘攻击的来源。
三、它要解决什么
粉尘攻击(又称强制地址复用攻击)是成熟的隐私威胁:攻击者向大量地址各打一笔极小金额。当钱包日后把这些粉尘 UTXO 与正常 UTXO 合并花费时,攻击者用“共同输入所有权启发式”——同一笔交易的全部输入推定为同一人所有——就能把原本互不关联的地址串到一起,并关联到后续花费,削弱用户隐私。
业界通行对策是把粉尘 UTXO“锁定”、永不花费。原文指出锁定本身带来四个问题:
- UTXO 集合膨胀:永不花费的粉尘永久占用全体全节点必须维护的 UTXO 集合空间;
- 钱包杂乱:积攒的粉尘干扰界面与选币(coin selection);
- 误合并:用户可能在正常交易中不慎把粉尘带上,正中攻击者下怀;
- 锁定脆弱:锁定只是钱包软件层面的状态,迁移钱包、用种子恢复、软件缺陷、继承等场景都可能让粉尘意外解锁,隐私防线随之失效。
改走 OP_RETURN 销毁则有几重好处:OP_RETURN 输出可证明不可花费、不进 UTXO 集合;没有找零输出,就没有新地址可被关联;粉尘被永久移出钱包;处置费率虽高但金额全来自粉尘本身,受害者不用另掏钱;矿工得到补偿。
四、规则本身
4.1 交易格式(硬性要求)
一笔合规的粉尘处置交易必须同时满足:
整体
- nLockTime 必须为区块高度 0——所有实现用同一值,既防指纹识别,也因金额极小而不必顾虑手续费狙击;
- 费率不得低于最低中继费率(原文写作时为 0.1 sat/vB);
- 基础体积至少 65 字节,以满足网络现行的最小中继体积标准性规则。
输出:恰好一个,且必须是 OP_RETURN
- 输出金额为零,全部输入金额都成为手续费;
- OP_RETURN 数据固定为三字节 ASCII 字符串 “ash”,字节序列为
0x6a 0x03 0x61 0x73 0x68(OP_RETURN、OP_PUSHBYTES_3、“ash”)。选 “ash”(灰烬)是取“烧掉粉尘”之意;统一的小输出既满足 65 字节下限,也使所有输入类型共用同一输出脚本、可以互相合并。
输入
- 全部输入的 nSequence 设为 0xFFFFFFFF,不发 BIP-125 的 RBF 信号;
- 全部输入使用签名哈希类型 ALL|ANYONECANPAY(0x81):ALL 保证签名只承诺打到那个 OP_RETURN 输出,ANYONECANPAY 保证签名只绑自己这一个输入、别人可以追加输入;
- Taproot(P2TR)密钥路径花费必须显式追加 0x81 字节,因为 Taproot 默认的 SIGHASH_DEFAULT 不含 ANYONECANPAY 语义;
- 只能处置已确认至少 1 个区块的 UTXO——防止攻击者双花掉粉尘使处置落空,反正处置不急。
4.2 选哪些粉尘、按什么边界处置
- 实现必须只选取低于用户可配置的金额上限的 UTXO;
- 若同一地址上还有未花费的非粉尘 UTXO,不应选该地址的粉尘处置;尤其当该地址从未花过钱、或地址类型使用哈希公钥(如 P2PKH、P2WPKH)时更要谨慎(原因见 4.4 的公钥暴露);
- 同一用户自己的粉尘合并规则:绝不能把发往不同地址的粉尘放进同一笔交易;也不能为不同地址同时广播处置交易;发往同一地址的粉尘应尽量在一笔里处置完。
这组“按地址隔离”的规则是全篇的隐私核心:跨地址合并恰好就是粉尘攻击想诱导出的关联,处置不能亲手完成它。
4.3 第三方批量合并(batching)
互不相干的人的处置可以合并,但只能经由公共内存池、绝不能私下直接向其他用户收集输入,以防身份元数据泄露。流程是:先在节点内存池中寻找未确认的处置交易;找到后尝试按 BIP-125 的 RBF 规则构造替换交易——批量者必须自带一枚新的粉尘输入,其金额全数转为手续费,并同时满足:替换交易绝对手续费不低于被替换交易手续费之和、额外手续费不低于增量中继费率乘替换交易虚拟体积、费率高于每一笔被替换交易、不导致内存池驱逐超过 100 笔交易。候选交易须先按费率升序排序再贪心纳入,保证同一内存池状态下所有合规实现得出同一批量结果,避免实现指纹。构造不出合规批量时,退回各自广播一笔。找不到未确认处置交易时,直接广播自己的。
4.4 安全注意事项
- 签名风险:处置需要动用钱包私钥签名,冷钱包的密钥不便触及时本身就是风险;签名者必须仔细核对只签了粉尘输入、没有混入其他输入;
- 网络与时间分析:广播来源可能被网络监视者定位,有条件时应使用 Bitcoin Core 31.0+ 的私有广播(sendrawtransaction 的相关功能);不同地址的处置不要同一时间、也不要按可预测的节奏广播;选取的粉尘金额若偏离常态,也可能成为钱包指纹;
- 公钥暴露:花费哈希公钥型地址的粉尘会公开该地址的公钥。若将来出现能对已暴露公钥做长时攻击的密码学相关量子计算机,同一地址上的非粉尘资金将受威胁;攻击者甚至可能定点投放粉尘,诱骗受害者处置以暴露公钥。这是 4.2 中“有非粉尘余额的地址不处置”的根本原因。
五、谁必须动
普通持币人:无需改节点,也不用手动构造交易。需要的是支持本协议的钱包:识别粉尘、给出处置入口,并在处置前让你确认动的只是粉尘;跨地址合并、同时广播等错误操作应由钱包直接拦住。
钱包开发者:工作量主体。需实现可配置粉尘阈值、只认已确认 UTXO、按地址隔离构造、固定的 “ash” OP_RETURN 输出、ALL|ANYONECANPAY 签名(含 Taproot 显式追加哈希字节)、nLockTime 与 nSequence 的固定取值,以及内存池批量合并的确定性排序逻辑。
批量合并者与节点运营者:只能从内存池收集已签名的处置输入,不能向用户索要输入;合并交易仍须满足 4.1 的全部格式要求与 BIP-125 规则。
共识层与矿工:共识规则零改动。合规交易在现有规则下本来就合法可中继,矿工照常打包,只是费率结构特殊(全部金额皆为手续费)。
六、现在算不算数,以及一个常见误读
状态为 Draft(草案),版本 0.1.0。原文明确:本提案不需要改动共识规则或点对点协议,所用机制——ALL|ANYONECANPAY、OP_RETURN 中继策略、BIP-125 RBF、0.1 sat/vB 最低中继费率、私有广播——在相应版本的 Bitcoin Core 中均已存在;原文附有参考实现与测试用例(要求处置交易能被 Bitcoin Core 30.0+ 接受进内存池)。但草案不等于已被钱包普遍采用,原文未给出采用统计,本页不臆测。
常见误读:
“把钱包里所有粉尘凑成一笔交易一次烧掉最省手续费,也最干净。”
这正是本提案明文禁止的做法。不同地址的粉尘同进一笔交易,等于亲手向全网声明这些地址同属一人——粉尘攻击要的就是这个关联,处置反而替攻击者完成了工作。合规做法是按地址分开处置、错开广播时间;省空间靠的是与陌生人的处置经内存池批量合并,而不是合并自己的地址。
七、延伸
- 阅读版:https://bips.dev/451
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0451.md
- 相关:BIP-125 Opt-in RBF 手续费替换
- 仓库总目录:https://github.com/bitcoin/bips
