首页 业界 正文

重放攻击

2016-08-01 10:59:26 来源:巴比特资讯 作者:tan90d 阅读:4499
   
以太坊硬分叉后出现了大量的“重放攻击”,有交易所声称丢了币,用户丢币的事更多。那到底啥是重放攻击呢?

u=825562706,834445874&fm=11&gp=0

第0章 引言

以太坊硬分叉后出现了大量的“重放攻击”,有交易所声称丢了币,用户丢币的事更多。那到底啥是重放攻击呢?

第1章 计算机术语里的“重放攻击”

以太坊硬分叉后发生的“重放攻击”和传统计算机术语不是一回事。

传统术语“重放攻击”:指的是身份欺诈。在维基百科上定义很清晰,如下,

假设Alice向Bob认证自己。Bob要求她提供密码作为身份信息。同时,Eve窃听两人的通讯,并记录密码。在 Alice和Bob完成通讯后,Eve联系Bob,假装自己为Alice,当Bob要求密码时,Eve将Alice的密码发出,Bob认可和自己通讯的人 是Alice。

以太坊硬分叉后产生的“重放攻击”并不是身份欺诈,是一条链上的交易在另一条链也往往是合法的,交易可以重新在另一链上广播,所以才被称为“重放攻击”,但这本质上并不是一种“攻击”。

第2章 以太坊硬分叉后发重的“重放攻击”

以太坊在192万区块高度发生了硬分叉,产生了两条链,分别称为ETH chain和ETH Classic chain,上面的代币分别称为ETH和ETHc。这两条链上的地址和私钥生产算法相同,交易格式也完全相同,导致在其中一条链上的交易在另一条链上很可能是完全合法的。所以你在其中一条链上发起的交易,就可以到另一条链上去重新广播,可能也会得到确认。这就是“重放攻击”。

我们使用例子来说,这次以太坊硬分叉后发生的“重放攻击”是这样的:

1.以太坊在第1920000区块高度上硬分叉出来两条链,分别称为ETH chain和ETH Classic chain,上面的代币分别称为ETH和ETHc。

2.在硬分叉高度前的所有ETH都在分叉后的两条链上有用,即持有分叉前的ETH都自动被赠送等额ETHc。

3.某个用户持有在硬分叉高度前的ETH,该用户将自己的硬分叉高度前的ETH通过自己控制私钥的本地钱包(这个无论是ETH chain还是ETH Classic chain钱包都是一样的)发一笔交易到交易所充值到其账户的ETH。但ETH chain和ETH Classic chain都能够识别这一次交易,都是合法的交易,都会打包交易。也就是本来用户是在一条链上广播交易,但可以在另一条链上被“重放”广播了。(你可以自 己用钱包去广播,也可能会有人或程序找到你的交易信息帮你去广播)

4.因为用户充值账户是交易所的,对用户来说是一个offchain钱包。如果交易所不给你,那你就丢掉了本来应该属于你的ETHc。

5.如果用户在硬分叉高度前是将ETH存放在交易所,原则上交易所应该是给用户两种币。当用户从交易所提取ETH到本地钱包时,刚好交易被提取的币 是在硬分叉高度前的币。而且你又在你自己的电脑上装了两个钱包,分别是ETH chain钱包和ETH Classic chain钱包,而且提币地址在ETH chain钱包上生成,然后通过导入私钥的形式钱地址导进ETH Classic chain钱包上。那你提币的同时,可以在两条链上都广播你的提币交易,这样你的两个本地钱包都能收到等额的币。

6.步骤5里,如果用户只装了一个钱包比如ETH chain钱包,那另一份ETHc就会收不到,但并不会丢,因为你的收币私钥是和你的ETH chain一样的,只要你提取出来这个私钥,然后导入ETH Classic chain钱包就可以了。

7.步骤5里,如果用户提走ETH,是充值到了另一个交易所,比如从yunbi提ETH到P网。这时候P网又只给用户一种币即ETH,那用户就会丢 失掉ETHc,丢掉的在谁手上呢,在P网手上。如果用户又回去问yunbi交易所要一份ETHc,yunbi很人品好有担当,真给了,那云币就相当于赔了 一份ETHc币。

8.任何持有920万区块高度后的币,情况要更复杂。比如有一笔币从硬分叉前发到硬分叉后的一个地址1上,这个地址1同时在ETH和ETHc都是有 效的。那你在ETH chain上收到的币从地址1再次发送到地址2,我们记这笔交易为交易2。这笔交易在ETH Classic chain也是有效的,也是可以被重放的,我们记被重放的这笔交易为交易2′。但如果有办法让交易2发送有效,但让交易2′无效,即ETH chain上的币从地址1成功发送到了地址2,但在ETH Classic chain上从地址1发送到地址2失败了。这种情况下,ETH chain的地址2的币再次交易时就无法被重放到ETH Classic chain上了。

