你失去了Layer 2地址控制权?Optimism黑客事件复盘
日前,以太坊最大的测试网Ropsten 已完成合并。这意味着,以太坊主网的大合并即将到来,用户和投资者们都摩拳擦掌,期待着区块链技术的爆发式提升。而根据此前Vitalik Buterin在5月份ETH上海峰会上的演讲,合并后的以太坊TPS并不会得到很大的提升,仍然需要靠Danksharding的分片解决方案以及配合Rollup技术的Layer 2解决方案,才能将以太坊的TPS提高到每秒80,000笔。Vitalik对 Rollup的肯定,可以确定Layer 2是以太坊扩容方案中很重要的一部分。
加之前段时间四大Layer 2协议中的Optimism率先空投发币,加密市场迎来了新一轮的空投狂欢。一时之间,大量用户开始体验Arbitrum、zkSync 和 Starknet 等 Layer 2 项目,期待获得下一次的空投机会。
但就在空投后的没多久,Optimism 官方与加密货币做市商 Wintermute 表示,2000 万个 OP 被黑客盗取。具体过程是,由 Optimism 基金会向 Wintermute 发送了 2000 万枚 OP 用于做市。而 Wintermute发现,自己提供给Optimism的接收地址是 Layer 1 地址,自己无法控制对应的Layer 2地址,而攻击者赶在Wintermute前使用不同的初始化参数将其部署,并转走了账户中的OP。
这时候有些用户开始担心了,Layer 1 和Layer 2的钱包地址不是同一个吗?为什么 Optimism 给 Wintermute 转的 2000 万枚 OP 自己无法控制,反而被黑客提前控制了呢?
众所周知,一般使用加密钱包体验Layer 2的流程如下(以Optimism为例):
- 在支持Layer2的钱包中添加Optimism网络;
- 将以太坊主链的ETH通过Optimism Bridge充值到Optimism地址中;
- 体验构建在Optimism的应用,也可以随时通过Optimism Bridge将资产提取回来。
从这几个步骤可以看出来。我们在体验 Layer 2 时,其实不需要新注册一个钱包,而是选择在已有的钱包中自定义添加网络。这是因为一般情况下,我们在以太坊上使用的钱包账户可以在Layer 2上直接使用。那么 Wintermute 的问题出在哪里呢?
这是因为Wintermute 为了安全,使用的是多签钱包。我们一般使用的钱包是单签钱包,一旦私钥泄露或者遗忘就意味着失去了对钱包的控制权。而多签钱包进一步保障了安全性,以2/3多签模式为例,这个多签地址会对应着3个私钥,而只要有其中2个私钥完成签名授权就能完成加密资产的转移,这样既能防止“单点故障”,又能实现DAO组织或者机构客户的资金共管。
普通的比特币地址是由公钥做哈希后得到的,而多重签名地址就基于脚本哈希,所以在原生上比特币就支持多签。但以太坊原生是并不支持多签地址的,大家是需要依靠智能合约来实现这一机制。所以大家会发现,比特币多签钱包会更常见,因为技术上更容易实现。
所以在以太坊中会存在两种账户,一种是由私钥控制的外部账户,也就是我们平常使用的;而另一种是由智能合约代码控制的合约账户,以太坊多签钱包的账户就是这种类型。
回到Wintermute的事件,以太坊开发者Kelvin Fichter在攻击发生后进行了解释:用户通常假设他们在以太坊上访问的任何帐户也可以在其他基于EVM的链上访问,对于外部拥有的账户(也就是非合约账户),这通常是正确的。但这不一定适用于智能合约账户,大家是可以使用完全不同的代码在不同链上的相同地址创建合约,从而产生完全不同的所有者。所以基于创建者地址和nonce,黑客只要用不同nonce不停碰撞就可以创建出和Wintermute 的 L1 钱包地址相同的地址。
所以回顾该事件,其实就是对 L2 和多签钱包认知不清晰的 Wintermute 因为自己的粗心大意损失这一大笔资产。幸运的是,黑客最后还是直接退回了其中1700万枚OP,发送到 Vitalik 钱包的100 万枚OP也已经退还给 Optimism 官方,黑客则获得200万枚OP作为赏金。
通过这个事件,也给了我们一些教训。大家一定要注意自己的钱包安全,如果在新的公链或者L2网络上接收资金,请务必先尝试自己是否拥有该地址的控制权,不要只是假设或者惯性思维认为我应该可以控制该地址。在使用多签钱包时,也建议提前加深对钱包安全属性的认知,以免造成不必要的损失。