跨链桥为什么一再被攻破,以及跨链代币究竟是什么

·阅读 6 分钟·作者:SSP Editorial Team
SSP Academy 封面:跨链桥被攻破与封装代币

跨链桥为什么一再被攻破,以及跨链代币究竟是什么

在 2021 到 2022 年的相当长一段时间里,跨链桥是整个加密世界中被抢得最有规律的东西。不是交易所,不是钱包,也不是笼统意义上的智能合约——而是桥。

Ronin 损失了大约 6.25 亿美元。Poly Network 损失超过 6 亿。Wormhole 损失约 3.2 亿。Nomad 损失接近 2 亿。这是四起事件、逾十五亿美元,而这份名单远不止四条。

它们没有一起是比特币、以太坊或任何底层链的失败。理解其中缘由,是你能学到的关于桥的最有用的一件事,因为它恰恰告诉你:当你使用一座桥时,你究竟在信任什么。

链与链之间无法交谈

根子上的问题很简单,却常被一笔带过。比特币根本不知道以太坊的存在。 每条链只验证它自己的交易,并且没有任何机制去观察另一条链的状态。不存在一种内建的方式,让其中一条得知另一条上发生了什么。

因此,字面意义上的「把 BTC 发到以太坊」是不可能的。你的比特币无法离开比特币。

真正发生的是一次替换。你把真实的 BTC 发到一个由桥控制的地址。桥注意到了,于是以太坊那一侧的某个东西向你发出一枚代表那些 BTC 的代币。当你想出来时,你销毁这枚代币,桥则释放原件。

关键的推论是:跨链代币并不是那项资产。它是对一池该资产的一份索取权,而这池资产由经营这座桥的人保管。 它的价值完全依赖于那池资产仍然在那里,以及运营方仍然履行赎回。如果池子被掏空,你手里的封装代币就是一张什么都换不到的收据——而这正是上述每一起事件中,持有者所发现的事情。

总得有人来判定这笔存款发生过

既然两条链都无法观察对方,就必须有某个第三方去盯着链 A,并向链 B 证明有一笔存款发生过。那套证明机制就是桥,而所有的钱也正是从这里消失的。

各种设计在「你必须信任多少」上有所不同:

多签或验证者集合——一组固定的签名者,其法定人数授权放行。简单、快速,而其强度只等于「能够动用资金的最小密钥数」。

乐观模型——除非在一个时间窗内被质疑,否则消息被推定为有效。便宜,但它依赖于真的有人在盯,以及质疑逻辑本身是正确的。

轻客户端与证明——目标链验证关于源链状态的密码学证明。这是最稳健的做法,也是最昂贵的,因此它远没有它应有的那么普及。

其余都是变体。要紧的是:几乎在每一种情形里,横在资金池与攻击者之间的,都只是一小撮参与方,或者一个单一的验证函数。

四次失败,以及它们各自的教训

Ronin——被攻陷的是密钥,不是代码。 这座桥使用一个九人验证者集合,需要五人授权一笔提款。攻击者通过定向钓鱼拿到了四把密钥,又通过一个第三方拿到了第五把——那个第三方此前曾被授予签名权限,而这项权限从未被撤销。九取五,法定人数达成,资金放行。密码学层面什么都没被攻破。签名校验运行得完美无缺——它只不过校验的是攻击者的签名。

教训不是「多签不好」。教训是:一个法定人数的意义,取决于其签名者彼此有多独立。同一家公司里的四把密钥,加上一项过期未清的权限,那不是九取五,而更接近一个披着外衣的二取一。

Poly Network——合约被说服去更换自己的守卫。 攻击者找到了一条跨链调用路径,得以把 keeper 角色——那个决定哪些消息合法的东西——改成自己控制的地址。此后,每一笔欺诈性提款,在合约看来都是被正当授权的。

教训是:一座桥里最危险的函数,很少是那个搬动资金的函数。而是那个决定谁被允许搬动的函数。

Wormhole——出问题的正是签名校验本身。 一个验证例程可以被诱骗去接受一组伪造的守护者签名,这让攻击者在 Solana 上铸出了 12 万枚 wETH,而它们在以太坊那侧从未有任何支撑。

教训是:没有正确的验证器,「已由签名验证」什么也不意味着。密码学本身没问题;围绕它的代码有问题。

Nomad——一次配置改动为所有人打开了门。 一次例行升级把某个可信根留在了零值上,其效果是让几乎任何消息看起来都已被证明。这次利用不需要任何特殊技巧:人们复制第一个攻击者的交易,换上自己的地址,然后重复。它变成了一场众人合力的搬空。

教训——而且是那个令人不适的教训:这并不是一次奇诡的攻击。这是一次部署失误。大多数跨链桥的损失,看起来更像是搞砸了的运维,而不是被击败的密码学。

这对你意味着什么

跨链资产承担的是桥的风险,而不是链的风险。 在另一条链上持有封装 BTC,并不是持有 BTC。那是持有一份索取权,其担保来自那座桥恰好最薄弱的那个环节。这完全可以是可接受的——但它应当是一个决定,而不是一个假设。

有替代方案时,优先不过桥。 如果你能在目标链上原生地买到该资产,或者把中心化交易所当作过渡点,那你就是把桥的风险换成了另一种、且往往被理解得更透彻的风险。两个选项都不是无风险的;它们只是以不同方式失败,而交易所的失败模式至少是被充分归类过的

不要让价值以跨链形态长期停放。 桥的风险随时间累积。过去、办完你要办的事、再回来,只让你暴露一小会儿。把一项封装资产持有一年,就是暴露一年。

用信任模型而不是界面来评判一座桥。 有多少签名者能够动用这些资金?他们是彼此独立的组织,还是同一个团队?代码审计过吗——更能说明问题的是——它经受住时间和资金量的考验了吗?一个精致的前端什么都说明不了。

按信任程度来决定仓位大小。 一条直白的规则是:过桥的金额不要超过「如果运营方消失你也愿意承受的损失」,因为在最坏的情况下,这两者是同一件事。

SSP 站在哪里

SSP 支持在 EVM 链之间转移资产,而这保护了什么、又没保护什么,值得说得精确一些。

我们的二取二保护的是你的密钥和你的批准。没有你两台设备的共同签名,任何人都无法发起一笔过桥交易,而且你会在每台设备上看到自己批准的是什么。这项性质完整成立。

它做不到的,是让桥本身变得安全。一旦你的资产进入某座桥的合约,它们就受那份合约的规则和那家运营方的密钥管理所支配——而不再受你的多签支配。双设备批准,是防止别人未经许可动你资金的极佳保护。而对于「资金在你自己有意送去的地方被拿走」,它提供不了任何保护。

这不是我们能靠工程绕开的限制,而假装可以则是不诚实的。桥是加密世界里少数几个地方之一,在那里诚实的答案是:安全性几乎完全取决于另一个人——而正确的反应,是在过桥之前,认真看清那个人究竟是谁。

分享本文

相关文章