11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。
在此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,用户资产被暴露于风险之中,且理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。 何为“重放攻击” 传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击/回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程,以破坏认证准确性。 虽然重放攻击在任何网络过程中都有发生的风险,但在涉及金融、支付等核心的数字货币和区块链领域,这个风险显得更加严重,尤其在区块链硬分叉中,它将导致一条链上的交易在另一条链上也合法。
举个简单例子说明一下区块链中的“重放攻击”及其影响:
小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他; 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒; 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒;于啤酒厂而言就是被重放攻击了,损失了无数啤酒。
就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,BCH ABC和BCH SV两类资产都存在。
由于没有做重放保护,分叉完了之后如果不去管它,任其自然生长,就会出现这样的情况:你在SV链上交易后,由于相同的地址、算法和交易格式,拿到ABC链上去重新广播,就有可能会被ABC链承认有效,从而进行相同的交易操作。倘若攻击者利用这一漏洞,不断在交易所进行充提BCH SV操作, 就能获取额外的BCH ABC。
可见,没有重放保护的BCH用户资产已经被暴露于风险之中,并且,一旦发生重放攻击等安全问题,社区为安全所做的共识和努力就会崩塌。
这种重放攻击的风险就曾在以太坊身上发生过。
2016年7月20日晚,以太坊在第192万个区块高度发生了硬分叉,产生了ETH chain和ETH Classic chain两条链,ETH和ETC两类代币。
这两条链上的地址、私钥算法及交易格式完全相同,导致在其中一条链上的交易在另一条链上也很可能合法。
由于事先未做预案,很多人利用这个漏洞,不断在交易所进行ETH充提操作,获取额外的ETC,于是 “重放攻击”得以在区块链世界被重新定义。
目前为止,ETH和ETC的用户依然存在重放攻击的风险。因为ETH和ETC都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。
由于BCH在没有重放保护的前提下已经发生分叉,被重放显然无法避免。
那么我们且看一下BCH升级后的两个版本:Bitcoin ABC0.18.2和Bitcoin SV 0.1。
ABC0.18.2版本主要修改是增加了两个操作码OPcode, OP_CHECKDATASIG (CDS)和OP_CHECKDATASIGVERIFY(DSV);将区块里的交易排序规则从拓扑排序(TTOR)改成了规范排序(CTOR)。
SV0.1版本主要修改是恢复了比特币早期的四个操作码OPCode,OP_MUL,OP_LSHIFT,OP_RSHIFT,OP_INVERT;删除每个脚本201个操作码的限制;提高区块大小上限到128MB。
由于双方的版本都更新了操作码,对于已持有BCH的交易所和用户而言,为避免遭受损失,在使用新的 OP code(两类币对应的客户端)进行交易操作之前,有必要对所持有的BCH ABC或BCH SV进行分离。
怎么分离呢?
一个最简单有效又一劳永逸的办法是:在分裂点后100个区块(待链稳定下来),获取一些来自分叉后新产生的Coinbase交易的UTXO,发到自己的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。
引用只存在于一条链上的UTXO之后,即使交易被人重放到另外一条链上,也会因为交易的输入(vin)有问题而打包失败,从而避免重放攻击。
分离两种资产后,你就可以使用新的OPCode了,就不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。
最后,安比实验室特此提醒BCH持有者和支持ABC/BSV的交易所,在分离自身或交易所用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode(尽量不要使用相关币种新版钱包新功能)。
往期回顾
本文由安比(SECBIT)实验室提供,安比实验室致力于解决区块链全生态安全问题,共建共识、可信、有序的区块链经济体。 安比(SECBIT)实验室 info@secbit.io
Scan to Follow