9.步骤8里,什么情况下能让交易2′发送失败呢?也就是怎么样才能解决掉重放攻击呢?其中一个办法就是在交易2′发送后,但0确认前,对交易2′ 发起双花攻击,即使用相当的私钥再签一次名发起交易2”,将币发到另外一个地址3,如果交易2”成功了,而交易2′失败了,从此ETH chain上的地址2的币和ETH Classic chain上的地址3的币都无法被重放了。

能不能将交易2′在ETH Classic chain上不广播呢?不能,你不广播,会有人帮你广播的,交易信息不是加密的。谁知道哪个狗日的坏人找到你的交易信息后给你广播一下,你的这条分支的币就被发到了这条链的地址2了。

但要想把所有ETH地址和ETHc地址(这两种地址是完全一样的,ETH地址也就是ETHc地址)做到你有币我就没有,那几乎是不可能做到的,地址太多了。也就是想用这个办法彻底解决掉重放问题是不可能的了。

但对于用户来说,你可以使用这个办法分离你的ETH和ETHc,使这两者分另处在不同的地址上,这样你以后就不需要想着在一条链上做了交易我是否需 要重放到另一条链了。不过问题又来了,谁会发起双花攻击0确认的交易呢?好像很难啊,所以我认为普通用户基本上是做不到的。交易所应该会。

10.还有一种办法,对其中一条链展开51%攻击,直接消灭掉其中一条链就可以了,让其算力跌到零,从此高度不再上涨,也就是这种链死了。这样问题就彻底解决掉了。

或者让其中一条链的价格跌到很低很低,大家都不关心了,也就懒去理重放交易了。

第3章 以太坊经济生态圈各节点受重放攻击的影响

对用户来说以太坊目前的问题很大了,因为ETH和ETHc都有很好的经济量,而用户如果无法解决掉自己的币被重放的可能,他想卖其中一个币的同时保 留另一个币,就很难实现了。要么就只能在良心交易所的协助下才能完成。如果长期两种币存在下去,用户就会很困惑,是个正常人都会问:“他妈的肿么会这 样!”用户是最终赋与以太坊价值的人,如果用户离开了,还玩个毛线啊。

如果用户可以无视其中一种币,只钟情另一种币。比如只用ETH,不用ETHc,那对该用户来说,重放攻击就想不存在一样。但有几个人能做到呢,明知道通过重放交易还可以多卖一份钱,谁能不在意!

如果是新用户到没什么困惑的了,新用户去买其中一笔币,那他很难有机会通过重放交易的方式搞到另一种币,除非交易所是傻逼。

本来用户是免费得到一份ETHc的,现在他们不得不小心处理自己的币,免得被重放丢失。这是个最好的时代,这是个最坏的时代啊。

目前ETH和ETHc的经济活动基本上还是保留在交易所内的,从新闻报道来看,现在交易所基本上有能力解决重放交易了。之前损失的也和用户做好赔偿 和责任划分了。任何ETH和ETHc只要经过了交易所后,对用户来说就是只有一种币了。但问题是交易所如何解决重放交易的,可以有不作恶和作恶两种解决方 式。可怕的是作恶也是合法(合以太坊区块链的法)。

好的交易所会在收到用户的ETH或ETHc时尝试将交易重放到另一条链,如果重放成功,就给用户充值两种币,如果不成功就给用户充值一种币。然后在 交易所内部将币彻底分离到只存在其中一条链。坏的交易所是,用户充值什么币就只入账什么币,并且将交易去重放,如果成功了就私吞。

交易所还会分聪明的和笨的,聪明的交易所会将用户充值的两种币彻底分离。当用户买入其中一种币并且提币时,交易无法被重放到另一条链。而笨的交易所不会分离两种币,用户提一种币时,将交易重放到另一条链,如果成功就白得一笔钱。

而矿工和矿池呢?无所谓哦,他们挖了ETH就不能挖ETHc,对他们来说重放攻击问题不大,新挖到的币也没法重放。通过难度和价格一合算,哪个更挣钱挖哪个,无所谓。

以太坊经济生态圈里还有开发者,目前以太坊基金会态度竟然是包容ETH Classic,好大度啊。不理解。

就以上分析,在以太坊经济生态圈里,因为重放攻击的存在,用户麻烦最大;交易所要受到良心和技术上的考验;而矿工和开发者好像影响不大。

我认为这种混乱情况下所有人信心会受到打击。大家要想继续在这条链上掘金,就得想办法搞死其中之一。

第4章 结束语

一开始大家都以为自己是免费得到一份ETHc的,现在他们不得不小心处理自己的币,免得被重放丢失。这真是个最好的时代,这真是个最坏的时代啊。

(感谢云币网CEO邱亮答疑)


声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

更多 矿机信息