查看原文
其他

比特币又要潜在分裂了,得知道重放攻击原理和防范措施了

2017-10-11 黄世亮 闪电HSL

第0章 引言

比特币又可能将面临分裂了,持币用户最需要注意的就是如何保护自己的财产。

 

第1章 区块链分裂后的重放攻击

11月份将有Segwit2x的第二部分部署升级,开发者还没对这个升级达成统一意见,而且矿工目前明面上好像是统一了意见说要升级,但实际上还是有较大的分歧。因此这一次升级也有可能会造成潜在的分裂。

Segwit2x这个协议升级目前主要是在btc1这个比特币节点软件版本上部署,而目前比特币网站上主要运行的是bitcoin core版本的节点。但Core版本的节点拒绝部署Segwit2x这个协议。这就是导致潜在分裂的最大原因,一个网络上运行着不相兼容的两套协议。如果到了11月要升级的时候,矿工无法统一版本,或者开发者拒绝发布相互兼容的版本,那分裂就会出现。

对于用户来说,比特币等区块链分裂了,最需要注意的就是你将会等同拿到两种币。只要你在分裂点前持有币,那分裂后你就会变成两种币。

如何保护自己这两种币呢?最重要的是,你得知道你有两种币,然后是你要注意别被一种叫“重放攻击”的操作让你的其中一币莫名其妙发给别人了。

首先讲明白,重放攻击其实根本就不是攻击。目前币圈流传的各种关于重放攻击的言论有点过于危言耸听了。

重放攻击,这里的“攻击”根本就不是别人对你发起的某种侵略或偷盗行为。而是因为比特币区块链分裂后的两个分支链,都有相同的地址、私钥和交易格式。你在分裂点前的币,自动会被分裂后的两条链都承认。

如果你使用分裂点前的币发起一笔交易,在两条链上这笔交易都会有效。这就是显得你发了两笔交易,这里的另外一笔,就是“重放”。

我打个比方来解释这个,在国军退守台湾后,蒋公将大陆的很多机构都照样在台湾复制了一遍。比如在台湾也建了清华大学。而在大陆的北京,也是有一个清华大学。

如果你在美国给清华大学写一封信,就是用纸,让邮递员送的那种信。但收件地址上只写了“中国清华大学XXX收”

这个收件地址即可以解读为是北京的清华大学,也可以解读为台湾的清华大学。这下邮递员麻烦了,他干脆将你的信复印一遍,送到两个大学去。

这就是重放攻击。因为本来你只想寄给台湾的清华大学,但现在却被重放到了北京的清华大学。

所谓的防范重放攻击,就是想办法让你发的交易,只在一条链上有效,在另一条链上无效。从而可以避免“重放”。

 

第2章 重放攻击的主要危害

重放攻击本质上不是一种“攻击”,它主要的危害在于用户不小心把本该属于自己的一种分裂币,意外发给了别人。

比如比特币在11月份分裂到了bt1和bt2两种币。如果用户A不知道自己已经同时拥有了这两种币,还是当成是自己只有一种币。现在A将自己的币发给了另外一个人B,其实本质上他发的只是bt1,但因为重放攻击的存在,导致B即可以收到bt1,又可以收到bt2,但B只付给Abt1的钱。这样用户A就白白丢掉了一份分裂币。

B是如何能收到A发的bt2币呢?其实只要用户B将bt2币的钱包打开,就自动能收到。用户B其他的都不用做,就是自动能收到。如果收不到,就将bt1的交易txid拿bt2钱包去广播一下,就可以收到了。因为bt1的交易就是bt2的交易。

 

第3章 为什么开发者不愿意在代码层面上修改交易格式来避免重放攻击

在8月份比特现金BCC的分裂当中,就没有重放攻击这回事。因为BCC的交易格式是作了修改的,让BCC的交易在BTC网络上是非法的,而且让BTC的交易在BCC网络上也是非法的。这叫双向防重放攻击原理。

所以用户A持有8月1日分裂点前的比特币时,A给B发送BTC,是无法将自己的BCC也意外发给B的,哪怕是A不知道自己多了一种币叫BCC。

但11月份这次潜在的分裂的两个版本的比特币节点软件都是不包含防重放攻击的代码的。原本btc1还是包含了一个防重防攻击的代码,但现在删了。

