区块链分叉带来的安全挑战

2022-04-29 15:18吕蕴藉
计算机与网络 2022年18期
关键词:以太算力合约

吕蕴藉

区块链分叉分为软分叉和硬分叉。本文主要探讨的是硬分叉,一种不支持向后兼容的软件升级方式。

如果要成功分叉一条区块链并不容易,并非直接复制原网络的代码即可,需要进行基本的修改才能保证它安全运行,为此,总结了几种常见的安全问题及防护方法。

网络层

由于分叉链是独立于原网络的区块链,首先需要在网络层(P2P)进行隔离。

种子节点

种子节点,也称bootnode或者seednode,是区块链启动时网络首先会尝试进行连接的节点。分叉链在启动时首先连接种子节点列表里的节点,从而进一步发现网络中其他的对等节点,然后才能进一步同步区块,达成共识。因而必须要修改种子节点列表,防止连接到原网络的节点。

异形攻击

即使种子节点列表改变了,但并不代表分叉网络不会连接到原网络,因为双方的P2P协议是相同的,如果有一个节点无意中添加了另外一个网络的节点连接,那么2个节点将成功握手,并将对方添加到节点地址池。不仅如此,双方节点还会将自己节点中的地址分享给对方,进而造成双边网络节点池互相污染。

为了解决地址池互相污染的问题,需要在通信協议上做网络识别。早期的以太坊并不支持网络分隔,但后续的版本中在协议中加入了NetworkID做为网络区分的标志,NetworkID通常是每个链的ChainID,例如以太坊主网的NetworkID和ChainID都为1,而ETHW初始版本中并未对NetworkID进行分叉,可能存在异形攻击漏洞。

在比特币网络中,使用Magic值来标识不同的网络,通常在chainparams进行定义,例如比特币主网值为F9BEB4D9,测试网值为FABFB5DA。

共识层

交易隔离

通常与区块链交互时,需要用自己的私钥签署一笔交易,随后这笔交易被广播到网络,并被矿工或者出块节点打包到区块中。但如果区块链出现分叉,这笔交易可能会被2个网络分别打包到不同的区块中,假设这是一笔原链上的转账,那么分叉链上也会有相同的一笔转账,显然这是一个非预期行为,会造成资产损失。

这时就需要对交易进行重放保护,在早期以太坊的版本中没有做这样的保护,EIP155之后在交易结构中加入了ChainID,确保用户签署的交易只用于当前网络。如果对以太坊进行分叉,那么也需要对ChainID进行重新定义,当然这并不是只修改配置里的ChainID这么简单,因为分叉链需要对旧的区块做兼容,所以需要在分叉高度之后使用新的ChainID,才能保证分叉链正常运行。

比特币的交易结构中不存在ChainID,那么它是如何做重放保护的呢?比特币使用了一种叫做UTXO的模型,简单说它是对一笔交易(UTXO)进行花费,而不是对账号进行花费,通常全新启动的网络不会存在相同的2笔交易,也就不存在重放的场景。

但是在硬分叉的情况下,还是会存在交易重放的问题,例如2017年的BCH分叉以及后来的BSV分叉。BCH通过在交易数据签名添加SIGHASH_FORKID (0x40),使得BCH上的交易和BTC的交易不再互相兼容,从而达到重放保护的目的。

算力调整

在分叉前,原链占有全网所有的算力,依据PoW共识算法,它的出块计算难度也是比较高的。分叉后,算力分散到不同的区块链上,分叉链由于共识不足通常无法获得足够的算力去生产新的区块,区块的增长会陷入停滞。这时有必要降低分叉后的初始计算难度,给分叉链赢得一个快速调整算力的时间窗口。

防范51 %攻击

网络和交易都隔离开了,区块链分叉了,新区块顺利产出,一切都看似正常。然而安全问题依旧突出,它依旧存在一种更普遍、更难以防御的攻击:51 %攻击。

挖矿是逐利的,当出现分叉币时,哪边的挖矿收益高矿工就会把算力切换到哪个网络,但现实是分叉币往往币价低,导致整体的算力十分低。以ETHW分叉为例,从2 miners上看到,原ETH网络算力峰值最高超过900 TH/s,而在写稿时ETHW的算力只有30 TH/s左右,大量算力消失并不是好事,它随时可以对ETHW发起51 %攻击。

对于51 %攻击的防范几乎没有什么很好的方法,只能通过增加确认数来防范。

应用层

把建立在交易上的应用,如基于虚拟机的智能合约,统归为应用层。区块链在分叉时,也会对运行在区块链上的应用产生巨大影响。

签名重放

签名重放与上文提到的交易重放是相同道理的,有一些合约,例如Gnosis Safe,它会在合约中验证用户的签名,如果签名中没有包含ChainID,那么这个签名可能在2个链上重放,导致资产损失。

预言机失效

分叉后的区块链多数智能合约依旧可以正常运行,例如Token合约、AMM合约,这些自运行系统不依赖于链下数据就可以稳定运行,但类似MakerDAO等借贷系统,高度依赖预言机的价格数据,在失去链下喂价支持后,它将无法继续运行下去。

价格剧变

区块链分叉了,一个应用同时运行在2个链上,用户该使用哪个链上的应用?哪个算是“正统”的呢?这个问题又回到了共识上,通常哪个区块链拥有正统的共识,那么它上面的资产就会保留原有的价值共识,而另一个区块链上的资产会在瞬间失去价值。

这种价格上的剧烈变化,会导致DeFi应用彻底崩溃,借贷应用永远无法平仓,一些有识之士会抓住分叉的时间窗口,把“归零”的资产通过AMM等应用兑换成主链代币,从而保留了一些价值,在ETHW分叉事件中,可以观察到了大量分叉链上的套利行为。

至此,我们看到其中存在的技术风险,对于分叉需要十分审慎地对待。并且,不少分叉的背后不仅仅是技术变革的需要,有的可能存在商业上的直接利益,例如发起方在分叉中直接获取大量的分叉币,这些都需要用户准确认识,避免不必要的损失。

区块链是一种去中心化的系统,它的升级不依赖于单一个人或组织,因此分叉在区块链中难以避免,虽然给用户带来混乱,但也促进了系统向前发展以更好地服务社会。

猜你喜欢
以太算力合约
多方求解智能时代算力挑战
这个第二不一般
以太极为旗,开启新时代“黄河大合唱”
卫星通信在算力网络中的应用研究
中国电信董事长柯瑞文:算力成为数字经济的主要生产力
车易链:做汽车业的“以太坊”
百通推出入门级快速工业以太网络交换器系列
以太互联 高效便捷 经济、可靠、易用的小型可编程控制器
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望