返回博客
安全

Bybit 被盗事件的教训:签名体验才是多签最薄弱的一环

三把多签签名密钥在屏幕上批准了一笔显示为安全转账的交易,而实际签署的载荷却沿着一条隐藏路径转移了资金

2 月 21 日,约 15 亿美元的 ETH 及质押 ETH 代币在一笔获得批准的交易中,从 Bybit 的一个冷钱包中被转走——这是有记录以来规模最大的加密货币盗窃案。这个钱包是多签钱包。所有必需的签名人都签了名。而且据目前所有调查显示,没有任何私钥被盗。如果 Bybit 被盗事件的多签教训只能记住一条,请记住这一条:密码学没有失守,钱却照样没了。

这并不是反对多签的论据。我们自己就在打造多签钱包,也依然认为 M-of-N 签名是保管大额资产时最可独立验证的方式。它真正说明的是:实际的攻击面到底在哪里。多签分散了密钥的保管,却并不会自动分散验证。每一个签名的可信度,恰好等于签名人对眼前那份载荷(payload)的理解程度——而在 2 月 21 日,这种理解是被攻击者一手制造出来的。

事发两周,我们目前所知

截至本文撰写时,由 Bybit 的声明、Safe 的事后披露以及 FBI 的公开归因拼合出的事件图景是一致的。Bybit 团队原本打算执行一次例行转账,把资金从一个 Ethereum 多签冷钱包转到温钱包,使用的是他们已经用过许多次的 Safe{Wallet} 网页界面。每位签名人看到的都是一笔看似正当的交易:熟悉的界面、预期中的流程,没有任何会打断肌肉记忆的异常。

而这组签名人实际授权的却是另一回事。这笔交易悄悄改写了钱包本身的智能合约逻辑,把实现替换成了攻击者控制的版本。当真实的签名上链之后,金库便按照新逻辑行事,约 40 万枚 ETH 及质押 ETH 代币——按当时价格约 15 亿美元——随之转出。Safe 的调查将入侵源头追溯到一台开发者机器:恶意代码经由前端下发,专门针对 Bybit 的签名人;对其他所有人来说,界面表现完全正常。2 月下旬,FBI 公开将此次行动归因于朝鲜的 Lazarus Group,其追踪代号为 TraderTraitor。

另有两个事实同样值得强调。Bybit 在事件之后始终保持偿付能力,并持续处理提现。而且自始至终没有任何密钥材料被窃取:没有助记词被钓走,没有签名设备被夺取,门限也从未在数学上被绕过。

密钥没有失守——而这正是关键所在

多签钱包要求 N 把独立密钥中的 M 把批准交易,资金才能转移。这一特性在 2 月 21 日运转得无懈可击。签名是真实的,达到门限的批准是合法的,合约也精确执行了被签署的内容。攻击者从未试图击败数学;他们做的是让这组签名人心甘情愿地为一个谎言签名。Bybit 被盗是交易验证的失败,而不是多签密码学的失败。

签名是对一份载荷发表的意见。如果你核对的载荷不是你签署的载荷,签名人有多少个都无关紧要。

那些写着“冷钱包被黑”的新闻标题忽略了这一区别,而这一区别之所以重要,是因为它决定了你要修补的到底是什么。冷存储完成了自己分内的狭窄职责:密钥从未接触过联网设备。多签也完成了自己分内的狭窄职责:没有任何单个签名人可以独自行动。真正失守的,是几乎没有人写进威胁模型的那个组件——屏幕。

盲签的精确定义

盲签,是指批准一笔签名人无法独立核实其真实内容的交易。在 Ethereum 上,签名人以密码学方式批准的是结构化交易数据的哈希,而不是屏幕上那段人类可读的摘要。必须有某个软件把这些数据解码还原成意图——目标地址、金额、合约调用——而签名人只能全盘继承这个软件所声称的一切。如果界面撒谎,人确认的是一个虚构的故事,链上执行的却是真相。

Bybit 这笔交易滥用的正是这道缝隙。一个大多数界面都不会醒目展示的字段——操作类型——把一笔看似普通的转账变成了 delegatecall,重写了钱包的逻辑。硬件签名设备也不会自动堵上这道缝隙:一台只显示一串不透明哈希的设备,等于在要求人去核实一段没有任何人能读懂的内容。这是“验证剧场”,而且可以说比什么都不做更糟,因为它在不增加任何审视的情况下制造了信心。

同一组签名人分出两条路径:屏幕上显示的是一笔经过核对、转往金库的转账,而实际签署的载荷却是一次将钱包拱手让给攻击者的 delegatecall
签名人看到的内容与他们实际签署的内容,在界面这一层出现了分岔。

一个前端、一组签名人、一次失守

Bybit 的签名人持有各自独立的密钥,分布在不同的设备上。但他们都通过同一个网页前端核对交易,于是一个被攻破的界面便一次性触达了全部签名人。签名人的独立性要求的是独立的验证通道,而不仅仅是独立的密钥。一个所有签名人都信任同一块屏幕的 3-of-3 钱包,在实际效果上会坍缩成 1-of-1——而这个“1”,就是控制界面的那个人。