为什么开发者不愿意加这种防重防攻击代码呢?其实道理很简单,因为“比特币/BTC/bitcoin”的冠名权问题。

如果一个比特币节点软件主动加了防重防攻击的代码,就是将自己的交易格式改的和以前不一样了,这在所有人看来就是一种主动放弃继承比特币/BTC/bitcoin的冠名权的行为。

冠名权非常重要。加多宝和王老吉的故事都知道吧,要多少广告费也要抢到这个冠名权,没抢到就混淆视听,让消费者不知道谁是原版。

 

第4章 普通用户如何防范重放攻击

潜在分裂前要做的事。

1首先在潜在的分裂时间点前,最好是将币保存在自己控制私钥的钱包里。如果是在任何offchain钱包里,能否提到分裂币,得看这个钱包供应商的政策,他们会帮你拿到分裂币,你才能分到。另外有BCC的经验,大部分交易所和Offchain钱包虽然原则上同意分给用户分裂币,但却一直不给用户提现。到现在为止,BCC过去两个多月了,还有交易所不给用户提取BCC。所以在下次潜在分裂之前,最好是将币存在自己钱包里。

存在交易所的币,提出来;存在理财公司的币,提出来。无论你是提到轻钱包,还是完整节点钱包,都可以。但不建议使用HD钱包,因为HD钱包的私钥通用性没那么强。

为了更加通用性,如果你的币多的话,还是建议使用完整节点,现在就同时运行并下载潜在要分裂的两个完整节点钱包,下载好区块。

Btc1下载地址:https://github.com/btc1/bitcoin/releases

Bitcoin core 下载地址:https://bitcoin.org/en/download

分裂前你可以将币存在上面任意一个钱包里,将wallet.dat备份出来。注意,这需要两台电脑,或者一台电脑再装一个虚拟机。

如果是轻钱包,使用“私钥管理”功能,找出私钥明文,抄下来。

 2其次是要跟踪比特币是否分裂了。Segwit2x到了11月份升级的时候,是否会真的分裂,现在谁也不知道,只有等到升级完成后才知道。

Segwit2x将在494784区块高度上开始升级,大约是在11月18日。在这个高度之后,大家才知道比特币是否再次分裂。

下面这个网站会实时给出比特币是否分裂的信息:

https://www.btcforkmonitor.info/

如果到了494784区块高度,比特币真分裂了,那各位之前持币的人就有两种币了。这个时候请注意你要防范重放攻击了。

如果分裂了,那分裂后要做的事是:

3分裂后,不要着急发送你的币,而要先去买分裂后的币来污染你的币。如果真的出现两条链,并且在交易所已经上市,那就去交易所或找场外交易分别买一点这两种币。记住,两种币都要买(其实买一种也行的,不过为了安全最好是两种都有)。不用太多,买最小额度的就行,但要买两个不一样的额度,比如bt10.011,bt2买0.012。然后分别将买到的币提现发送你分裂前持有币的地址。

 4.然后你就可以执行分离币的操作了。你先操作一个钱包,比如你之前存币的是bitcoin core,同步到最新区块后,你会发现收到0.011(或0.012,肯定只能收到一种),先生成一个新地址。然后将全部的币,转入到这个新地址,这里的全部币就是包含了刚才新买的点一点币0.011(或0.012)。

这种包括了分裂后的币的UTXO交易,肯定是无法被重放的,所以你的另外一种分裂币还在这个钱包文件里。

然后你再将wallet.dat文件拷贝到btc1钱包下,同步到最新区块,你会发现收到0.012(或0.011)。然后在新建一个地址,将所有币发到这个新建的地址。

轻钱包的操作办法也是一样,只是导致私钥过程不能使用复制wallet.dat文件的方式,而是要使用”导入私钥”功能。但新出来的分裂链的时候,轻钱包是否能及时出来,就不知道了。

5.这样你就完成了你的币的分离,你就有两种币了。就不会被重放攻击。

 

第5章 结束语

今年是比特币分裂年吗?



(如果您觉得好,欢迎关注我的公众号: 闪电HSL,也欢迎加我微信号:13116885)


(如果你想学习比特币和区块链知识,欢迎加入我的小密圈)








您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存