Liquid Network被盗3.2亿美元事件全解析:没有私钥被偷,钱是怎么走的?

  • 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的做法是用两样东西拼出一个索引键:

索引键组成 是否包含
证明本身的字节
被加密的金额承诺
这是哪种资产
这笔钱要付给谁(输出脚本)

用收银台打个比方:

柜台上有一台验钞机,它验过的钞票会被记下编号,下次同一编号直接通过。但它记编号时,只记了钞票的水印花纹和面额,没记这张钞票是哪国货币、也没记它是要交给哪个收款人。于是同一份“验过了”的结论,就可能被搬到一个完全不该适用的场景里去用。

攻击者的操作

攻击者正是这么做的,而且很有耐心:

  1. 在动手之前的约 14个小时 里,向链上陆续送入了 68个完全相同的范围证明

  2. 一次次把这些“已验证”的结论喂进各个节点的缓存

  3. 等到时机成熟,再把同一份证明放到一个本该被拒绝的上下文里提交

  4. 节点查了一下缓存,发现“这个我验过,没问题”,于是放行

于是,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仍处于暂停状态。

官方给出了三阶段的恢复路径:

  1. 先恢复出块

  2. 再重放已验证交易

  3. 最后在网络状态确认无误后重开锚定操作

3,400枚比特币归还后,L-BTC的支撑率回到约 86%。Blockstream联合创始人 Adam Back 公开表示,1:1的LBTC锚定会被兜住,并劝持有人不要在场外恐慌抛售。

随着Blockstream公开拒付,剩下那598.5枚比特币已经不再是一个谈判问题,而变成了一个追查问题——链上取证、交易所协查、执法介入,周期以月甚至年计,结果高度不确定。

对L-BTC持有者而言,这意味着眼下是一场为期数日到数周的流动性冻结,而不是本金损失——前提是这个兜底承诺被完整执行。这句“前提”该由持有人自己去评估。

结语

安全这件事,最终不是比谁的锁更结实,而是比谁需要相信的对象更少。

发表评论

您必须才能发表评论!