首页 > 世链号 > 重放攻击
区块链王子  

重放攻击

摘要:重放攻击

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邱亮答疑)

来源链接:https://www.8btc.com/article/98482
作者:tan90d
来源:巴比特
免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。