这一教训不依赖于任何具体方案。MPC 钱包用分布式密钥分片取代了链上合约——我们在《MPC 与多签(MultiSig):一次坦诚的对比》中比较过两者的取舍——但 MPC 的签名流程同样终结在完全相同的位置:由人来批准某个界面为他们渲染出来的载荷。行业的优先级也由此可见一斑:大量精力被投向遥远而新奇的威胁——去年 12 月我们分析过量子计算机距离比特币的密钥还有多远——而这个行业历史上最大的一次盗窃,根本不需要任何新的密码学。它只需要 JavaScript。

Bybit 被盗事件的实用多签教训

以下这些都不需要新的密码学,也不需要新的硬件。它们是操作纪律——而这恰恰是它们总被跳过的原因。

  1. 把每一块签名屏幕都视为不可信。当你的余额值得攻击者花这份力气时,为你构建交易的界面就成了攻击目标。要假设它恰恰会在最关键的那一天对你撒谎。
  2. 在第二个独立界面上核对。在一台与构建交易的机器毫无交集的设备上,解码原始交易——目标地址、金额、calldata、操作类型。要让两块屏幕撒出一模一样的谎,比让一块屏幕单独撒谎难得多。
  3. 拒绝不透明的载荷。如果签名人无法逐个参数地看清一笔交易在做什么,那么这笔交易应得的签名数量就是零。“大概又是那笔常规转账吧”——15 亿美元就是这样被转走的。
  4. 限定爆炸半径。地址白名单、按日与按月限额、职责分离,能把一次错误的批准变成有上限的损失,而不是血本无归。Bybit 那个金库之所以损失殆尽,正是因为没有任何机制约束一笔获批交易所能做的事。
  5. 给例行操作降速。这次攻击被包装成团队最平常的一次操作,因为最平常的操作受到的审视最少。例行不是放松的理由;它正是攻击者会选择的伪装。

这些教训如何塑造 Ownbit 的签名设计

在上述 Bybit 被盗事件的多签教训中,最经得起时间考验的一条是结构性的:最终验证必须放在被攻破的机器触及不到的地方。Ownbit 的冷钱包工作流正是围绕这一理念构建的。一台闲置手机成为气隙签名设备;联网手机运行不持有任何密钥的观察钱包,负责构建未签名交易,并以二维码的形式传递过去。离线手机会在任何签名产生之前,展示它实际被要求签署的内容,再以同样的方式把签名传回来。二维码这一跳被刻意收得很窄:每笔交易都被强制经过第二个独立界面,而持有密钥的设备永远不会加载那个可能已被投毒的网页。

联网的观察钱包构建未签名交易,通过二维码跨越气隙传给离线手机;离线手机核对后,仅以二维码形式返回签名
跨越气隙的只有二维码:未签名交易进去,签名出来。

对团队而言,企业多签直接落实了关于爆炸半径的教训:地址白名单确保无论谁签名,资金都无法流向名单之外的地址;按日与按月的花费限额;Owner、Signer 与 Security Admin 角色分离;以及紧急暂停。这些控制并不能让欺骗变得不可能——没有任何方案能完全做到——但它们为一次被操纵的批准所能造成的代价设定了上限。

最后,坦诚地说说我们自己。Ownbit 的服务器负责协调签名,但从不持有用户密钥;Ownbit 多签中的每一把密钥都是标准的 BIP39 助记词,即使没有我们的基础设施,资产也照样可以恢复。最小化信任是双向的:正是这套限制了被攻破的协调方能对你做什么的设计,让我们可以在剖析 Bybit 最糟糕的一周时,不必假装自己对定向攻击免疫。值得用来衡量供应商的标准,是有上限的损失,而不是自称刀枪不入。

常见问题

Bybit 被盗是多签的失败吗?

不是。多签合约正确执行了门限要求,也没有任何私钥被盗。是必需的签名人被欺骗,批准了一笔改写钱包自身逻辑的交易——失败发生在交易验证环节,而不是多签密码学。正确的应对是增加独立验证,而不是放弃多签。

加密货币中的盲签是什么?

盲签是指批准一笔你无法独立核实其真实内容的交易。严格来说,签名人批准的是交易数据的哈希,并依赖某个界面诚实地解码它。如果这个界面被攻破,签名人确认的是自己看到的内容,实际授权的却是完全不同的另一回事。

Bybit 被盗事件损失了多少?

约 15 亿美元的 ETH 及质押 ETH 代币——约 40 万枚 ETH——使其成为截至 2025 年 3 月初有记录以来规模最大的加密货币盗窃案。FBI 将此次攻击归因于朝鲜的 Lazarus Group。Bybit 保持了偿付能力,并持续处理客户提现。

多签签名人如何防范被攻破的前端?

在一台与构建交易的机器毫无交集的第二台设备上核对每一笔交易,并拒绝签署任何无法逐个参数解码的载荷。然后加上结构性限制——地址白名单、花费限额、角色分离——让一次被欺骗的批准无法掏空整个钱包。

如果 Bybit 被盗事件的这些多签教训促使你重新审视自己的签名流程,这个直觉是对的——而试用一套更好的流程,花的是一个下午,而不是一座金库。Ownbit 的冷钱包工作流让一台闲置手机完全离线地核对并签署交易;企业多签则为需要多人共管的资金加上白名单、限额与角色。每位新用户都可获得 7 天免费试用,而且无论如何,你的密钥始终属于你。