- A+
4000枚比特币离开金库,没有一把私钥被偷,没有一台HSM被攻破,15家机构的钥匙都完好无损。这不是密码学的失败,而是运维的失败。

01. 事件概述:3.2亿美元如何离开金库
9月6日,约 4000枚比特币(按当时价格约 3.2亿美元)离开了Liquid Network的钱包。这是2026年至今金额最大的一起加密资产被盗事件。
但这起案子最值得琢磨的地方,不是金额。
没有一把私钥被偷,没有一台HSM被攻破,没有任何人被钓鱼,也没有内鬼。管理这个金库的15家机构,每一家的钥匙都完好无损地待在自己的保险柜里,而且每一次签名都是它们主动、自愿、按规则完成的。
钱就这么走了出去。
02. 背景:Liquid Network是如何设计的
要理解这是怎么发生的,需要先了解这个金库的设计。
什么是Liquid Network?
比特币主网有个众所周知的问题:慢,而且贵。一笔交易平均要等十分钟才进区块,手续费还随挖矿难度波动。这对大额频繁转账的交易所或量化团队来说不太够用。
Liquid Network 是Blockstream给出的一个解法——一条“侧链”,可以理解为比特币主网旁边的一条快车道。
| 操作 | 说明 |
|---|---|
| peg-in(锚入) | 把真比特币存进共管金库,金库开出等额存单 L-BTC |
| peg-out(锚出) | 把存单交回注销,金库从里面取等额真币还给你 |
理论上,链上流通的L-BTC总量,永远等于金库里躺着的真比特币数量——这就是 1:1锚定。
金库由谁管?
Liquid的答案是:不交给任何一家,而是交给 15家已知机构组成的“联邦”。
| 设计要素 | 具体机制 |
|---|---|
| 节点数量 | 15家 |
| 签名门槛 | 至少 11把 钥匙同时签名(11/15多签) |
| 密钥存放 | 各机构的专用硬件安全模块(HSM) |
| 节点职责 | 既是金库保管员,也是链上记账员 |
这个设计的用意很清楚:单点作恶行不通,你得同时说服11家互不相干的机构才能偷到钱。从“防坏人”的角度,它确实做得不错。
03. 技术特色:机密交易与范围证明
Liquid还有一个特色:它的交易金额是对外保密的。
在比特币主网上,任何人都能看到每笔转账的具体数额。对机构来说这很难受——你的大额调仓会被全世界围观。
Liquid用一项叫 “机密交易”(Confidential Transactions) 的技术解决了这件事:金额被加密隐藏,链上只留下一个数学承诺。
但这立刻带来一个新麻烦:如果金额是看不见的,节点怎么知道这笔交易没有作弊?
解决办法叫 “范围证明”(range proof):
把金额装进一个不透明的信封,同时附上一份数学证明,这份证明能让任何人在不打开信封的前提下,确信里面的数字落在合法范围内。
这套机制本身是可靠的密码学。问题出在它的性能优化上。
04. 漏洞:一台记性太好、但记错了重点的验钞机
验证范围证明的计算开销很大。为了不让节点被拖垮,Elements(Liquid使用的开源节点软件)做了一件所有工程师都会做的事:加缓存。
验过一次的证明,把结果记下来,下次遇到同一个就直接放行。
问题来了:怎么判断“遇到的是同一个”?
Elements的做法是用两样东西拼出一个索引键:
| 索引键组成 | 是否包含 |
|---|---|
| 证明本身的字节 | ✅ |
| 被加密的金额承诺 | ✅ |
| 这是哪种资产 | ❌ |
| 这笔钱要付给谁(输出脚本) | ❌ |
用收银台打个比方:
柜台上有一台验钞机,它验过的钞票会被记下编号,下次同一编号直接通过。但它记编号时,只记了钞票的水印花纹和面额,没记这张钞票是哪国货币、也没记它是要交给哪个收款人。于是同一份“验过了”的结论,就可能被搬到一个完全不该适用的场景里去用。
攻击者的操作
攻击者正是这么做的,而且很有耐心:
-
在动手之前的约 14个小时 里,向链上陆续送入了 68个完全相同的范围证明
-
一次次把这些“已验证”的结论喂进各个节点的缓存
-
等到时机成熟,再把同一份证明放到一个本该被拒绝的上下文里提交
-
节点查了一下缓存,发现“这个我验过,没问题”,于是放行
于是,3,996枚没有任何真比特币支撑的L-BTC,被凭空记进了账本。
由于金额本来就被机密交易隐藏着,链上没有任何观察者能看见多出来的这笔钱。
05. 那35分钟:每一步都合规
北京时间9月6日23:53(15:53:10 UTC),Liquid区块 4,050,336 打包了这笔伪造交易。
接下来发生的每一步,都完全符合规则——这是整件事最令人不安的部分。
| 时间线 | 事件 |
|---|---|
| 伪造交易打包 | 3,996枚无支撑L-BTC被记入账本 |
| 转入SideSwap | 混入后与正常L-BTC再无区别 |
| 十几分钟后 | 4,000 L-BTC的peg-out请求提交 |
| 15个节点校验 | 地址在白名单内 ✅ 数量相符 ✅ |
| 11把钥匙签名 | 如常完成 |
| 约35分钟后 | 比特币主网确认,3,996枚真比特币离开联邦钱包 |
HSM的两项校验:
-
提币地址是否在白名单内 ✅
-
销毁的L-BTC数量是否与申请的比特币数量相符 ✅
它不会、也没有能力追问第三个问题:这些L-BTC最初是怎么来的?
Liquid设计过一道紧急保险:如果正常签名路径失效,需要用2/3的备份密钥并等待56天才能动用资金。这道保险从未被触发——因为攻击者根本没去撞后门,他走的是正门,而正门为他打开了。
多签门槛管的是“谁能签”,它无法回答“签的这个东西对不对”。
06. 它是怎么被发现的
讽刺的是,这个漏洞会在不同节点之间造成分歧:同一个区块,有的节点接受,有的节点拒绝——这取决于各自的缓存里之前存了什么。
比特币核心开发者 Antoine Poinsot 当时就公开指出,那个关键区块 “被mempool拒绝、但被Blockstream接受”。
而mempool.space本身就是联邦成员之一。它的实时审计程序捕捉到了一笔 -4,019 BTC 的异常提取,而Liquid官方面板当时并未同步反映这笔损失——两套监控系统给出了不同的世界。
支撑率数据
| 指标 | 数据 |
|---|---|
| 链上流通L-BTC | 4,205枚 |
| 联邦钱包剩余真比特币 | 197枚 |
| 支撑率 | 不足5% |
这里也藏着机密交易的另一面:隐私的代价是可核验性。金额被隐藏,外部就没有任何人能实时比对“账本上的存单总量”和“金库里的真币余额”。1:1从一个人人可验的事实,退化成一句需要被相信的声明。等到它被证伪时,缺口已经3.2亿美元了。
07. 比漏洞更刺眼的,是那个补丁
如果故事到这里结束,它只是一起高水平的密码学攻击。但还有后半段。
| 时间 | 事件 |
|---|---|
| 8月3日 | 缓存缺陷的修复代码已提交到代码库 |
| 9月2日 | 补丁被并入主分支 |
| 事发时 | 联邦节点运行的是 23.3.3版本(4月13日发布),不含修复 |
| 9月6日案发后不到3小时 | 补丁被紧急合入发布分支 |
⚠️ 需要说明的是:官方并未正式确认这次事件就是这处缺陷所致,上述对应关系来自外部研究者的复盘。
但时间线本身已经足够说明一个更普遍的问题:
漏洞被修好,和修好的代码真正跑在生产环境上,是两件事,中间可以隔着五个月。
Casa的安全负责人 Jameson Lopp 还指出了另一件事:联邦节点的代码库公开记录显示,上一次提交是2024年4月——距事发超过两年。
3.2亿美元的资产,托付给了一套两年没被认真维护的软件。这不是密码学的失败,是运维的失败。
08. “我们是白帽”,和Blockstream的回答
当天晚上,收款地址向链上发出一条OP_RETURN消息:
we are whitehats. contact us on chain.(我们是白帽,链上联系我们。)
谈判随之开始。
归还进展
| 时间 | 事件 |
|---|---|
| 9月7日 | 对方归还 3,400枚比特币(约2.72亿美元,占85%) |
| 自留 | 598.5枚(约4,700万美元) |
谈判过程
起初双方是私下沟通的,Blockstream用加密并PGP签名的消息回复。但9月8日至9日,对方把喊话搬到了公开的链上明文,语气也变了:
-
指责对方失职:“你们只拿出150万美元(甚至可能是0)去保护50亿美元的资产,这是对安全的公然漠视”
-
提出条件:要求Blockstream从自有资金中另付相当于10%的漏洞赏金,作为归还剩余部分的前提
-
威胁:如果拒绝,就让“你的所有持有人为你的不负责和吝啬承担15%的损失”
到这一步,“白帽”这个自称已经很难成立了。Ledger首席技术官 Charles Guillemet 的评价相当直接:
真正的白帽会在动用抵押资产之前披露漏洞,而不是之后;先把95%的储备搬空再谈条件,“更像勒索,而不像安全研究”。
Blockstream的公开拒绝
在一份公开声明中,Blockstream表示:
-
不会为归还被盗资金支付赎金
-
未经授权取走资产、拒绝归还,是犯罪,不是负责任的漏洞披露,也不是白帽行为——“这是盗窃”
-
拒绝开一个先例:为比特币社区福祉开发的开源软件,其开发者不应因此被迫支付一笔“远超其经济参与程度”的赎金
-
针对“让持有人承担15%损失”的威胁,回应是:比特币是硬通货,不能无成本地铸造,比特币不会为了支付赎金而对用户减记
最后它给了两条路:
现在归还,事情仍可以回到白帽的标准来处理;如果不还,Blockstream将动用一切合法手段,与执法机构、交易所、服务提供商、链上取证专家等各方合作,追踪、追回资产并锁定责任人。
09. 为什么这件事比那4,700万美元更重要
过去几年,“先拿走、再谈条件”逐渐固化成一套半标准化的剧本:攻击者搬空资金,自称白帽,留下一笔自定的“赏金”,项目方为了尽快止损而接受。
这套剧本的实质是:一次安全事故的定价权,落在了攻击者手里——归还比例、留存额度、谈判节奏,全由对方决定。
Blockstream这次拒绝的,与其说是那笔钱,不如说是这套剧本。代价可能是4,700万美元追不回来;换来的是不为下一次攻击背书定价。
被攻击方愿意善意沟通,和被攻击方接受条件,是两件完全不同的事。
10. 行业启示:机构的昂贵学费
这起事件不需要你懂密码学也能读出几个结论。
第一,“包装资产”不等于原资产
你手里的L-BTC、各种跨链BTC、各种封装代币,都不是原生资产本身,而是一张存单。它的安全性等于三层里最弱的一层:
| 层级 | 说明 |
|---|---|
| 发行方是否可信 | 第一层 |
| 节点软件实现有没有bug | 第二层(本次出问题的层级) |
| 出入金通道能否分辨真假 | 第三层(SideSwap全程无过错,只是无从分辨) |
多数人在评估风险时,只看了第一层。
第二,看得见比看不见重要
隐私是真实需求,但当储备的可核验性被牺牲掉,你就失去了在事故变大之前发现它的能力。这次缺口能被抓住,靠的是不同节点意外给出了不同答案,而不是任何一套设计好的核验机制。
第三,你的风险包含别人的运维节奏
一个补丁躺了五个月没上线、一套代码两年没人动——这些不写在任何白皮书里,但它决定了你的钱有多安全。评估一个协议时,除了读它的设计文档,也值得看一眼它的代码提交记录和版本发布纪律。
第四,多签是必要的,但它防的是坏人,不是坏代码
11/15在密钥被盗的场景下是一道好防线;在软件把假钱认成真钱的场景下,它毫无作用,甚至会让这笔错误的支出显得格外规范、格外合法。
第五,“白帽”是一种行为标准,不是一个可以自称的身份
区别不在于最后还了多少,而在于顺序:先披露、再协作,还是先搬空、再开价。
这次Blockstream宁可冒着4,700万美元收不回来的风险也要公开拒付,给行业留下的正是这个界线。它未必能追回钱,但它至少让下一个攻击者无法确定“自称白帽”还能不能换到一张免罪券。
11. 现在的状况
Liquid已于 9月10日12:26 UTC 恢复出块,但暂不打包用户交易;peg-in与peg-out仍处于暂停状态。
官方给出了三阶段的恢复路径:
-
先恢复出块
-
再重放已验证交易
-
最后在网络状态确认无误后重开锚定操作
3,400枚比特币归还后,L-BTC的支撑率回到约 86%。Blockstream联合创始人 Adam Back 公开表示,1:1的LBTC锚定会被兜住,并劝持有人不要在场外恐慌抛售。
随着Blockstream公开拒付,剩下那598.5枚比特币已经不再是一个谈判问题,而变成了一个追查问题——链上取证、交易所协查、执法介入,周期以月甚至年计,结果高度不确定。
对L-BTC持有者而言,这意味着眼下是一场为期数日到数周的流动性冻结,而不是本金损失——前提是这个兜底承诺被完整执行。这句“前提”该由持有人自己去评估。
结语
安全这件事,最终不是比谁的锁更结实,而是比谁需要相信的对象更少。









