昨天xETHeREALx
在Reddit上发布了一个帖子,是有关以太坊硬分叉可能会遭受的重放攻击。他/她的一些担忧似乎有些夸张,但是确实有一些高质量的攻击向量值得我们讨论。
交叉链重放
简单来说,如果一个分叉有一个有效交易,那么问题就是这个交易可能会被‘重播’到另一个分叉,因此随之可能会导致混乱。
我们可以想象一下,来自‘主’分叉的交易进入到‘旧’分叉,反之亦然。
在分叉的典型案例中,分叉解决的非常快。当一个硬分叉激发社会问题时,那么少数一部分人可能会中断运行分叉一段时间,或者一直中断。
本质上来说就是,大多数人进行分叉,而另一些人选择停留在原处。以太坊可能会发生这种事情吗?xETHeREALx
指出了一些对‘旧’链表示的支持。如果交易所为‘旧’链提供支持,那么就会有流动性,那个分叉的币也会有一些价值,这可能会推动额外的支持;也许人们会用他们的alt-universe coins
来换取比特币,至少换取‘真正的’以太币。
我们处于某种未知领域,据我所知,目前还没有一种具有表现力的区块链分叉的交易语言,用于支持两条链。
可能会出现什么错误呢?我期待能够找出来。以下是一些我所担心的一些攻击角度。
重放攻击
重放攻击很简单——在一条链上找到一个有效的交易,把该交易提供个另一条链。因为没有东西可以被用来区分这个交易来自哪一条链,在还原的情况下,两条链会做同样的事。
如果交易所已经在一条链上向某人支付过,然后再向另一条链发布取款命令将导致重复支付。类似地,任何函数调用都可以以这种方式复制。
我们现在正在忽视交易问题;
“渗透交易所”攻击
如果一个交易所想参与这两个链,他们就会遇到一个真正的问题:如果用户A在‘旧’链存款,然后取回,那么他们可以采取取款支付,使用‘新’链取款,把资金翻倍(等待两种以太币出现汇率差)。这就是Reddit文章中提到的核心攻击向量。
这并不是唯一令人担忧的举动;特别是由于任意函数调用都可以重播,两条链的参与者可能会出现很多有趣的事情。
Nonces
以太币并不跟踪个人交易输出(txos
),但它确实有一个用于识别交易的特殊机制:一个地址发布的每一笔交易都有一个‘nonce’——每进行一笔交易,这个数字就会增加一些。
如果一笔交易发布的nonce太低——例如,已经提供了一笔不同的交易——这笔交易会被忽略,被认为是无效的。
如果一笔交易发布的nonce太高——例如,我们还没有看到一些中间交易,然后,这笔交易就会被放在交易池中,等待处理。
这对于一种跨链取款攻击有什么意义?
一种工作的跨链攻击
所以,为了让其工作,我们需要:
一个同时参与两条链的参与者
一种重复攻击受害者nonce的方式
一个好的时机
请注意,我们甚至不需要一个交易所参与“旧”链——只有攻击者需要使用两个链。让我们想象一下以下的参与者:
只在主链运行的‘Modern’交易所
只在旧链运行的‘Principled’交易所
同时在两条链上的‘攻击者’
现在,我们如何进行?
攻击者将‘Modern’交易所的资金提取到他们在主链上控制的一个地址。
攻击者重放取款,所有的取款都需要将nonce达到‘Principled’链上的正确数值。
攻击者现在在两条链上都有相同数量的以太币。
攻击者将以太币发送到‘Principled’交易所,出售,并转换成比特币。
攻击者获得额外的价值。
要注意的是,nonce管理是非常复杂的;如果攻击者无法达到合适的nonce值,交易将会被放入交易池。如果‘Modern’交易所参与‘Principled’链,他们可以增加nonce,通过取款。 时机掌握
在分布式系统中,担忧时机的掌握并不是什么好事,这种复杂性并非数字货币交易所如今习惯担忧的事情,他们把时间延迟链当作是基本无变化的并处理他们的业务。不用说,这是真正令人担忧的。
另一方面,他们需要担心他们的旧alt-universe coins
怎么样吗?也许并不需要——他们致力于‘Modern’链。任何在‘Principled’链上造成破坏的东西,都是为‘Modern’链创造价值。
如果这些攻击变得普遍,大概‘Principled’币将会贬值,某种程度上攻击会照顾他们自己。
即使不是,你应该关心‘Principled’链。
有一种来自Principled的非常廉价的攻击,用现代话来讲,就是垃圾邮件。Principled链将会包括大量的交易。这些交易可以被放在主 链上,跳过所有具有连续nonce的交易。因为一般来讲,Principled参与者不会参与Modern链,所以这些tx将会放在tx池中,造成拥堵。
这是一种令人难以置信的简单和廉价的攻击;其他网络参与者将为攻击者创建有效的交易。
缓解方案1:停止接受未来的nonce tx
首先,停止取出订单tx;这个责任应该是客户的。这种等效已经存在于比特币很长时间了。这似乎是一种明智的基础设施管理,只会有帮助。
缓解方案2:nonce管理或者冷存储
如果交易所想要在某一天在‘Principled’链上收回他们自己以太币的能力,那么大幅度提升他们nonce就很有意义,通过至少一年使用期,通过花费或调用一些便宜的东西来完成。这将消耗以太币,但也为未来留下了选择。
另外,交易所可以创建一种‘Principled’冷储存地址,把所有东西都发送到这个地址,致使取款重放无效。
如果想要少用分叉,这看起来是个不错的主意。
还有很多要学
我打赌10以太币,函数调用与跨链重放有很多有趣的地方,事情将会变得非常有趣和怪异。
我已经敦促以太坊社区放弃正在失败的分叉,特别是可能会通过给予资金奖励来跟紧正在失败的链的交易所或其他组织。
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。