重放攻击

重放攻击

直击 BCH 硬分叉:采用「钱包分离法」彻底根除重放攻击风险

攻略chainnews 发表了文章 • 2018-11-20 13:24 • 来自相关话题

北京时间 10 月 16 日,自 02:16 块高度 556767 起,以比特大陆和蚂蚁矿池为首的 BCH ABC 阵营(代表人物吴忌寒)和以 CoinGeek 及 nChain 为首的 BCH SV 阵营 (代表人物 Craig Steve Wright,即澳本聪)正式宣告分家,分叉为 BCH ABC 和 BCH SV 两条独立的公链。

这场被业界广泛关注的 BCH 分叉算力之战,并没有出现一开始假想的 51% 算力攻击,双方在算力、出块速度上你追我赶,各自独立运行,暂时 ABC 链保持领先,SV 紧追其后。表面上看似波澜不惊,实则却暗流涌动。由于 BCH 分叉为 ABC 和 SV 后,两条新分叉后的支链,地址、私钥、签名规则、交易格式都相同,因此存在被重放攻击的风险。

何为重放攻击,简而言之是指,A 在 ABC 公链上向 B 发出了一个交易请求(把 ABC 转给 B ),B 可以在 SV 链上重放 A 发出的请求(索取与 ABC 等量的 SV),结果是,A 只向 B 发出了一次交易请求(转出 ABC ),B 却可以同时获得属于 A 的两份资产(ABC+SV),这样以来,B (攻击者)就非法侵占了 A 原本预期转账之外的额外资产,造成 A 在数字资产上的损失。

在此前区块链历史上的多次硬分叉,都存在因缺乏重放保护功能而出现的重放攻击事件,此次 BCH 硬分叉后,外网也已经报道出现了重放攻击个例。

据区块链安全公司 PeckShield 态势感知平台数据显示:11 月 16 日,即 BCH 硬分叉后的当天,BCH ABC 和 BCH SV 两条链上存在 341,068 笔重放交易;11 月 18 日,在受到不明巨量粉尘攻击的影响下,BCH ABC 和 BCH SV 两条链上的重放交易数高达 1,409,055 次,达到了百万级。图一为 BCH ABC 和 SV 链上硬分叉后,每小时被重放的交易次数。

然而,在如此巨量重放交易存在的情况下,ABC 和 SV 公链并没有出台全链层面的重放保护功能,来保障用户资产不受重放攻击的威胁。且各大交易所开始逐渐恢复 BCH 交易和存取币,而任何交易行为都存在潜在被重放攻击的可能。

当务之急,在重放保护功能出台前,交易所和一般用户该如何保障自身的数字资产不受侵害呢?





图一:BCH ABC 和 SV 链上硬分叉后每小时被重放的交易次数


PeckShield 安全人员经过周密分析并实测认为:可采用「钱包分离法」来解除风险,也就是用户应该将 ABC 和 SV 资产分离到不同钱包地址,具体操作有以下三种:

1、无掺加地址分离:在 ABC 和 SV 链上分别生成一个不同的地址,然后把原 BCH 地址中 ABC 和 SV 币分别转到这两个地址中。这两个交易确认成功后,新地址中的数字资产就不会再遭受重放攻击。据了解,有些 SV 节点在把 SV 的交易重放到 ABC 链上,所以我们建议先发起 ABC 链的交易,确认后再发起 SV 链交易。

2、掺加 Input 疫苗:在发起一个 ABC/SV 交易时,在 input 中加入一个只存在于 ABC/SV 链的小额 UTXO,使得这个交易在另一个链上是非法交易,无法重放。这个小额的 UTXO 可以由第三方服务商生成转发给用户,也可以自己产生。

3、掺加特殊 OP Code:ABC 链和 SV 链都有独有的 OP code,所以可以把它们加入交易中,达到 类似于第二种方法的效果。在 ABC 链的交易中可以加入 OP_CHECKDATASIG,SV 链可以加 OP_MUL。


PeckShield 认为只要彻底做到钱包分离,且分离过程不受干扰,就可以确保资产不再受重放攻击困扰。当然,为了强化各个处理方法的高效、牢靠,可以组合叠加使用。PeckShield 建议一般 BCH 持有者可以采用简单容易操作的第二种方法。对于交易所而言,因存在更大规模的交易量和复杂地址,可以叠加使用第一种+第二种或第一种+第三种方法来确保安全。PeckShield 也已和各大交易所建立联系,并尝试用各类有效方法,帮助用户解除存在的重放攻击风险。 查看全部
the-bitcoin-cash-community-debates-future-difficulty-adjustments-820x510.jpg

北京时间 10 月 16 日,自 02:16 块高度 556767 起,以比特大陆和蚂蚁矿池为首的 BCH ABC 阵营(代表人物吴忌寒)和以 CoinGeek 及 nChain 为首的 BCH SV 阵营 (代表人物 Craig Steve Wright,即澳本聪)正式宣告分家,分叉为 BCH ABC 和 BCH SV 两条独立的公链。

这场被业界广泛关注的 BCH 分叉算力之战,并没有出现一开始假想的 51% 算力攻击,双方在算力、出块速度上你追我赶,各自独立运行,暂时 ABC 链保持领先,SV 紧追其后。表面上看似波澜不惊,实则却暗流涌动。由于 BCH 分叉为 ABC 和 SV 后,两条新分叉后的支链,地址、私钥、签名规则、交易格式都相同,因此存在被重放攻击的风险。

何为重放攻击,简而言之是指,A 在 ABC 公链上向 B 发出了一个交易请求(把 ABC 转给 B ),B 可以在 SV 链上重放 A 发出的请求(索取与 ABC 等量的 SV),结果是,A 只向 B 发出了一次交易请求(转出 ABC ),B 却可以同时获得属于 A 的两份资产(ABC+SV),这样以来,B (攻击者)就非法侵占了 A 原本预期转账之外的额外资产,造成 A 在数字资产上的损失。

在此前区块链历史上的多次硬分叉,都存在因缺乏重放保护功能而出现的重放攻击事件,此次 BCH 硬分叉后,外网也已经报道出现了重放攻击个例。

据区块链安全公司 PeckShield 态势感知平台数据显示:11 月 16 日,即 BCH 硬分叉后的当天,BCH ABC 和 BCH SV 两条链上存在 341,068 笔重放交易;11 月 18 日,在受到不明巨量粉尘攻击的影响下,BCH ABC 和 BCH SV 两条链上的重放交易数高达 1,409,055 次,达到了百万级。图一为 BCH ABC 和 SV 链上硬分叉后,每小时被重放的交易次数。

然而,在如此巨量重放交易存在的情况下,ABC 和 SV 公链并没有出台全链层面的重放保护功能,来保障用户资产不受重放攻击的威胁。且各大交易所开始逐渐恢复 BCH 交易和存取币,而任何交易行为都存在潜在被重放攻击的可能。

当务之急,在重放保护功能出台前,交易所和一般用户该如何保障自身的数字资产不受侵害呢?

5d80cb2a-2325-5223-81b7-1681f43ead6b.jpeg

图一:BCH ABC 和 SV 链上硬分叉后每小时被重放的交易次数


PeckShield 安全人员经过周密分析并实测认为:可采用「钱包分离法」来解除风险,也就是用户应该将 ABC 和 SV 资产分离到不同钱包地址,具体操作有以下三种:


1、无掺加地址分离:在 ABC 和 SV 链上分别生成一个不同的地址,然后把原 BCH 地址中 ABC 和 SV 币分别转到这两个地址中。这两个交易确认成功后,新地址中的数字资产就不会再遭受重放攻击。据了解,有些 SV 节点在把 SV 的交易重放到 ABC 链上,所以我们建议先发起 ABC 链的交易,确认后再发起 SV 链交易。

2、掺加 Input 疫苗:在发起一个 ABC/SV 交易时,在 input 中加入一个只存在于 ABC/SV 链的小额 UTXO,使得这个交易在另一个链上是非法交易,无法重放。这个小额的 UTXO 可以由第三方服务商生成转发给用户,也可以自己产生。

3、掺加特殊 OP Code:ABC 链和 SV 链都有独有的 OP code,所以可以把它们加入交易中,达到 类似于第二种方法的效果。在 ABC 链的交易中可以加入 OP_CHECKDATASIG,SV 链可以加 OP_MUL。



PeckShield 认为只要彻底做到钱包分离,且分离过程不受干扰,就可以确保资产不再受重放攻击困扰。当然,为了强化各个处理方法的高效、牢靠,可以组合叠加使用。PeckShield 建议一般 BCH 持有者可以采用简单容易操作的第二种方法。对于交易所而言,因存在更大规模的交易量和复杂地址,可以叠加使用第一种+第二种或第一种+第三种方法来确保安全。PeckShield 也已和各大交易所建立联系,并尝试用各类有效方法,帮助用户解除存在的重放攻击风险。

重放攻击原理和防范措施——如何安全分离BCH的分裂币

攻略shandian 发表了文章 • 2018-11-18 19:20 • 来自相关话题

第0章 引言


即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。


第1章 重放攻击原理


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

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

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

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

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

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

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

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


第2章 领取分裂币


BCH分裂前用户需要注意的最重要的知识点有两个,第一个是掌握私钥。第二个是做好重防保护。

不过我们还是要面对现实,比特币确实很难用,对很多用户来说,可能真的搞不清楚私钥是个啥玩意。第一推荐真的自己去搞清楚来,如果实在是搞不清楚,那就存放在讲信用的交易所吧。

分裂后,用户如何领取分裂币呢?

领取分裂币的过程其实非常简单,只要用户将私钥导入到分裂币钱包,就完成了领取。

分裂后,第一步需要做的就是确认你有多少分裂币。这个一般使用区块链浏览器就可以查询的到。一般一个区块链币诞生后,一定会有一个区块链浏览器的,你只需要将你分裂前的收币地址复制到区块链浏览器去查看一下,就可以知道自己有多少分裂币了。

现在Bitcoin abc是有区块浏览器的

https://bch.btc.com


Bitcoin sv暂时还没有找到可用的区块浏览器。

第二步是安装分裂后的钱包。分裂后,去下载最新的钱包。一般来说下载一个开发者做的完整节点钱包是最为安全的。但因为要下载整个区块链,所以也是最麻烦的。只要你知道如何导出和导入私钥,使用SPV轻钱包也是一样的,安全性上也是足够的。

bitcoin abc在这里下载钱包:

https://download.bitcoinabc.org/0.18.4/


bitcoin sv在这里下载钱包,目前没有windows版本的

https://github.com/bitcoin-sv/bitcoin-sv/releases


鉴于目前生态比较混乱,不建议使用轻钱包。   

第三步就是导入私钥进钱包。

如果用户使用的是完整节点做钱包,比特币都保护在wallet.dat文件里。当分裂后,用户只需要重新下载分裂币的完整节点钱包,并且将wallet.dat文件导入进去就可以完成分裂币的领取了。

如果用户使用的是轻钱包,则需要你想办法将原来的私钥明文导出,并导入到分裂币的轻钱包中。但鉴于目前生态比较混乱,不建议使用轻钱包。   

请注意,上述领取分裂币的过程根本就没有发生任何的发币过程。


第3章 用户主动设计防重放保护


1.在分裂前,请将自己的币存在自己控制私钥的地址上。

2.为了保险起见,建议一定要存一个只有小余额(比如0.01BCH)的地址,这个地址里的币就是用来测试用的。

3.分裂后,下载新的分裂后的两个BCH钱包,将私钥导入到BCH钱包。

4.分裂后,等一天,到矿池(如果交易所提供提现,就从交易所买)买0.011BCH-abc,和0.012BCH-sv,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

这一步需要强调一下,为什么要等一天?因为比特币的区块奖励成熟度是100个区块,即比特币挖矿的Coinbase奖励在100个区块后才能花。这里说的从交易所里买币,最根本有效的应该是从矿池买分裂后100个区块的发出来的coinbase币。因为分裂后的coinbase币绝对是只可能在一条链上有效,在另一条链上是无效的。但为什么我们觉得从交易所买币也可能有用呢?是因为绝大多数交易所都会做好币的防重放保护,否则他们不敢打开提现功能。

5.然后你将你的钱包同步区块,你就会发现,在BCH-abc钱包只能收到0.011BCH,而BCH-sv钱包只能收到0.012BCH。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,就不可能被重放了。

6.将你污染的币,全部(注意一定是全部)发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BCH的那个钱包来完成测试。然后再将你的大额钱包做分离。

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK。 查看全部
Bitcoin-Gold-Fork-How-to-double-Bitcoin.jpg


第0章 引言


即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。


第1章 重放攻击原理


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

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

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

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

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

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

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

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


第2章 领取分裂币


BCH分裂前用户需要注意的最重要的知识点有两个,第一个是掌握私钥。第二个是做好重防保护。

不过我们还是要面对现实,比特币确实很难用,对很多用户来说,可能真的搞不清楚私钥是个啥玩意。第一推荐真的自己去搞清楚来,如果实在是搞不清楚,那就存放在讲信用的交易所吧。

分裂后,用户如何领取分裂币呢?

领取分裂币的过程其实非常简单,只要用户将私钥导入到分裂币钱包,就完成了领取。

分裂后,第一步需要做的就是确认你有多少分裂币。这个一般使用区块链浏览器就可以查询的到。一般一个区块链币诞生后,一定会有一个区块链浏览器的,你只需要将你分裂前的收币地址复制到区块链浏览器去查看一下,就可以知道自己有多少分裂币了。

现在Bitcoin abc是有区块浏览器的


https://bch.btc.com



Bitcoin sv暂时还没有找到可用的区块浏览器。

第二步是安装分裂后的钱包。分裂后,去下载最新的钱包。一般来说下载一个开发者做的完整节点钱包是最为安全的。但因为要下载整个区块链,所以也是最麻烦的。只要你知道如何导出和导入私钥,使用SPV轻钱包也是一样的,安全性上也是足够的。

bitcoin abc在这里下载钱包:


https://download.bitcoinabc.org/0.18.4/



bitcoin sv在这里下载钱包,目前没有windows版本的


https://github.com/bitcoin-sv/bitcoin-sv/releases



鉴于目前生态比较混乱,不建议使用轻钱包。   

第三步就是导入私钥进钱包。

如果用户使用的是完整节点做钱包,比特币都保护在wallet.dat文件里。当分裂后,用户只需要重新下载分裂币的完整节点钱包,并且将wallet.dat文件导入进去就可以完成分裂币的领取了。

如果用户使用的是轻钱包,则需要你想办法将原来的私钥明文导出,并导入到分裂币的轻钱包中。但鉴于目前生态比较混乱,不建议使用轻钱包。   

请注意,上述领取分裂币的过程根本就没有发生任何的发币过程。


第3章 用户主动设计防重放保护


1.在分裂前,请将自己的币存在自己控制私钥的地址上。

2.为了保险起见,建议一定要存一个只有小余额(比如0.01BCH)的地址,这个地址里的币就是用来测试用的。

3.分裂后,下载新的分裂后的两个BCH钱包,将私钥导入到BCH钱包。

4.分裂后,等一天,到矿池(如果交易所提供提现,就从交易所买)买0.011BCH-abc,和0.012BCH-sv,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

这一步需要强调一下,为什么要等一天?因为比特币的区块奖励成熟度是100个区块,即比特币挖矿的Coinbase奖励在100个区块后才能花。这里说的从交易所里买币,最根本有效的应该是从矿池买分裂后100个区块的发出来的coinbase币。因为分裂后的coinbase币绝对是只可能在一条链上有效,在另一条链上是无效的。但为什么我们觉得从交易所买币也可能有用呢?是因为绝大多数交易所都会做好币的防重放保护,否则他们不敢打开提现功能。

5.然后你将你的钱包同步区块,你就会发现,在BCH-abc钱包只能收到0.011BCH,而BCH-sv钱包只能收到0.012BCH。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,就不可能被重放了。

6.将你污染的币,全部(注意一定是全部)发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BCH的那个钱包来完成测试。然后再将你的大额钱包做分离。

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK。

听说1W个BCH不安全?好像是媒体过度解读了

攻略45qu 发表了文章 • 2018-11-18 17:44 • 来自相关话题

争吵、分歧、意见不合,

各种偏见交织在人生中的每一丝纤维之中。

————伍尔夫《到灯塔去》



BCH硬分叉引发的种种质疑和争议,不亚于币圈核爆炸。

11月16日凌晨,虽然BCH在第556767个区块高度完成硬分叉,分成了BCH ABC和BCH SV两条链,但这场世纪之战并没有因此落下帷幕,反而愈演愈烈。

今日,有媒体将矛头指向BCH存在重大安全威胁,这对于熊市本就如履薄冰的“观战者”们无异于又一颗深水炸弹。

根据PeckShield态势感知平台数据显示,BCH硬分叉后的当天,共有341068笔重放交易同时存在于ABC和SV两条链上,涉及10080个BCH。

更有国外用户爆料称,在交易过程中遭到了小额重放攻击损失。

BCH开发团队第一时间接受45区(ID:block-45)采访时否认这样的指控,称设计了input污染法和构造特有操作码交易两种方法来防止重放攻击,钱包和交易所安全交易可以选择input污染法。

这无疑是一场被专业名词占领的争论,令“观战者”更加如堕云雾。


被质疑的重放攻击是什么?

澄清中提到的input污染法又是什么?

BCH究竟安全吗?


1 质疑


重放攻击是黑客常用的一种攻击方式,在计算机世界,是指攻击者重复发送一个目的主机已经接受过的信息来达到欺骗目的。

我们可以这样生动理解。

想象一下,某个商店发放了限量的二维码优惠券,只要出示优惠券扫码,即能享受优惠。但这个商店却没有辨别某张券是否被扫过的能力,这时,是不是有人就会利用这个漏洞,重复使用同一张券?

现在,“这家商店”来到了区块链世界。

以BCH为例,即便分叉成两条链,但ABC链和SV链仍然共享着分叉时点以前的相同区块数据,这也是为什么分叉后,用户会凭空拥有了另一条链上的资产。

但同样的原因也会导致资产的凭空流失。质疑者们认为,如果在ABC链上发生了分叉前的老资产的转移,那么,这条交易信息有可能会被攻击者放到SV链上广播。

而分叉后的两条链又是完全独立的,因此SV链并不认为这笔交易已经被记录过,相反会认为完全合法,交易同样会被SV链的矿工打包到区块中,造成SV链上的资产损失。

如果客户端升级时加入了重放攻击保护,就可以避免这类情况发生,但此次BCH客户端升级,双方都没有加入重放攻击保护,这也正是安全漏洞之说的由来。


2 回应


面对这种质疑,今天,BCH社区开发团队对45区(ID:block-45)表示:“交易所和钱包并没有开放充提,所以交易的人是知道的,应该没有问题。大量的交易是因为分叉当晚CSW制造了粉尘交易。”

开发团队还表示:“可以肯定的是,并没有发生大量的重放现象,是极少见的,全世界都知道BCH在算力战,能够有这种行为的用户都可以确定币是安全的。”

而对于这次BCH硬分叉面临的重放攻击,该团队称仍然有防范措施,可以通过input污染法和构造特有操作码交易两种方法来防范。对于钱包和交易所来说,可以选择Input污染法。

一位圈内技术人士对45区(ID:block-45)解读,input污染法中的“input”指的是交易输入。一个BCH的交易结构中,有交易输入和交易输出。

“交易输入就是资金的来源,它引用的是之前已有交易的输出,而交易输出指的是资金的去向,即资金转给了谁。”他这样解释。

“如果矿工在验证交易时,发现交易输入所引用的交易是非法时,那么这条交易自然也会因资金“来路不正”而被认为是非法的。”

据45区(ID:block-45)了解,input污染法正是利用了这一点。

BCH分叉后,ABC和SV两条链新产生的区块数据独立,因此,ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在SV链上是非法的。

BCH社区开发团队表示,input污染法可以将本链上的coinbase交易划分出大量的小额交易输出,用户通过交易所或者钱包提取ABC链上的资产时,可以构造一笔交易,将新产生的小额输出也作为这笔交易输入,构造在其中。

如此一来,这条交易信息即便在SV链上重新广播时,矿工会因为存在的这笔非法小额输入而认为整笔交易非法,相当于这笔交易被污染了,“污染源”就是这些小额输入。

这样,也就完成了链上资产的永远分离,避免了资产损失。

在回应者眼中,此次安全质疑完全是媒体过度解读的结果。

BCH当下成为万众瞩目的聚焦中心,这场战役造成的波波“余震”恐怕还会继续。 查看全部
bch.jpg


争吵、分歧、意见不合,

各种偏见交织在人生中的每一丝纤维之中。

————伍尔夫《到灯塔去》




BCH硬分叉引发的种种质疑和争议,不亚于币圈核爆炸。

11月16日凌晨,虽然BCH在第556767个区块高度完成硬分叉,分成了BCH ABC和BCH SV两条链,但这场世纪之战并没有因此落下帷幕,反而愈演愈烈。

今日,有媒体将矛头指向BCH存在重大安全威胁,这对于熊市本就如履薄冰的“观战者”们无异于又一颗深水炸弹。

根据PeckShield态势感知平台数据显示,BCH硬分叉后的当天,共有341068笔重放交易同时存在于ABC和SV两条链上,涉及10080个BCH。

更有国外用户爆料称,在交易过程中遭到了小额重放攻击损失。

BCH开发团队第一时间接受45区(ID:block-45)采访时否认这样的指控,称设计了input污染法和构造特有操作码交易两种方法来防止重放攻击,钱包和交易所安全交易可以选择input污染法。

这无疑是一场被专业名词占领的争论,令“观战者”更加如堕云雾。


被质疑的重放攻击是什么?

澄清中提到的input污染法又是什么?

BCH究竟安全吗?



1 质疑


重放攻击是黑客常用的一种攻击方式,在计算机世界,是指攻击者重复发送一个目的主机已经接受过的信息来达到欺骗目的。

我们可以这样生动理解。

想象一下,某个商店发放了限量的二维码优惠券,只要出示优惠券扫码,即能享受优惠。但这个商店却没有辨别某张券是否被扫过的能力,这时,是不是有人就会利用这个漏洞,重复使用同一张券?

现在,“这家商店”来到了区块链世界。

以BCH为例,即便分叉成两条链,但ABC链和SV链仍然共享着分叉时点以前的相同区块数据,这也是为什么分叉后,用户会凭空拥有了另一条链上的资产。

但同样的原因也会导致资产的凭空流失。质疑者们认为,如果在ABC链上发生了分叉前的老资产的转移,那么,这条交易信息有可能会被攻击者放到SV链上广播。

而分叉后的两条链又是完全独立的,因此SV链并不认为这笔交易已经被记录过,相反会认为完全合法,交易同样会被SV链的矿工打包到区块中,造成SV链上的资产损失。

如果客户端升级时加入了重放攻击保护,就可以避免这类情况发生,但此次BCH客户端升级,双方都没有加入重放攻击保护,这也正是安全漏洞之说的由来。


2 回应


面对这种质疑,今天,BCH社区开发团队对45区(ID:block-45)表示:“交易所和钱包并没有开放充提,所以交易的人是知道的,应该没有问题。大量的交易是因为分叉当晚CSW制造了粉尘交易。”

开发团队还表示:“可以肯定的是,并没有发生大量的重放现象,是极少见的,全世界都知道BCH在算力战,能够有这种行为的用户都可以确定币是安全的。”

而对于这次BCH硬分叉面临的重放攻击,该团队称仍然有防范措施,可以通过input污染法和构造特有操作码交易两种方法来防范。对于钱包和交易所来说,可以选择Input污染法。

一位圈内技术人士对45区(ID:block-45)解读,input污染法中的“input”指的是交易输入。一个BCH的交易结构中,有交易输入和交易输出。

“交易输入就是资金的来源,它引用的是之前已有交易的输出,而交易输出指的是资金的去向,即资金转给了谁。”他这样解释。

“如果矿工在验证交易时,发现交易输入所引用的交易是非法时,那么这条交易自然也会因资金“来路不正”而被认为是非法的。”

据45区(ID:block-45)了解,input污染法正是利用了这一点。

BCH分叉后,ABC和SV两条链新产生的区块数据独立,因此,ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在SV链上是非法的。

BCH社区开发团队表示,input污染法可以将本链上的coinbase交易划分出大量的小额交易输出,用户通过交易所或者钱包提取ABC链上的资产时,可以构造一笔交易,将新产生的小额输出也作为这笔交易输入,构造在其中。

如此一来,这条交易信息即便在SV链上重新广播时,矿工会因为存在的这笔非法小额输入而认为整笔交易非法,相当于这笔交易被污染了,“污染源”就是这些小额输入。

这样,也就完成了链上资产的永远分离,避免了资产损失。

在回应者眼中,此次安全质疑完全是媒体过度解读的结果。

BCH当下成为万众瞩目的聚焦中心,这场战役造成的波波“余震”恐怕还会继续。

BCH 分叉后的钱包解决方案

攻略slowmist 发表了文章 • 2018-11-18 10:10 • 来自相关话题

昨天凌晨 BCH 分叉为两条链:BCH 和 BCHSV,我们持续做着相关风险监测,也注意到相关交易所/钱包暂停了充提。由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放攻击,造成相关对象的财产损失(依实际攻击场景而定)。

在无重放保护的情况下,分离这两种链上资产的方法,目前社区的解决方法主要有如下两个:


1. input 污染法


原理是引入了一笔非法交易的输出作为输入,那么这笔非法交易的输入将会使得这笔交易也会变为非法。

例如:

一笔交易广播到了 BCHSV 链中,引用了非法交易(在 BCH 合法,在 BCHSV 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCHSV 链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了 BCH 链中,引用了非法交易(在 BCHSV 合法,在 BCH 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCH 链承认,那么这笔交易就被重放免疫了。


2. 构造特有操作码交易


两条链的共识是有差别的,如果出构造一个本链合法,对方链上不合法的交易也可以进行分离,本次分叉双方的共识差别也体现在操作码上,可以在 BCH 链中,构造含有 OP_CHECKDATASIG 的输出,那么该笔交易在 BCH 上是合法的,但在 BCHSV 上是不合法的;同理在 BCHSV 链中,构造含有 OP_MUL 的输出,那么该笔交易在 BCHSV 上是合法的,但在 BCH 上是不合法的。

结合社区的方式及交易所相关工程实践经验,我们推荐使用第 1 种 input 污染法,但这需要有分叉后的 BCH 或 BCHSV 的 coinbase 交易(创币交易) UTXO 作为污染源,从这个 coinbase 交易中可以划分大量的小额 output,在用户提现时,可以将这些小额的 output 作为新交易的 input 之一来构建提现交易,从而较方便地完成分离。

另外,从工程实践上,我们也建议充提币的确认数可以适当提高,虽然目前来看两条分叉链未发生明显的攻击情况。

对于普通用户来说,等着先,不着急。


相关资料:

可行的钱包重放免疫实现方法:

https://bch.club/index.php?app=team&mod=Forum&act=detail&topic_id=685&team_id=1


哥白尼团队提供的开源工具,有效分离 BCH 和 BCHSV 两条链:

https://github.com/copernet/tools/tree/master/hardfork 查看全部
bch.jpg

昨天凌晨 BCH 分叉为两条链:BCH 和 BCHSV,我们持续做着相关风险监测,也注意到相关交易所/钱包暂停了充提。由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放攻击,造成相关对象的财产损失(依实际攻击场景而定)。

在无重放保护的情况下,分离这两种链上资产的方法,目前社区的解决方法主要有如下两个:


1. input 污染法


原理是引入了一笔非法交易的输出作为输入,那么这笔非法交易的输入将会使得这笔交易也会变为非法。

例如:

一笔交易广播到了 BCHSV 链中,引用了非法交易(在 BCH 合法,在 BCHSV 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCHSV 链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了 BCH 链中,引用了非法交易(在 BCHSV 合法,在 BCH 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCH 链承认,那么这笔交易就被重放免疫了。


2. 构造特有操作码交易


两条链的共识是有差别的,如果出构造一个本链合法,对方链上不合法的交易也可以进行分离,本次分叉双方的共识差别也体现在操作码上,可以在 BCH 链中,构造含有 OP_CHECKDATASIG 的输出,那么该笔交易在 BCH 上是合法的,但在 BCHSV 上是不合法的;同理在 BCHSV 链中,构造含有 OP_MUL 的输出,那么该笔交易在 BCHSV 上是合法的,但在 BCH 上是不合法的。

结合社区的方式及交易所相关工程实践经验,我们推荐使用第 1 种 input 污染法,但这需要有分叉后的 BCH 或 BCHSV 的 coinbase 交易(创币交易) UTXO 作为污染源,从这个 coinbase 交易中可以划分大量的小额 output,在用户提现时,可以将这些小额的 output 作为新交易的 input 之一来构建提现交易,从而较方便地完成分离。

另外,从工程实践上,我们也建议充提币的确认数可以适当提高,虽然目前来看两条分叉链未发生明显的攻击情况。

对于普通用户来说,等着先,不着急。


相关资料:

可行的钱包重放免疫实现方法:

https://bch.club/index.php?app=team&mod=Forum&act=detail&topic_id=685&team_id=1


哥白尼团队提供的开源工具,有效分离 BCH 和 BCHSV 两条链:

https://github.com/copernet/tools/tree/master/hardfork

BCH硬分叉背后:“重放攻击”下的用户自救指南

攻略secbit 发表了文章 • 2018-11-16 23:20 • 来自相关话题

11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。

在此次此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。


何谓“重放攻击”


传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程。

而在区块链领域,重放攻击(Replay Attacks)通常出现在区块链硬分叉的时候,指的是“一条链上的交易在另一条链上也往往是合法的”。

有一个例子可以简单的说明什么是区块链中的“重放攻击”: 

小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他。 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒。 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒, 这对于啤酒厂来说就是被重放攻击了,损失了无数啤酒。


就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,另外一条分叉出来的链又产生了BSV这一资产,也就是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都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。

 
应对:先分离 再交易


既然BCH在没有重放保护的前提下已经发生分叉,被重放无法避免,那么,为了避免受损失,交易所和用户都有必要在进行新的交易之前,对所持有的BCH ABC/BCH SV进行分离。

让我们回看一下BCH升级后的两个版本:bitcoin abc 0.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进行交易操作,应先进行分离再操作账户更为稳妥。

分离最简单有效的办法,就是在分裂点后100个区块,从矿池购买一丁点coinbase交易的UTXO,发到你的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。

分离两种资产后,新OPCode你就可以使用了,不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。

在此安比(SECBIT)实验室提醒广大BCH持有者和支持ABC/BSV的交易所,在分离你/你的用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode。 查看全部
Bitcoin-Replay-Attack.jpg

11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。

在此次此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。


何谓“重放攻击”


传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程。

而在区块链领域,重放攻击(Replay Attacks)通常出现在区块链硬分叉的时候,指的是“一条链上的交易在另一条链上也往往是合法的”。

有一个例子可以简单的说明什么是区块链中的“重放攻击”: 


小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他。 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒。 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒, 这对于啤酒厂来说就是被重放攻击了,损失了无数啤酒。



就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,另外一条分叉出来的链又产生了BSV这一资产,也就是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都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。

 
应对:先分离 再交易


既然BCH在没有重放保护的前提下已经发生分叉,被重放无法避免,那么,为了避免受损失,交易所和用户都有必要在进行新的交易之前,对所持有的BCH ABC/BCH SV进行分离。

让我们回看一下BCH升级后的两个版本:bitcoin abc 0.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进行交易操作,应先进行分离再操作账户更为稳妥。

分离最简单有效的办法,就是在分裂点后100个区块,从矿池购买一丁点coinbase交易的UTXO,发到你的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。

分离两种资产后,新OPCode你就可以使用了,不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。

在此安比(SECBIT)实验室提醒广大BCH持有者和支持ABC/BSV的交易所,在分离你/你的用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode。

江卓尔:一文说透算力战本质及 BCH 算力大战可能结果

攻略chainnews 发表了文章 • 2018-11-15 12:06 • 来自相关话题

一、为什么算力能成为比特币的最高仲裁机制?


答案很简单:因为算力能杀死一条链。

这是一条最底层的规则:生存是最终的辩论方式,是决定对错的最高依据。这条规则有很多种表述方法,例如「胜王败寇」, 「真理只在大炮的射程之内」,「暴力是决定所有规则的元规则」。

为什么无神论(科学论)是对的?是因为无神论能辩过有神论吗?当然不是,无神论和有神论两边的逻辑基础都不一致,辩起来就是鸡同鸭讲。无神论是对的,不是因为无神论更「有理」,而是因为无神论能造出枪。

我能造出枪消灭你,你都不存在了,你还有什么资格讨论对错吗?

所以,生存是最终的辩论方式,是决定对错的最高依据。为什么我支持「演化论」而不是「稳定论」?因为「演化论」以适应市场需求,增加用户数为唯一目的,而「稳定论」不以此为最高目的。

当然,「稳定论」会认为,我的链协议稳定,所以用户会选择我,但如果不是呢?如果两者矛盾呢?
如果根据市场需要,增加像 DSV 这样的功能,就是能比稳定时,吸引更多用户,首先达到 50 亿的最终目标呢?那么谁是对的,谁是错的?

所以,「演化论」是逻辑自洽的。极端锁死和过度修改都错,「演化论」更有可能在「稳定」和「修改」中找到最佳的位置,并获取最多的用户。

而「稳定论」包含了一个假设:稳定是最好的增加用户的方式。这个假设从商业上来看几乎不可能成立:商业上没有躺赢,中本聪并没有给我们设计一条成为世界货币的躺赢之路。

有人可能会认为:「产品才需要吸引更多用户,而货币不能这样设计」,「BCH 应该好好在货币上发展,而不应该搞各种新功能和第二层网络」。这不对,货币也是产品的一种,美元一样要面临欧元、人民币、日元的竞争,为什么美国政府要搞「石油美元」 (国际石油贸易以美元结算)?还不是为了增加美元的「应用」和「用户数」。

而在加密数字货币领域,这种产品竞争就更剧烈了:任何一种币,都必须面临大量币(产品)的竞争。


二、如何通过算力杀死一条链?


回到算力战上,算力战对大部分人来说,是从未用过的屠龙之技,所以各种文章和推测的错误很多。 莱比特矿池(BTC.TOP)是全网唯一一个有过大规模算力战经验的矿池,任何与本文不符的表述(包括 CSW 的表述)均为错误。

大家都知道「51% 算力攻击」:

1、攻击者通过优势算力,挖掘一条比原链更长的攻击链。
2、攻击链向全网广播后,节点按规则,将接受更长的链,丢弃原链。

下图中的直线链(上面的蓝色链和下面的红色链),表示被中立节点接受的主链。






PS:这里的「更长的链」准确地说是「累计难度更大的链」,例如节点会接受 2 个难度 10 的块,而抛弃掉 3 个难度 5 的块,因为 10+10=20>15=5+5+5。为了叙述方便,后文均假设每个块的难度相同 。

通过 51% 攻击,可以完成各种目的,例如:

1、在 Tx1 (交易 1)确认后,撤销掉 Tx1,让另一个冲突的 Tx2 (交易 2)生效。

例如 Alice 用 Tx1 发了 1 个 BTC 给 Bob,向 Bob 交换 100 个 LTC,在收到 Bob 的 100 个 LTC 后,再用一个发这 1BTC 给自己的 Tx2,替换掉 Tx1,把付给 Bob 的 1BTC 拿回来。

2、用自己挖的块(红色的块),孤立掉其它矿工挖的块(蓝色的块),让其它矿工损失挖矿产出。

在 51% 算力攻击的基础上,可以进行「51% 空块攻击」:攻击者只挖空块(不包括任何交易的块),并不接受(孤立掉)任何其它矿工挖的,正常打包交易的块,让这条链瘫痪掉,任何人都无法正常交易。

并且,由于矿工在这条链上挖到的块都被孤立掉,没有挖矿收入,因此也会逐渐停止挖矿,最后这条链就死了。







三、如何防御「51% 空块攻击」?


防御者需要不承认攻击链,在原来被覆盖的原链之后,调动更多的算力,挖一条比攻击者更长的链。






在实际的攻防中,双方将会不断延长自己的链,并有可能来回重组覆盖。也就是说,一个只按默认规则,接受最长链的中立节点,可能在攻击链较长时,接受攻击链,然后在防御链较长时,放弃攻击链,接受防御链。


四、攻防双方成本分析


胜利的一方,只要比失败的一方多挖一个块就可以。

1、如果防御者放弃了,那攻击者也不用再继续花成本挖块,只要简单停止挖矿即可,这条链就死了。之后攻击者如果发现防御者又开始挖块,那攻击者也只要继续比防御者多挖一个块就可以。

由于这条链已经死了,所以攻防双方挖的所有块就都作废了,双方都将损失所有挖矿成本。

2、如果攻击者放弃了,那情况有些不同,攻击者还是将损失所有挖出的块(和成本),但由于链还存活,所以防御者可以获得之前所挖的块,作为收入。






也就是说,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。


五、攻防双方算力分析


11 月 15 日,BCH 的 ABC 客户端,将硬分叉升级至 0.18.2 版,比特大陆支持 ABC 的此次升级。

而 CSW 所支持的 BSV 客户端,将同时分叉出链 BSV 链,并声称将对 ABC 0.18.2 链(升级链)进行算力战攻击,杀死 ABC 升级链。

5.1、CSW 方的算力:

支持 CSW 的矿池(Coingeek,svpool,BMG 等)目前展示出来的算力为 2000-3000P 左右,CSW 声称还有隐藏算力,因此可认为 CSW 至少有 3000P 自有算力。

CSW 还可以通过租赁方式,控制更多算力,例如和矿池、大矿场谈算力租赁,或者从 nicehash 等算力平台上租赁算力,只要愿意给出溢价(例如+20% 挖矿收益),CSW 自有+租赁算力到 1 万 P,难度不大。

5.2、比特大陆方的算力:

比特大陆旗下的矿池(BTC.com 和 Antpool)合计拥有约 15000P 的算力,再加上比特大陆参股的 ViaBTC 矿池,共计拥有约 20000P 的算力。

由于 BTC 和 BCH 均使用 sha256 算法挖矿,所以矿池在技术上,可以在 BTC 和 BCH 上来回秒切算力。只要正常给矿工按算力付挖矿产出的 BTC,矿工实际上并不关心实际挖的是什么币。矿工甚至不知道自己挖的是什么币,只是解答矿池下发的计算任务。因此比特大陆如果愿意,可以使用所有 20000 万 P 的 BTC 算力,来 BCH 上做防御,之前出现各种传闻,例如比特大陆在新疆部署 9 万台矿机用于算力战等,均为无意义的谣言。比特大陆使用 BTC 算力进行算力战,符合「生存是最终的辩论方式」的算力战原则。

由于比特大陆正处于上市中的关键阶段,CSW 威胁称,若比特大陆使用 BTC 算力来进行算力战,他将通过诉讼方式攻击比特大陆。但这一做法意义不大,因为比特大陆基本上不需要使用全部 20000P 算力应战,若使用部分算力,比特大陆可声明使用自有算力(或合作伙伴算力),其余(正常获得支付 BTC)的矿工既没有动机起诉,也难以确认自己挖的是什么币。

5.3、双方的资金:

虽然比特大陆方算力基本可以肯定比 CSW 多,但算力战的胜负,不仅仅取决于算力。若 CSW 如之前所声称,全力开战,那每天将烧掉几千万,甚至上亿的成本,那算力战的瓶颈,将不是算力,而是双方愿意烧掉的资金。

在资金方面,CSW 声称自己是亿万富翁,有豪宅名车,并得到 Calvin Ayre (博彩业大佬)的鼎力支持。比特大陆则是估值 150 亿美元,正在上市中的庞然大物,并且持有 100 多万个 BCH,在 BCH 上有足够的利益。双方都是重量级选手,至于双方愿意烧掉多少资金,取决于双方的意志,我们无法猜测。


六、攻防双方烧钱比例分析


BCH 的正常算力取决于:BTC 的总算力 & BCH/BTC 的汇率。例如 11 月 2 日 BTC 的总算力 51370P,BCH/BTC 汇率 =0.067,则 BCH 正常算力应为 51370*0.067=3441P。若 BCH 实际算力高于 3441P,则每台矿机挖矿 BCH 产出将低于 BTC,矿工将从 BCH 迁移到 BTC,直到两边挖矿收益相同,反之亦然。

CSW 投入的算力多少,将决定双方的烧钱比例。

6.1、如果 CSW 投入 7000P 算力(两倍 BCH 正常算力)

如第四章中所述,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。因此,若比特大陆也投入 7000P 算力进行防御,并最终获胜,那可以得到 BCH 期间挖出的 BCH 作为补偿(相当于 3500P 算力的成本)。

也就是说,在算力战烧钱时,比特大陆投入 7000P 算力防御,但其中只有 3500P 需要烧钱,剩下 3500P 将获得正常挖矿产出(虽然暂时无法兑现),而 CSW 的 7000P 算力全部都需要烧钱。

因此,CSW 投入的算力越少,比特大陆的「防御抵扣优势」越大,例如各自投入 5000P 时,比特大陆 1500P 烧钱 vs CSW 5000P 烧钱,因此比特大陆坚持到底的决心也必然越大。

6.2、如果 CSW 投入 7000~14000P 算力

此时,决定胜负的将主要不是双方的算力,而是双方的烧钱意志。例如 CSW 投入 10000P vs 比特大陆 10000P,则比特大陆「防御抵扣优势」将不明显,抵扣后将变成 CSW 10000P 烧钱 vs 比特大陆 6500P 烧钱。

并且在双方抽调 BTC 大量算力(假设共 20000P)到 BCH 上打算力战后,将大幅提高每 P 算力的租赁成本:

a、BTC 交易打包手续费将大幅提高

由于 BTC 的区块大小被 Core 锁死为 1M,因此:算力减少 40% → 出块速度减少 40% → 每 10 分钟 1 个 1M 区块变成每 10 分钟 0.6 个区块 =0.6M 区块 → BTC 和 2017 年底一样,发生超级大拥堵 → BTC 交易打包手续费将提高到 20-30% → 每 P 算力使用成本提高 20-30%

b、BTC 每 P 算力产出将大幅提高

若算力战短时间无法结束,那 BTC 经过难度调整后,每 P 算力产出将提高 40%,进一步提高每 P 算力使用成本,降低防御方的抵扣优势。

目前 20000P 算力日产出 3000 万元,算力战后期成本可能上升到 5000 万元 / 日 或更多,若 CSW 按照之前声称,全力进行算力战,那算力战将以极快的速度烧钱,并不会持续很长时间。

6.3、总结:

算力战的胜负,取决于算力和资金的综合影响。CSW 的算力越少,需要的资金优势越大;算力越大,需要的资金优势越小。如果 CSW 的资金优势极大,则哪怕 4000P 的算力,也可以打赢算力战,迫使比特大陆放弃防御。


七、算力战的正面战 & 游击战


从第 2 到 6 章,阐述了「以杀死一条链为目的的算力战」 :从分叉点开始,攻防双方持续地在自己链上挖块,直到一方放弃自己的整条链为止。

这种「算力正面战」类似国家之间进行的,以灭国为目的的正面战争,正面战争耗资巨大,持续时间短,对非军事目标破坏小。






以之相对应的,是「算力游击战」:攻击方由于力量或意志不够,并不进行正面对抗,不是持续地挖攻击链,而是分散、偶尔地攻击,因此攻击成本低,但持续时间长。每一次攻击链在短暂地覆盖掉原链后,都必然再被防御方覆盖回去,只能对链的稳定性造成影响,但不能杀死一条链。

防御方面对「算力游击战」的防御成本为 0,由于攻击方不会持续挖矿,因此防御方只要再继续正常挖几个块,就可以把攻击链覆盖掉,不需要付出额外的防御成本。唯一的损失只是区块链不稳定:这段时间内,链上无法打包交易,被攻击链覆盖区块的交易,也会暂时变成未确认交易。

「正面战」和「游击战」的差别总结如下:






如本文的「上」和「中」所述,算力投票(算力战)的目的是作为最终仲裁方式,在双方目标一致,只是手段不一致的情况下,避免不必要的分叉。只有「正面战」才有「消灭一条链避免分叉」的作用,而「游击战」没有这种作用,因此「游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。


八、算力战的结果


算力战的可能演化路径,如下图:






情况 A:比特大陆防御成功,CSW 攻击失败

CSW 在宣传中一直声称要「打算力战」,「没有分裂」。在 CSW 算力战失败后,若 CSW 履行承诺,放弃 BSV 链,则算力战结束,ABC 链成为 BCH,BSV 链死亡【流程图,结果 2】

但后来 CSW 又声称「要打两年」,「要让 BCH 没有任何交易」(见 Roger Ver 宣布旗下 Bitcoin.com 支持 ABC 后,CSW 给 Roger Ver 的信)






如果 CSW 在正面战失败后(甚至不愿烧钱打正面战),继续打不能杀死一条链,不能防止分裂的「游击战」,同时 BSV 链继续挖块,形成事实上长时间并存的,ABC 和 BSV 两条分裂链【流程图,结果 1】,那 CSW 将违背自己「不分裂」的承诺,被社区大部分人所抛弃。

CSW 长期进行游击战,将导致 BCH 链长时间处于不稳定状态,交易所可能长时间不恢复 BCH 的充提,商家可能长时间不愿接受 BCH,也就是 CSW 信中所称的「2 years of no trade (两年没有任何交易)」, 「welcome to bankruptcy (欢迎面对破产)」。这不符合 BCH 社区所有人的利益。

如果 BCH 社区无法阻止 CSW 一意孤行,长期进行游击战,那么:

a、BCH 上的矿池需要建立互相合作的自动防御系统,在 CSW 的算力正常挖矿时,接受其挖出的块;在检查到孤立原链区块的攻击链时,不接受攻击链,而是在原链区块之后,自动调集算力挖矿,直到覆盖掉 CSW 的攻击链为止。

b、但在防御算力覆盖掉攻击链的这段时间内(可能几分钟到几个小时,视攻击链的长度,攻击链越长,需要的恢复时间越久),BCH 链将暂时不能确认交易,用户也将看到最近确认的交易,重新变成未确认,还是给链造成了不稳定。

因此,最好的方法是 ABC 开发组发布临时战时补丁,最多只接受高度 =1 的重组链(常见的孤立块),不接受任何高度 >=2 的重组链,这样攻击方最多只能孤立最近 1 个区块(回滚 1 确认的交易),恢复时间也很短,不会对交易所和商家造成威胁。

但此补丁造成的后果是,在使用补丁的时间内矿池必须提高警惕,避免因为某些网络原因,产生高度 >=2 的连续孤立块,因为这样会导致不同矿池的永久性分叉。若意外发生了这样的分叉,矿池必须立即互相协调,放弃较短的分叉链,统一到最长的链上。

情况 B:CSW 攻击成功,比特大陆放弃防御

如 6.2 中分析,若 CSW 烧钱超过比特大陆的承受能力,则比特大陆将被迫放弃防御。ABC 开发组若放弃 ABC 链接受 BSV 链,或者不接受 BSV 链但退出 BCH 开发,则算力战结束,ABC 链死亡(无人继续挖矿),BSV 链成为 BCH【流程图,结果 3】。

ABC 开发组也可能不放弃,声称被攻击,原挖矿算法不安全,将挖矿算法从 POW 修改为 POW+POS。虽然修改挖矿算法将导致巨大的争议,但从交易所的实际表态来看,由于 BitcoinCash.org 域名和 ABC 开发组均支持 ABC 链,故交易所将大概率给 ABC 链保留 BCH 的交易对,给 BSV 链新增 BSV 的交易对(和之前诸多 BTC 分叉币一样的流程)【流程图,结果 4】。

这是最差的一种情况,BCH 社区将发生巨大的分裂,BCH 将受到巨大削弱,BSV 将继承 BCH 放弃的目标——挑战 BTC,成为真正的比特币。






不管最后的结果如何,本次算力战,都将展示算力的作用和威力,显著提高算力在整个生态中的地位,并为算力作为比特币分歧的最终裁决手段,做好铺垫。BTC,BCH,BSV 等诸多同算法分裂币种,最后可能都将被统一。


九、算力战期间用户建议


1、若你不打算在算力战期间买卖 BCH,那简单保管好你的私钥即可。

2、若你准备在算力战期间买卖 BCH,请仔细阅读本文关于算力战攻防的原理和流程说明,并忽略任何与本文相抵触的表述。算力战期间 ABC 和 BSV 的价格变化,请咨询上帝(我的一贯观点:币价长期问用户数,短期问上帝)。

3、CSW 一直在混淆「一个交易在两条链上都能打包」和「只存在一条链,没有分裂」这两件没有关系的事情(可能是为了 CSW 的支持者反对 BCH 分裂成两个币?)。算力战一开始,ABC 和 BSV 链只要有最轻微的一点不一致(例如 ABC 链打包了一个带 DSV 操作码的交易),那 ABC 和 BSV 链在物理上,就分叉成了两条链,不存在什么「只存在一条链」,CSW 最多只可能做到杀死 ABC 链,让两条链只有一条活下来。

在 ABC 和 BSV 链分裂后,由于 CSW 不在 BSV 链上加重放保护,故将发生之前 ETH 和 ETC 分叉时类似的情况(发送 ETH 时,一起把同地址的 ETC 发了出去)。你在发送 ABC 币时,由于你发 ABC 的这个交易在 BSV 链上也能打包,所以很可能将 BSV 币也一起发了出去。若你不懂得做分离,需将币发到 BCH 和 BSV 充值地址一样的交易所,以免丢币。

4、在算力战前将币充到(承诺给两种币的)交易所,好处是算力战期间还可以交易,并且如果分叉,交易所会帮你做好两种币分离。坏处是什么时候可以充提,得完全听交易所。如果算力战持续很长时间(尤其如果 CSW 长时间打游击战),交易所可能会很久都不开放充提。另外,任何交易所都有倒闭的风险。

5、把币留在链上自己控制私钥,坏处是算力战期间不能交易,好处是控制自己的币,可以在算力战后,选最先恢复充提的交易所交易。两种做法各有利弊,根据自己的情况和需要,自行选择。


九、我和莱比特矿池(BTC.TOP)的态度


我支持算力投票(算力战),认为 BCH 应该以获取用户为最高目的,快速演化,并通过算力投票(算力战)的方式,消除演化中的分歧,防止不必要的分叉。

莱比特矿池(BTC.TOP)的算力将支持愿意投入更多算力和资金的一方,并帮助这一方,尽快结束算力战混乱的局面,恢复 BCH 区块链的秩序。


十、总结


1、生存是最终的辩论方式,是决定对错的最高依据。算力能杀死一条链,所以算力能成为比特币的最高仲裁机制。

2、通过「51% 空块攻击」可以阻止一条链上打包确认任何交易,并且矿工无法挖到任何块后,也会逐渐停止挖矿,最后这条链就死了。

3、防御「51% 空块攻击」需要坚守原链,调动更多的算力,挖一条比攻击者更长的链,反过来把攻击链覆盖回去。

4、防御者有挖矿产出作为「防御抵扣优势」,攻击者的算力越大,则防御者的抵扣优势越小,攻击者需要的资金优势越小。反过来,攻击者的资金优势越大,则需要的算力越小。

5、比特大陆可调用 BTC 的算力用于 BCH 算力战,因此算力多于 CSW。CSW 必须有资金优势和更坚强的烧钱意志,才能胜利。

6、「算力游击战」不能达到算力战的最终目的:杀死一条链。「算力游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。

7、算力战后,若失败的一方认输,则算力战结束,存活链成为 BCH。若失败的一方不认输(CSW 继续打游击战,或者 ABC 改 POW+POS 算法),则 BCH 分裂为 BCH 和 BSV 两个币。

8、如果 CSW 坚持进行「算力游击战」,则需要 ABC 开发组打补丁、矿池、交易所配合,消除影响。
 
 
作者:江卓尔,莱比特矿池(BTC.TOP) CEO 查看全部

exchanges-experience-difficulties-during-bitcoin-cash-distribution.jpg


一、为什么算力能成为比特币的最高仲裁机制?


答案很简单:因为算力能杀死一条链。

这是一条最底层的规则:生存是最终的辩论方式,是决定对错的最高依据。这条规则有很多种表述方法,例如「胜王败寇」, 「真理只在大炮的射程之内」,「暴力是决定所有规则的元规则」。

为什么无神论(科学论)是对的?是因为无神论能辩过有神论吗?当然不是,无神论和有神论两边的逻辑基础都不一致,辩起来就是鸡同鸭讲。无神论是对的,不是因为无神论更「有理」,而是因为无神论能造出枪。

我能造出枪消灭你,你都不存在了,你还有什么资格讨论对错吗?

所以,生存是最终的辩论方式,是决定对错的最高依据。为什么我支持「演化论」而不是「稳定论」?因为「演化论」以适应市场需求,增加用户数为唯一目的,而「稳定论」不以此为最高目的。

当然,「稳定论」会认为,我的链协议稳定,所以用户会选择我,但如果不是呢?如果两者矛盾呢?
如果根据市场需要,增加像 DSV 这样的功能,就是能比稳定时,吸引更多用户,首先达到 50 亿的最终目标呢?那么谁是对的,谁是错的?

所以,「演化论」是逻辑自洽的。极端锁死和过度修改都错,「演化论」更有可能在「稳定」和「修改」中找到最佳的位置,并获取最多的用户。

而「稳定论」包含了一个假设:稳定是最好的增加用户的方式。这个假设从商业上来看几乎不可能成立:商业上没有躺赢,中本聪并没有给我们设计一条成为世界货币的躺赢之路。

有人可能会认为:「产品才需要吸引更多用户,而货币不能这样设计」,「BCH 应该好好在货币上发展,而不应该搞各种新功能和第二层网络」。这不对,货币也是产品的一种,美元一样要面临欧元、人民币、日元的竞争,为什么美国政府要搞「石油美元」 (国际石油贸易以美元结算)?还不是为了增加美元的「应用」和「用户数」。

而在加密数字货币领域,这种产品竞争就更剧烈了:任何一种币,都必须面临大量币(产品)的竞争。


二、如何通过算力杀死一条链?


回到算力战上,算力战对大部分人来说,是从未用过的屠龙之技,所以各种文章和推测的错误很多。 莱比特矿池(BTC.TOP)是全网唯一一个有过大规模算力战经验的矿池,任何与本文不符的表述(包括 CSW 的表述)均为错误。

大家都知道「51% 算力攻击」:

1、攻击者通过优势算力,挖掘一条比原链更长的攻击链。
2、攻击链向全网广播后,节点按规则,将接受更长的链,丢弃原链。

下图中的直线链(上面的蓝色链和下面的红色链),表示被中立节点接受的主链。

3dd545c6-3a16-5832-b77f-137e0c565dc7.jpg


PS:这里的「更长的链」准确地说是「累计难度更大的链」,例如节点会接受 2 个难度 10 的块,而抛弃掉 3 个难度 5 的块,因为 10+10=20>15=5+5+5。为了叙述方便,后文均假设每个块的难度相同 。

通过 51% 攻击,可以完成各种目的,例如:

1、在 Tx1 (交易 1)确认后,撤销掉 Tx1,让另一个冲突的 Tx2 (交易 2)生效。

例如 Alice 用 Tx1 发了 1 个 BTC 给 Bob,向 Bob 交换 100 个 LTC,在收到 Bob 的 100 个 LTC 后,再用一个发这 1BTC 给自己的 Tx2,替换掉 Tx1,把付给 Bob 的 1BTC 拿回来。

2、用自己挖的块(红色的块),孤立掉其它矿工挖的块(蓝色的块),让其它矿工损失挖矿产出。

在 51% 算力攻击的基础上,可以进行「51% 空块攻击」:攻击者只挖空块(不包括任何交易的块),并不接受(孤立掉)任何其它矿工挖的,正常打包交易的块,让这条链瘫痪掉,任何人都无法正常交易。

并且,由于矿工在这条链上挖到的块都被孤立掉,没有挖矿收入,因此也会逐渐停止挖矿,最后这条链就死了。

e4dd21f5-c1fa-5676-bc21-8d2e3f828ccd.jpg



三、如何防御「51% 空块攻击」?


防御者需要不承认攻击链,在原来被覆盖的原链之后,调动更多的算力,挖一条比攻击者更长的链。

2dd1786c-3054-5c78-9151-f7c865ef7ab2.jpg


在实际的攻防中,双方将会不断延长自己的链,并有可能来回重组覆盖。也就是说,一个只按默认规则,接受最长链的中立节点,可能在攻击链较长时,接受攻击链,然后在防御链较长时,放弃攻击链,接受防御链。


四、攻防双方成本分析


胜利的一方,只要比失败的一方多挖一个块就可以。

1、如果防御者放弃了,那攻击者也不用再继续花成本挖块,只要简单停止挖矿即可,这条链就死了。之后攻击者如果发现防御者又开始挖块,那攻击者也只要继续比防御者多挖一个块就可以。

由于这条链已经死了,所以攻防双方挖的所有块就都作废了,双方都将损失所有挖矿成本。

2、如果攻击者放弃了,那情况有些不同,攻击者还是将损失所有挖出的块(和成本),但由于链还存活,所以防御者可以获得之前所挖的块,作为收入。

f10311ce-819c-5840-b5a4-8b66128f3aea.jpg


也就是说,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。


五、攻防双方算力分析


11 月 15 日,BCH 的 ABC 客户端,将硬分叉升级至 0.18.2 版,比特大陆支持 ABC 的此次升级。

而 CSW 所支持的 BSV 客户端,将同时分叉出链 BSV 链,并声称将对 ABC 0.18.2 链(升级链)进行算力战攻击,杀死 ABC 升级链。

5.1、CSW 方的算力:

支持 CSW 的矿池(Coingeek,svpool,BMG 等)目前展示出来的算力为 2000-3000P 左右,CSW 声称还有隐藏算力,因此可认为 CSW 至少有 3000P 自有算力。

CSW 还可以通过租赁方式,控制更多算力,例如和矿池、大矿场谈算力租赁,或者从 nicehash 等算力平台上租赁算力,只要愿意给出溢价(例如+20% 挖矿收益),CSW 自有+租赁算力到 1 万 P,难度不大。

5.2、比特大陆方的算力:

比特大陆旗下的矿池(BTC.com 和 Antpool)合计拥有约 15000P 的算力,再加上比特大陆参股的 ViaBTC 矿池,共计拥有约 20000P 的算力。

由于 BTC 和 BCH 均使用 sha256 算法挖矿,所以矿池在技术上,可以在 BTC 和 BCH 上来回秒切算力。只要正常给矿工按算力付挖矿产出的 BTC,矿工实际上并不关心实际挖的是什么币。矿工甚至不知道自己挖的是什么币,只是解答矿池下发的计算任务。因此比特大陆如果愿意,可以使用所有 20000 万 P 的 BTC 算力,来 BCH 上做防御,之前出现各种传闻,例如比特大陆在新疆部署 9 万台矿机用于算力战等,均为无意义的谣言。比特大陆使用 BTC 算力进行算力战,符合「生存是最终的辩论方式」的算力战原则。

由于比特大陆正处于上市中的关键阶段,CSW 威胁称,若比特大陆使用 BTC 算力来进行算力战,他将通过诉讼方式攻击比特大陆。但这一做法意义不大,因为比特大陆基本上不需要使用全部 20000P 算力应战,若使用部分算力,比特大陆可声明使用自有算力(或合作伙伴算力),其余(正常获得支付 BTC)的矿工既没有动机起诉,也难以确认自己挖的是什么币。

5.3、双方的资金:

虽然比特大陆方算力基本可以肯定比 CSW 多,但算力战的胜负,不仅仅取决于算力。若 CSW 如之前所声称,全力开战,那每天将烧掉几千万,甚至上亿的成本,那算力战的瓶颈,将不是算力,而是双方愿意烧掉的资金。

在资金方面,CSW 声称自己是亿万富翁,有豪宅名车,并得到 Calvin Ayre (博彩业大佬)的鼎力支持。比特大陆则是估值 150 亿美元,正在上市中的庞然大物,并且持有 100 多万个 BCH,在 BCH 上有足够的利益。双方都是重量级选手,至于双方愿意烧掉多少资金,取决于双方的意志,我们无法猜测。


六、攻防双方烧钱比例分析


BCH 的正常算力取决于:BTC 的总算力 & BCH/BTC 的汇率。例如 11 月 2 日 BTC 的总算力 51370P,BCH/BTC 汇率 =0.067,则 BCH 正常算力应为 51370*0.067=3441P。若 BCH 实际算力高于 3441P,则每台矿机挖矿 BCH 产出将低于 BTC,矿工将从 BCH 迁移到 BTC,直到两边挖矿收益相同,反之亦然。

CSW 投入的算力多少,将决定双方的烧钱比例。

6.1、如果 CSW 投入 7000P 算力(两倍 BCH 正常算力)

如第四章中所述,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。因此,若比特大陆也投入 7000P 算力进行防御,并最终获胜,那可以得到 BCH 期间挖出的 BCH 作为补偿(相当于 3500P 算力的成本)。

也就是说,在算力战烧钱时,比特大陆投入 7000P 算力防御,但其中只有 3500P 需要烧钱,剩下 3500P 将获得正常挖矿产出(虽然暂时无法兑现),而 CSW 的 7000P 算力全部都需要烧钱。

因此,CSW 投入的算力越少,比特大陆的「防御抵扣优势」越大,例如各自投入 5000P 时,比特大陆 1500P 烧钱 vs CSW 5000P 烧钱,因此比特大陆坚持到底的决心也必然越大。

6.2、如果 CSW 投入 7000~14000P 算力

此时,决定胜负的将主要不是双方的算力,而是双方的烧钱意志。例如 CSW 投入 10000P vs 比特大陆 10000P,则比特大陆「防御抵扣优势」将不明显,抵扣后将变成 CSW 10000P 烧钱 vs 比特大陆 6500P 烧钱。

并且在双方抽调 BTC 大量算力(假设共 20000P)到 BCH 上打算力战后,将大幅提高每 P 算力的租赁成本:

a、BTC 交易打包手续费将大幅提高

由于 BTC 的区块大小被 Core 锁死为 1M,因此:算力减少 40% → 出块速度减少 40% → 每 10 分钟 1 个 1M 区块变成每 10 分钟 0.6 个区块 =0.6M 区块 → BTC 和 2017 年底一样,发生超级大拥堵 → BTC 交易打包手续费将提高到 20-30% → 每 P 算力使用成本提高 20-30%

b、BTC 每 P 算力产出将大幅提高

若算力战短时间无法结束,那 BTC 经过难度调整后,每 P 算力产出将提高 40%,进一步提高每 P 算力使用成本,降低防御方的抵扣优势。

目前 20000P 算力日产出 3000 万元,算力战后期成本可能上升到 5000 万元 / 日 或更多,若 CSW 按照之前声称,全力进行算力战,那算力战将以极快的速度烧钱,并不会持续很长时间。

6.3、总结:

算力战的胜负,取决于算力和资金的综合影响。CSW 的算力越少,需要的资金优势越大;算力越大,需要的资金优势越小。如果 CSW 的资金优势极大,则哪怕 4000P 的算力,也可以打赢算力战,迫使比特大陆放弃防御。


七、算力战的正面战 & 游击战


从第 2 到 6 章,阐述了「以杀死一条链为目的的算力战」 :从分叉点开始,攻防双方持续地在自己链上挖块,直到一方放弃自己的整条链为止。

这种「算力正面战」类似国家之间进行的,以灭国为目的的正面战争,正面战争耗资巨大,持续时间短,对非军事目标破坏小。

f3a1d91b-3245-53cb-83c5-45e9fe66976d.jpg


以之相对应的,是「算力游击战」:攻击方由于力量或意志不够,并不进行正面对抗,不是持续地挖攻击链,而是分散、偶尔地攻击,因此攻击成本低,但持续时间长。每一次攻击链在短暂地覆盖掉原链后,都必然再被防御方覆盖回去,只能对链的稳定性造成影响,但不能杀死一条链。

防御方面对「算力游击战」的防御成本为 0,由于攻击方不会持续挖矿,因此防御方只要再继续正常挖几个块,就可以把攻击链覆盖掉,不需要付出额外的防御成本。唯一的损失只是区块链不稳定:这段时间内,链上无法打包交易,被攻击链覆盖区块的交易,也会暂时变成未确认交易。

「正面战」和「游击战」的差别总结如下:

6c15a69f-a161-56b8-98d9-d50db297b80b.jpg


如本文的「上」和「中」所述,算力投票(算力战)的目的是作为最终仲裁方式,在双方目标一致,只是手段不一致的情况下,避免不必要的分叉。只有「正面战」才有「消灭一条链避免分叉」的作用,而「游击战」没有这种作用,因此「游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。


八、算力战的结果


算力战的可能演化路径,如下图:

9169b01f-76af-5870-a713-e7c0282911e2.jpg


情况 A:比特大陆防御成功,CSW 攻击失败

CSW 在宣传中一直声称要「打算力战」,「没有分裂」。在 CSW 算力战失败后,若 CSW 履行承诺,放弃 BSV 链,则算力战结束,ABC 链成为 BCH,BSV 链死亡【流程图,结果 2】

但后来 CSW 又声称「要打两年」,「要让 BCH 没有任何交易」(见 Roger Ver 宣布旗下 Bitcoin.com 支持 ABC 后,CSW 给 Roger Ver 的信)

3a15bb37-e76c-5da9-a253-e3046f7a8189.jpg


如果 CSW 在正面战失败后(甚至不愿烧钱打正面战),继续打不能杀死一条链,不能防止分裂的「游击战」,同时 BSV 链继续挖块,形成事实上长时间并存的,ABC 和 BSV 两条分裂链【流程图,结果 1】,那 CSW 将违背自己「不分裂」的承诺,被社区大部分人所抛弃。

CSW 长期进行游击战,将导致 BCH 链长时间处于不稳定状态,交易所可能长时间不恢复 BCH 的充提,商家可能长时间不愿接受 BCH,也就是 CSW 信中所称的「2 years of no trade (两年没有任何交易)」, 「welcome to bankruptcy (欢迎面对破产)」。这不符合 BCH 社区所有人的利益。

如果 BCH 社区无法阻止 CSW 一意孤行,长期进行游击战,那么:

a、BCH 上的矿池需要建立互相合作的自动防御系统,在 CSW 的算力正常挖矿时,接受其挖出的块;在检查到孤立原链区块的攻击链时,不接受攻击链,而是在原链区块之后,自动调集算力挖矿,直到覆盖掉 CSW 的攻击链为止。

b、但在防御算力覆盖掉攻击链的这段时间内(可能几分钟到几个小时,视攻击链的长度,攻击链越长,需要的恢复时间越久),BCH 链将暂时不能确认交易,用户也将看到最近确认的交易,重新变成未确认,还是给链造成了不稳定。

因此,最好的方法是 ABC 开发组发布临时战时补丁,最多只接受高度 =1 的重组链(常见的孤立块),不接受任何高度 >=2 的重组链,这样攻击方最多只能孤立最近 1 个区块(回滚 1 确认的交易),恢复时间也很短,不会对交易所和商家造成威胁。

但此补丁造成的后果是,在使用补丁的时间内矿池必须提高警惕,避免因为某些网络原因,产生高度 >=2 的连续孤立块,因为这样会导致不同矿池的永久性分叉。若意外发生了这样的分叉,矿池必须立即互相协调,放弃较短的分叉链,统一到最长的链上。

情况 B:CSW 攻击成功,比特大陆放弃防御

如 6.2 中分析,若 CSW 烧钱超过比特大陆的承受能力,则比特大陆将被迫放弃防御。ABC 开发组若放弃 ABC 链接受 BSV 链,或者不接受 BSV 链但退出 BCH 开发,则算力战结束,ABC 链死亡(无人继续挖矿),BSV 链成为 BCH【流程图,结果 3】。

ABC 开发组也可能不放弃,声称被攻击,原挖矿算法不安全,将挖矿算法从 POW 修改为 POW+POS。虽然修改挖矿算法将导致巨大的争议,但从交易所的实际表态来看,由于 BitcoinCash.org 域名和 ABC 开发组均支持 ABC 链,故交易所将大概率给 ABC 链保留 BCH 的交易对,给 BSV 链新增 BSV 的交易对(和之前诸多 BTC 分叉币一样的流程)【流程图,结果 4】。

这是最差的一种情况,BCH 社区将发生巨大的分裂,BCH 将受到巨大削弱,BSV 将继承 BCH 放弃的目标——挑战 BTC,成为真正的比特币。

3636bfd1-9975-54b5-b4de-27800baaad8a.jpg


不管最后的结果如何,本次算力战,都将展示算力的作用和威力,显著提高算力在整个生态中的地位,并为算力作为比特币分歧的最终裁决手段,做好铺垫。BTC,BCH,BSV 等诸多同算法分裂币种,最后可能都将被统一。


九、算力战期间用户建议


1、若你不打算在算力战期间买卖 BCH,那简单保管好你的私钥即可。

2、若你准备在算力战期间买卖 BCH,请仔细阅读本文关于算力战攻防的原理和流程说明,并忽略任何与本文相抵触的表述。算力战期间 ABC 和 BSV 的价格变化,请咨询上帝(我的一贯观点:币价长期问用户数,短期问上帝)。

3、CSW 一直在混淆「一个交易在两条链上都能打包」和「只存在一条链,没有分裂」这两件没有关系的事情(可能是为了 CSW 的支持者反对 BCH 分裂成两个币?)。算力战一开始,ABC 和 BSV 链只要有最轻微的一点不一致(例如 ABC 链打包了一个带 DSV 操作码的交易),那 ABC 和 BSV 链在物理上,就分叉成了两条链,不存在什么「只存在一条链」,CSW 最多只可能做到杀死 ABC 链,让两条链只有一条活下来。

在 ABC 和 BSV 链分裂后,由于 CSW 不在 BSV 链上加重放保护,故将发生之前 ETH 和 ETC 分叉时类似的情况(发送 ETH 时,一起把同地址的 ETC 发了出去)。你在发送 ABC 币时,由于你发 ABC 的这个交易在 BSV 链上也能打包,所以很可能将 BSV 币也一起发了出去。若你不懂得做分离,需将币发到 BCH 和 BSV 充值地址一样的交易所,以免丢币。

4、在算力战前将币充到(承诺给两种币的)交易所,好处是算力战期间还可以交易,并且如果分叉,交易所会帮你做好两种币分离。坏处是什么时候可以充提,得完全听交易所。如果算力战持续很长时间(尤其如果 CSW 长时间打游击战),交易所可能会很久都不开放充提。另外,任何交易所都有倒闭的风险。

5、把币留在链上自己控制私钥,坏处是算力战期间不能交易,好处是控制自己的币,可以在算力战后,选最先恢复充提的交易所交易。两种做法各有利弊,根据自己的情况和需要,自行选择。


九、我和莱比特矿池(BTC.TOP)的态度


我支持算力投票(算力战),认为 BCH 应该以获取用户为最高目的,快速演化,并通过算力投票(算力战)的方式,消除演化中的分歧,防止不必要的分叉。

莱比特矿池(BTC.TOP)的算力将支持愿意投入更多算力和资金的一方,并帮助这一方,尽快结束算力战混乱的局面,恢复 BCH 区块链的秩序。


十、总结


1、生存是最终的辩论方式,是决定对错的最高依据。算力能杀死一条链,所以算力能成为比特币的最高仲裁机制。

2、通过「51% 空块攻击」可以阻止一条链上打包确认任何交易,并且矿工无法挖到任何块后,也会逐渐停止挖矿,最后这条链就死了。

3、防御「51% 空块攻击」需要坚守原链,调动更多的算力,挖一条比攻击者更长的链,反过来把攻击链覆盖回去。

4、防御者有挖矿产出作为「防御抵扣优势」,攻击者的算力越大,则防御者的抵扣优势越小,攻击者需要的资金优势越小。反过来,攻击者的资金优势越大,则需要的算力越小。

5、比特大陆可调用 BTC 的算力用于 BCH 算力战,因此算力多于 CSW。CSW 必须有资金优势和更坚强的烧钱意志,才能胜利。

6、「算力游击战」不能达到算力战的最终目的:杀死一条链。「算力游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。

7、算力战后,若失败的一方认输,则算力战结束,存活链成为 BCH。若失败的一方不认输(CSW 继续打游击战,或者 ABC 改 POW+POS 算法),则 BCH 分裂为 BCH 和 BSV 两个币。

8、如果 CSW 坚持进行「算力游击战」,则需要 ABC 开发组打补丁、矿池、交易所配合,消除影响。
 
 
作者:江卓尔,莱比特矿池(BTC.TOP) CEO

BCH分叉在即,重放保护与分离BSV你必须要了解

攻略leek 发表了文章 • 2018-11-14 12:10 • 来自相关话题

2018年11月15日,BitcoinCash从版本0.17硬分叉升级到0.18时候,出现了另外一个与0.18不兼容的版本BitcoinSV,但是这个版本没有添加重放保护,号称要以算力战的方式用BitcoinSV替换BitcoinABC 0.18。算力战的问题这里暂且不谈,只说重放保护的问题以及如何分离BCH和BSV。


关于重放保护的相关问题


1. 什么是重放保护?

重放保护,就是让交易只在当前链中有效,并且在其它链中无效。通常在一条链分裂成两条链时,为了让两条链的交易互不影响,需要在生成交易信息的时候,加入不同的标识或者使用不同的交易结构,这样,另一条链的矿工就会验证该交易无效,从而不打包该交易。

2.添加重放保护的一方,有什么影响?

目前来看,添加重放保护的一方,是处于劣势的,因为该举动意味着放弃了另一方的所有生态。2017年8月1号BCH分叉时,主动添加重放保护,只能重新建立自己的相关应用,从0开始。

但是,添加重放保护,是能上交易所的基本条件。虽然不添加重放保护,交易所也可以把两种分离,但是交易所要花费很多精力和技术去做这些事。技术差的交易所,会因为账务混乱,无法支持。除非这种币有很大的用户群,否则交易所不愿意花费高成本去支持这种币。

3. BCH每年两次的硬分叉升级,为什么不添加重放保护?

BCH的硬分叉升级是为了升级(本来是升级,不知道谁取名字叫硬分叉),不是为了分叉,和ETH一样,全节点客户端都需要升级,否则就无法同步区块,但是轻钱包却不用升级。如果升级时添加重放保护,意味着之前所有的BCH轻钱包或者一些服务都不能使用,这些生态都需要同时升级,对生态的影响非常严重。(并不是所有的硬分叉升级,轻钱包都不需要修改的,区块链系统在升级的时候,尽量避免修改与构造交易相关的修改,否则就要作相关兼容,不然就需要很多生态一起升级,费时费力,用户体验也不好)。

4.BCH和BTC分叉时,是如何添加重放保护的?

2017年8月1号BCH分叉时,主动添加了重放保护,简单的说,就是在交易签名的数据中,添加了SIGHASH_FORKID=0x40这个数据(详情https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md)。 BSV如果要添加重放保护,只要把0x40改为其它值就可以了。

5. ETC和ETH分叉时,没有重放保护,造成了什么样的问题?

ETC的出生,是让人未意料到的,从ETC到ETH,是一次硬分叉升级,没有重放保护,但是仍有人坚持挖ETC原链,由于ETC的难度调整很快,所以ETC活了下来,并且有了价值(BCH 的0.15版,也活了下来,但是由于没有主流交易所支持,可以认为是没有价值的)。但是由于大家都没有做好准备,特别是交易所,被重放攻击了。重放攻击,对于有价值的币有意义,对于没有价值的币,是没有意义的,因为你攻击得到的币,是没有价值的。

6. 如何重放攻击?

大部分影响下,没有重放保护的两种币,在转帐的时候,发送其中的一种币,另一种币也会同时发送。重放攻击,就是利用这个漏洞,在接收币的时候,同时获取另外一种币。重放攻击一般对交易所进行攻击。
例如:

在ETC分叉的初期,没有重放保护,交易所以为ETC不会出现,也没有做分离处理,用户在提取ETH的时候,同时也收到了ETC,然后用户自已把ETH和ETC分离,向交易所充值ETH,再提出ETH,这样就多收到了ETC。


如何分离没有重放保护的BSV?


1. 分离两种币的一些基本准备工作

想要分离两种币,前提是两种币都有算力,并且都能出块。如果11.15以后BSV不出块,那么也不可能分离了。

为验证这两种币是否分离成功了,你需要两种币的区块链浏览器进行查询,但是现在还没有BSV区块链浏览器。

另一个验证的办法,就是同时准备BCH钱包和BSV钱包,并且把同一个私钥或者相同协议的助记词导入到这两个钱包中。目前,BSV没有轻钱包,唯一的全节点客户端只能在Linux系统运行,并且没有界面。

下图是BSV全节点客户端的操作截图:







2. 分离两种币的一些方法

两种区块链币分叉以后,如果没有专门的重放保护,大部分情况交易信息是完全一样的,如果想分离,就需要让一笔交易在一条链上打包,在另一条链上不打包。如果自己有矿池,那么就会有很多手段,例如,矿池自己构造交易,直接打包,不广播,那么,这些交易就不会在另一条链上存在。另外,构造一些特殊交易,例如利用BCH新的操作码构造交易,也可以让交易只在BCH链上打包,在BSV链不打包。但是这两种方法对用户的要求太高,因为普通用户没有矿池,又不是高手,自己不能构造交易。下面介绍两种方法,可以让普通用户都可以操作。

3. INPUT污染法

向你的BCH钱包转入一笔分离后的BCH当作污染源,然后把钱包中的所有币一分不留的全部转向另一个地址,转移成功后,会发现BSV钱包中的币并没有转走,两种币分离成功。

这个方法的分离原理,要从比特币的转账原理说起。






上图这笔交易由2个输入转账到一个输出。这两个输入必须同时存在,矿池才会验证通过,并打包进区块。如果输入1只存在BCH区块链中,那么BSV矿池就会拒绝收录这笔交易。操作的时要求用户一分不留的全部转走,就是为了让那笔当作污染源的输入能够包括在交易中,否则就会分离失败。

这个方法要求首先有一笔分离后的BCH,才能把其它的BCH和BSV分离开。这些币可以是矿池新挖出来的币,也可以是别人分离后转给你的币。我会在分离BCH后,给大家发送BCH,以便大家分离。

4. 区块不同步确认法

此方法用到两个特性:

BCH的零确认有个特点,就是未确认的交易,最多只能发送26次。

BCH和BSV挖矿出块不同步。


我们可以利用这两个特点分离BCH和BSV。

这个方法操作相对复杂一些,并需要试很多次,还要花费一些BCH或BSV,需要准备BCH钱包和BSV钱包,把同一个私钥导入到BCH钱包和BSV钱包。

我们仍然操作BCH(因为BCH的工具比较多,钱包多)。向BCH钱包转入大约0.01个BCH,不要太多,此时,BCH钱包和BSV钱包都会收到这0.01个币。

快速把这些币转账到原来的地址,连续操作26次以上(越快越好,最好在5分钟能操作完成,否则要试很多次),等钱包提示错误不能再操作为止。如果你的钱包不允许零确认26次,那就需要换个钱包。如果你会用程序生成交易,那最好不过了。

等未确认的交易达到26次以后,等待BCH网络和BSV网络出块。如果BCH网络先出块,那么再发一笔BCH交易,此时BCH网络会收录这笔交易,BSV网络因为超过26次零确认,会拒绝你的交易,分离成功。如果BSV网络先出块,那么用BSV钱包再发一笔交易,同样原理,也可以分离BCH和BSV。



作者:区块链展望与观察 查看全部
replay-050817-79b61b33eac00b6a.jpeg

2018年11月15日,BitcoinCash从版本0.17硬分叉升级到0.18时候,出现了另外一个与0.18不兼容的版本BitcoinSV,但是这个版本没有添加重放保护,号称要以算力战的方式用BitcoinSV替换BitcoinABC 0.18。算力战的问题这里暂且不谈,只说重放保护的问题以及如何分离BCH和BSV。


关于重放保护的相关问题


1. 什么是重放保护?

重放保护,就是让交易只在当前链中有效,并且在其它链中无效。通常在一条链分裂成两条链时,为了让两条链的交易互不影响,需要在生成交易信息的时候,加入不同的标识或者使用不同的交易结构,这样,另一条链的矿工就会验证该交易无效,从而不打包该交易。

2.添加重放保护的一方,有什么影响?

目前来看,添加重放保护的一方,是处于劣势的,因为该举动意味着放弃了另一方的所有生态。2017年8月1号BCH分叉时,主动添加重放保护,只能重新建立自己的相关应用,从0开始。

但是,添加重放保护,是能上交易所的基本条件。虽然不添加重放保护,交易所也可以把两种分离,但是交易所要花费很多精力和技术去做这些事。技术差的交易所,会因为账务混乱,无法支持。除非这种币有很大的用户群,否则交易所不愿意花费高成本去支持这种币。

3. BCH每年两次的硬分叉升级,为什么不添加重放保护?

BCH的硬分叉升级是为了升级(本来是升级,不知道谁取名字叫硬分叉),不是为了分叉,和ETH一样,全节点客户端都需要升级,否则就无法同步区块,但是轻钱包却不用升级。如果升级时添加重放保护,意味着之前所有的BCH轻钱包或者一些服务都不能使用,这些生态都需要同时升级,对生态的影响非常严重。(并不是所有的硬分叉升级,轻钱包都不需要修改的,区块链系统在升级的时候,尽量避免修改与构造交易相关的修改,否则就要作相关兼容,不然就需要很多生态一起升级,费时费力,用户体验也不好)。

4.BCH和BTC分叉时,是如何添加重放保护的?

2017年8月1号BCH分叉时,主动添加了重放保护,简单的说,就是在交易签名的数据中,添加了SIGHASH_FORKID=0x40这个数据(详情https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md)。 BSV如果要添加重放保护,只要把0x40改为其它值就可以了。

5. ETC和ETH分叉时,没有重放保护,造成了什么样的问题?

ETC的出生,是让人未意料到的,从ETC到ETH,是一次硬分叉升级,没有重放保护,但是仍有人坚持挖ETC原链,由于ETC的难度调整很快,所以ETC活了下来,并且有了价值(BCH 的0.15版,也活了下来,但是由于没有主流交易所支持,可以认为是没有价值的)。但是由于大家都没有做好准备,特别是交易所,被重放攻击了。重放攻击,对于有价值的币有意义,对于没有价值的币,是没有意义的,因为你攻击得到的币,是没有价值的。

6. 如何重放攻击?

大部分影响下,没有重放保护的两种币,在转帐的时候,发送其中的一种币,另一种币也会同时发送。重放攻击,就是利用这个漏洞,在接收币的时候,同时获取另外一种币。重放攻击一般对交易所进行攻击。
例如:

在ETC分叉的初期,没有重放保护,交易所以为ETC不会出现,也没有做分离处理,用户在提取ETH的时候,同时也收到了ETC,然后用户自已把ETH和ETC分离,向交易所充值ETH,再提出ETH,这样就多收到了ETC。


如何分离没有重放保护的BSV?


1. 分离两种币的一些基本准备工作

想要分离两种币,前提是两种币都有算力,并且都能出块。如果11.15以后BSV不出块,那么也不可能分离了。

为验证这两种币是否分离成功了,你需要两种币的区块链浏览器进行查询,但是现在还没有BSV区块链浏览器。

另一个验证的办法,就是同时准备BCH钱包和BSV钱包,并且把同一个私钥或者相同协议的助记词导入到这两个钱包中。目前,BSV没有轻钱包,唯一的全节点客户端只能在Linux系统运行,并且没有界面。

下图是BSV全节点客户端的操作截图:

36698e3922c474fd79953f6196cc28ed_G4ZTMKRUHE3A.jpg



2. 分离两种币的一些方法

两种区块链币分叉以后,如果没有专门的重放保护,大部分情况交易信息是完全一样的,如果想分离,就需要让一笔交易在一条链上打包,在另一条链上不打包。如果自己有矿池,那么就会有很多手段,例如,矿池自己构造交易,直接打包,不广播,那么,这些交易就不会在另一条链上存在。另外,构造一些特殊交易,例如利用BCH新的操作码构造交易,也可以让交易只在BCH链上打包,在BSV链不打包。但是这两种方法对用户的要求太高,因为普通用户没有矿池,又不是高手,自己不能构造交易。下面介绍两种方法,可以让普通用户都可以操作。

3. INPUT污染法

向你的BCH钱包转入一笔分离后的BCH当作污染源,然后把钱包中的所有币一分不留的全部转向另一个地址,转移成功后,会发现BSV钱包中的币并没有转走,两种币分离成功。

这个方法的分离原理,要从比特币的转账原理说起。

6ffbe071e83d5f9666db3c78690b0ea4_GEYDENBKGE2TA.jpg


上图这笔交易由2个输入转账到一个输出。这两个输入必须同时存在,矿池才会验证通过,并打包进区块。如果输入1只存在BCH区块链中,那么BSV矿池就会拒绝收录这笔交易。操作的时要求用户一分不留的全部转走,就是为了让那笔当作污染源的输入能够包括在交易中,否则就会分离失败。

这个方法要求首先有一笔分离后的BCH,才能把其它的BCH和BSV分离开。这些币可以是矿池新挖出来的币,也可以是别人分离后转给你的币。我会在分离BCH后,给大家发送BCH,以便大家分离。

4. 区块不同步确认法

此方法用到两个特性:


BCH的零确认有个特点,就是未确认的交易,最多只能发送26次。

BCH和BSV挖矿出块不同步。



我们可以利用这两个特点分离BCH和BSV。


这个方法操作相对复杂一些,并需要试很多次,还要花费一些BCH或BSV,需要准备BCH钱包和BSV钱包,把同一个私钥导入到BCH钱包和BSV钱包。

我们仍然操作BCH(因为BCH的工具比较多,钱包多)。向BCH钱包转入大约0.01个BCH,不要太多,此时,BCH钱包和BSV钱包都会收到这0.01个币。

快速把这些币转账到原来的地址,连续操作26次以上(越快越好,最好在5分钟能操作完成,否则要试很多次),等钱包提示错误不能再操作为止。如果你的钱包不允许零确认26次,那就需要换个钱包。如果你会用程序生成交易,那最好不过了。

等未确认的交易达到26次以后,等待BCH网络和BSV网络出块。如果BCH网络先出块,那么再发一笔BCH交易,此时BCH网络会收录这笔交易,BSV网络因为超过26次零确认,会拒绝你的交易,分离成功。如果BSV网络先出块,那么用BSV钱包再发一笔交易,同样原理,也可以分离BCH和BSV。




作者:区块链展望与观察

直击 BCH 硬分叉:采用「钱包分离法」彻底根除重放攻击风险

攻略chainnews 发表了文章 • 2018-11-20 13:24 • 来自相关话题

北京时间 10 月 16 日,自 02:16 块高度 556767 起,以比特大陆和蚂蚁矿池为首的 BCH ABC 阵营(代表人物吴忌寒)和以 CoinGeek 及 nChain 为首的 BCH SV 阵营 (代表人物 Craig Steve Wright,即澳本聪)正式宣告分家,分叉为 BCH ABC 和 BCH SV 两条独立的公链。

这场被业界广泛关注的 BCH 分叉算力之战,并没有出现一开始假想的 51% 算力攻击,双方在算力、出块速度上你追我赶,各自独立运行,暂时 ABC 链保持领先,SV 紧追其后。表面上看似波澜不惊,实则却暗流涌动。由于 BCH 分叉为 ABC 和 SV 后,两条新分叉后的支链,地址、私钥、签名规则、交易格式都相同,因此存在被重放攻击的风险。

何为重放攻击,简而言之是指,A 在 ABC 公链上向 B 发出了一个交易请求(把 ABC 转给 B ),B 可以在 SV 链上重放 A 发出的请求(索取与 ABC 等量的 SV),结果是,A 只向 B 发出了一次交易请求(转出 ABC ),B 却可以同时获得属于 A 的两份资产(ABC+SV),这样以来,B (攻击者)就非法侵占了 A 原本预期转账之外的额外资产,造成 A 在数字资产上的损失。

在此前区块链历史上的多次硬分叉,都存在因缺乏重放保护功能而出现的重放攻击事件,此次 BCH 硬分叉后,外网也已经报道出现了重放攻击个例。

据区块链安全公司 PeckShield 态势感知平台数据显示:11 月 16 日,即 BCH 硬分叉后的当天,BCH ABC 和 BCH SV 两条链上存在 341,068 笔重放交易;11 月 18 日,在受到不明巨量粉尘攻击的影响下,BCH ABC 和 BCH SV 两条链上的重放交易数高达 1,409,055 次,达到了百万级。图一为 BCH ABC 和 SV 链上硬分叉后,每小时被重放的交易次数。

然而,在如此巨量重放交易存在的情况下,ABC 和 SV 公链并没有出台全链层面的重放保护功能,来保障用户资产不受重放攻击的威胁。且各大交易所开始逐渐恢复 BCH 交易和存取币,而任何交易行为都存在潜在被重放攻击的可能。

当务之急,在重放保护功能出台前,交易所和一般用户该如何保障自身的数字资产不受侵害呢?





图一:BCH ABC 和 SV 链上硬分叉后每小时被重放的交易次数


PeckShield 安全人员经过周密分析并实测认为:可采用「钱包分离法」来解除风险,也就是用户应该将 ABC 和 SV 资产分离到不同钱包地址,具体操作有以下三种:

1、无掺加地址分离:在 ABC 和 SV 链上分别生成一个不同的地址,然后把原 BCH 地址中 ABC 和 SV 币分别转到这两个地址中。这两个交易确认成功后,新地址中的数字资产就不会再遭受重放攻击。据了解,有些 SV 节点在把 SV 的交易重放到 ABC 链上,所以我们建议先发起 ABC 链的交易,确认后再发起 SV 链交易。

2、掺加 Input 疫苗:在发起一个 ABC/SV 交易时,在 input 中加入一个只存在于 ABC/SV 链的小额 UTXO,使得这个交易在另一个链上是非法交易,无法重放。这个小额的 UTXO 可以由第三方服务商生成转发给用户,也可以自己产生。

3、掺加特殊 OP Code:ABC 链和 SV 链都有独有的 OP code,所以可以把它们加入交易中,达到 类似于第二种方法的效果。在 ABC 链的交易中可以加入 OP_CHECKDATASIG,SV 链可以加 OP_MUL。


PeckShield 认为只要彻底做到钱包分离,且分离过程不受干扰,就可以确保资产不再受重放攻击困扰。当然,为了强化各个处理方法的高效、牢靠,可以组合叠加使用。PeckShield 建议一般 BCH 持有者可以采用简单容易操作的第二种方法。对于交易所而言,因存在更大规模的交易量和复杂地址,可以叠加使用第一种+第二种或第一种+第三种方法来确保安全。PeckShield 也已和各大交易所建立联系,并尝试用各类有效方法,帮助用户解除存在的重放攻击风险。 查看全部
the-bitcoin-cash-community-debates-future-difficulty-adjustments-820x510.jpg

北京时间 10 月 16 日,自 02:16 块高度 556767 起,以比特大陆和蚂蚁矿池为首的 BCH ABC 阵营(代表人物吴忌寒)和以 CoinGeek 及 nChain 为首的 BCH SV 阵营 (代表人物 Craig Steve Wright,即澳本聪)正式宣告分家,分叉为 BCH ABC 和 BCH SV 两条独立的公链。

这场被业界广泛关注的 BCH 分叉算力之战,并没有出现一开始假想的 51% 算力攻击,双方在算力、出块速度上你追我赶,各自独立运行,暂时 ABC 链保持领先,SV 紧追其后。表面上看似波澜不惊,实则却暗流涌动。由于 BCH 分叉为 ABC 和 SV 后,两条新分叉后的支链,地址、私钥、签名规则、交易格式都相同,因此存在被重放攻击的风险。

何为重放攻击,简而言之是指,A 在 ABC 公链上向 B 发出了一个交易请求(把 ABC 转给 B ),B 可以在 SV 链上重放 A 发出的请求(索取与 ABC 等量的 SV),结果是,A 只向 B 发出了一次交易请求(转出 ABC ),B 却可以同时获得属于 A 的两份资产(ABC+SV),这样以来,B (攻击者)就非法侵占了 A 原本预期转账之外的额外资产,造成 A 在数字资产上的损失。

在此前区块链历史上的多次硬分叉,都存在因缺乏重放保护功能而出现的重放攻击事件,此次 BCH 硬分叉后,外网也已经报道出现了重放攻击个例。

据区块链安全公司 PeckShield 态势感知平台数据显示:11 月 16 日,即 BCH 硬分叉后的当天,BCH ABC 和 BCH SV 两条链上存在 341,068 笔重放交易;11 月 18 日,在受到不明巨量粉尘攻击的影响下,BCH ABC 和 BCH SV 两条链上的重放交易数高达 1,409,055 次,达到了百万级。图一为 BCH ABC 和 SV 链上硬分叉后,每小时被重放的交易次数。

然而,在如此巨量重放交易存在的情况下,ABC 和 SV 公链并没有出台全链层面的重放保护功能,来保障用户资产不受重放攻击的威胁。且各大交易所开始逐渐恢复 BCH 交易和存取币,而任何交易行为都存在潜在被重放攻击的可能。

当务之急,在重放保护功能出台前,交易所和一般用户该如何保障自身的数字资产不受侵害呢?

5d80cb2a-2325-5223-81b7-1681f43ead6b.jpeg

图一:BCH ABC 和 SV 链上硬分叉后每小时被重放的交易次数


PeckShield 安全人员经过周密分析并实测认为:可采用「钱包分离法」来解除风险,也就是用户应该将 ABC 和 SV 资产分离到不同钱包地址,具体操作有以下三种:


1、无掺加地址分离:在 ABC 和 SV 链上分别生成一个不同的地址,然后把原 BCH 地址中 ABC 和 SV 币分别转到这两个地址中。这两个交易确认成功后,新地址中的数字资产就不会再遭受重放攻击。据了解,有些 SV 节点在把 SV 的交易重放到 ABC 链上,所以我们建议先发起 ABC 链的交易,确认后再发起 SV 链交易。

2、掺加 Input 疫苗:在发起一个 ABC/SV 交易时,在 input 中加入一个只存在于 ABC/SV 链的小额 UTXO,使得这个交易在另一个链上是非法交易,无法重放。这个小额的 UTXO 可以由第三方服务商生成转发给用户,也可以自己产生。

3、掺加特殊 OP Code:ABC 链和 SV 链都有独有的 OP code,所以可以把它们加入交易中,达到 类似于第二种方法的效果。在 ABC 链的交易中可以加入 OP_CHECKDATASIG,SV 链可以加 OP_MUL。



PeckShield 认为只要彻底做到钱包分离,且分离过程不受干扰,就可以确保资产不再受重放攻击困扰。当然,为了强化各个处理方法的高效、牢靠,可以组合叠加使用。PeckShield 建议一般 BCH 持有者可以采用简单容易操作的第二种方法。对于交易所而言,因存在更大规模的交易量和复杂地址,可以叠加使用第一种+第二种或第一种+第三种方法来确保安全。PeckShield 也已和各大交易所建立联系,并尝试用各类有效方法,帮助用户解除存在的重放攻击风险。

重放攻击原理和防范措施——如何安全分离BCH的分裂币

攻略shandian 发表了文章 • 2018-11-18 19:20 • 来自相关话题

第0章 引言


即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。


第1章 重放攻击原理


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

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

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

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

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

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

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

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


第2章 领取分裂币


BCH分裂前用户需要注意的最重要的知识点有两个,第一个是掌握私钥。第二个是做好重防保护。

不过我们还是要面对现实,比特币确实很难用,对很多用户来说,可能真的搞不清楚私钥是个啥玩意。第一推荐真的自己去搞清楚来,如果实在是搞不清楚,那就存放在讲信用的交易所吧。

分裂后,用户如何领取分裂币呢?

领取分裂币的过程其实非常简单,只要用户将私钥导入到分裂币钱包,就完成了领取。

分裂后,第一步需要做的就是确认你有多少分裂币。这个一般使用区块链浏览器就可以查询的到。一般一个区块链币诞生后,一定会有一个区块链浏览器的,你只需要将你分裂前的收币地址复制到区块链浏览器去查看一下,就可以知道自己有多少分裂币了。

现在Bitcoin abc是有区块浏览器的

https://bch.btc.com


Bitcoin sv暂时还没有找到可用的区块浏览器。

第二步是安装分裂后的钱包。分裂后,去下载最新的钱包。一般来说下载一个开发者做的完整节点钱包是最为安全的。但因为要下载整个区块链,所以也是最麻烦的。只要你知道如何导出和导入私钥,使用SPV轻钱包也是一样的,安全性上也是足够的。

bitcoin abc在这里下载钱包:

https://download.bitcoinabc.org/0.18.4/


bitcoin sv在这里下载钱包,目前没有windows版本的

https://github.com/bitcoin-sv/bitcoin-sv/releases


鉴于目前生态比较混乱,不建议使用轻钱包。   

第三步就是导入私钥进钱包。

如果用户使用的是完整节点做钱包,比特币都保护在wallet.dat文件里。当分裂后,用户只需要重新下载分裂币的完整节点钱包,并且将wallet.dat文件导入进去就可以完成分裂币的领取了。

如果用户使用的是轻钱包,则需要你想办法将原来的私钥明文导出,并导入到分裂币的轻钱包中。但鉴于目前生态比较混乱,不建议使用轻钱包。   

请注意,上述领取分裂币的过程根本就没有发生任何的发币过程。


第3章 用户主动设计防重放保护


1.在分裂前,请将自己的币存在自己控制私钥的地址上。

2.为了保险起见,建议一定要存一个只有小余额(比如0.01BCH)的地址,这个地址里的币就是用来测试用的。

3.分裂后,下载新的分裂后的两个BCH钱包,将私钥导入到BCH钱包。

4.分裂后,等一天,到矿池(如果交易所提供提现,就从交易所买)买0.011BCH-abc,和0.012BCH-sv,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

这一步需要强调一下,为什么要等一天?因为比特币的区块奖励成熟度是100个区块,即比特币挖矿的Coinbase奖励在100个区块后才能花。这里说的从交易所里买币,最根本有效的应该是从矿池买分裂后100个区块的发出来的coinbase币。因为分裂后的coinbase币绝对是只可能在一条链上有效,在另一条链上是无效的。但为什么我们觉得从交易所买币也可能有用呢?是因为绝大多数交易所都会做好币的防重放保护,否则他们不敢打开提现功能。

5.然后你将你的钱包同步区块,你就会发现,在BCH-abc钱包只能收到0.011BCH,而BCH-sv钱包只能收到0.012BCH。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,就不可能被重放了。

6.将你污染的币,全部(注意一定是全部)发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BCH的那个钱包来完成测试。然后再将你的大额钱包做分离。

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK。 查看全部
Bitcoin-Gold-Fork-How-to-double-Bitcoin.jpg


第0章 引言


即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。


第1章 重放攻击原理


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

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

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

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

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

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

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

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


第2章 领取分裂币


BCH分裂前用户需要注意的最重要的知识点有两个,第一个是掌握私钥。第二个是做好重防保护。

不过我们还是要面对现实,比特币确实很难用,对很多用户来说,可能真的搞不清楚私钥是个啥玩意。第一推荐真的自己去搞清楚来,如果实在是搞不清楚,那就存放在讲信用的交易所吧。

分裂后,用户如何领取分裂币呢?

领取分裂币的过程其实非常简单,只要用户将私钥导入到分裂币钱包,就完成了领取。

分裂后,第一步需要做的就是确认你有多少分裂币。这个一般使用区块链浏览器就可以查询的到。一般一个区块链币诞生后,一定会有一个区块链浏览器的,你只需要将你分裂前的收币地址复制到区块链浏览器去查看一下,就可以知道自己有多少分裂币了。

现在Bitcoin abc是有区块浏览器的


https://bch.btc.com



Bitcoin sv暂时还没有找到可用的区块浏览器。

第二步是安装分裂后的钱包。分裂后,去下载最新的钱包。一般来说下载一个开发者做的完整节点钱包是最为安全的。但因为要下载整个区块链,所以也是最麻烦的。只要你知道如何导出和导入私钥,使用SPV轻钱包也是一样的,安全性上也是足够的。

bitcoin abc在这里下载钱包:


https://download.bitcoinabc.org/0.18.4/



bitcoin sv在这里下载钱包,目前没有windows版本的


https://github.com/bitcoin-sv/bitcoin-sv/releases



鉴于目前生态比较混乱,不建议使用轻钱包。   

第三步就是导入私钥进钱包。

如果用户使用的是完整节点做钱包,比特币都保护在wallet.dat文件里。当分裂后,用户只需要重新下载分裂币的完整节点钱包,并且将wallet.dat文件导入进去就可以完成分裂币的领取了。

如果用户使用的是轻钱包,则需要你想办法将原来的私钥明文导出,并导入到分裂币的轻钱包中。但鉴于目前生态比较混乱,不建议使用轻钱包。   

请注意,上述领取分裂币的过程根本就没有发生任何的发币过程。


第3章 用户主动设计防重放保护


1.在分裂前,请将自己的币存在自己控制私钥的地址上。

2.为了保险起见,建议一定要存一个只有小余额(比如0.01BCH)的地址,这个地址里的币就是用来测试用的。

3.分裂后,下载新的分裂后的两个BCH钱包,将私钥导入到BCH钱包。

4.分裂后,等一天,到矿池(如果交易所提供提现,就从交易所买)买0.011BCH-abc,和0.012BCH-sv,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

这一步需要强调一下,为什么要等一天?因为比特币的区块奖励成熟度是100个区块,即比特币挖矿的Coinbase奖励在100个区块后才能花。这里说的从交易所里买币,最根本有效的应该是从矿池买分裂后100个区块的发出来的coinbase币。因为分裂后的coinbase币绝对是只可能在一条链上有效,在另一条链上是无效的。但为什么我们觉得从交易所买币也可能有用呢?是因为绝大多数交易所都会做好币的防重放保护,否则他们不敢打开提现功能。

5.然后你将你的钱包同步区块,你就会发现,在BCH-abc钱包只能收到0.011BCH,而BCH-sv钱包只能收到0.012BCH。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,就不可能被重放了。

6.将你污染的币,全部(注意一定是全部)发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BCH的那个钱包来完成测试。然后再将你的大额钱包做分离。

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK。

听说1W个BCH不安全?好像是媒体过度解读了

攻略45qu 发表了文章 • 2018-11-18 17:44 • 来自相关话题

争吵、分歧、意见不合,

各种偏见交织在人生中的每一丝纤维之中。

————伍尔夫《到灯塔去》



BCH硬分叉引发的种种质疑和争议,不亚于币圈核爆炸。

11月16日凌晨,虽然BCH在第556767个区块高度完成硬分叉,分成了BCH ABC和BCH SV两条链,但这场世纪之战并没有因此落下帷幕,反而愈演愈烈。

今日,有媒体将矛头指向BCH存在重大安全威胁,这对于熊市本就如履薄冰的“观战者”们无异于又一颗深水炸弹。

根据PeckShield态势感知平台数据显示,BCH硬分叉后的当天,共有341068笔重放交易同时存在于ABC和SV两条链上,涉及10080个BCH。

更有国外用户爆料称,在交易过程中遭到了小额重放攻击损失。

BCH开发团队第一时间接受45区(ID:block-45)采访时否认这样的指控,称设计了input污染法和构造特有操作码交易两种方法来防止重放攻击,钱包和交易所安全交易可以选择input污染法。

这无疑是一场被专业名词占领的争论,令“观战者”更加如堕云雾。


被质疑的重放攻击是什么?

澄清中提到的input污染法又是什么?

BCH究竟安全吗?


1 质疑


重放攻击是黑客常用的一种攻击方式,在计算机世界,是指攻击者重复发送一个目的主机已经接受过的信息来达到欺骗目的。

我们可以这样生动理解。

想象一下,某个商店发放了限量的二维码优惠券,只要出示优惠券扫码,即能享受优惠。但这个商店却没有辨别某张券是否被扫过的能力,这时,是不是有人就会利用这个漏洞,重复使用同一张券?

现在,“这家商店”来到了区块链世界。

以BCH为例,即便分叉成两条链,但ABC链和SV链仍然共享着分叉时点以前的相同区块数据,这也是为什么分叉后,用户会凭空拥有了另一条链上的资产。

但同样的原因也会导致资产的凭空流失。质疑者们认为,如果在ABC链上发生了分叉前的老资产的转移,那么,这条交易信息有可能会被攻击者放到SV链上广播。

而分叉后的两条链又是完全独立的,因此SV链并不认为这笔交易已经被记录过,相反会认为完全合法,交易同样会被SV链的矿工打包到区块中,造成SV链上的资产损失。

如果客户端升级时加入了重放攻击保护,就可以避免这类情况发生,但此次BCH客户端升级,双方都没有加入重放攻击保护,这也正是安全漏洞之说的由来。


2 回应


面对这种质疑,今天,BCH社区开发团队对45区(ID:block-45)表示:“交易所和钱包并没有开放充提,所以交易的人是知道的,应该没有问题。大量的交易是因为分叉当晚CSW制造了粉尘交易。”

开发团队还表示:“可以肯定的是,并没有发生大量的重放现象,是极少见的,全世界都知道BCH在算力战,能够有这种行为的用户都可以确定币是安全的。”

而对于这次BCH硬分叉面临的重放攻击,该团队称仍然有防范措施,可以通过input污染法和构造特有操作码交易两种方法来防范。对于钱包和交易所来说,可以选择Input污染法。

一位圈内技术人士对45区(ID:block-45)解读,input污染法中的“input”指的是交易输入。一个BCH的交易结构中,有交易输入和交易输出。

“交易输入就是资金的来源,它引用的是之前已有交易的输出,而交易输出指的是资金的去向,即资金转给了谁。”他这样解释。

“如果矿工在验证交易时,发现交易输入所引用的交易是非法时,那么这条交易自然也会因资金“来路不正”而被认为是非法的。”

据45区(ID:block-45)了解,input污染法正是利用了这一点。

BCH分叉后,ABC和SV两条链新产生的区块数据独立,因此,ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在SV链上是非法的。

BCH社区开发团队表示,input污染法可以将本链上的coinbase交易划分出大量的小额交易输出,用户通过交易所或者钱包提取ABC链上的资产时,可以构造一笔交易,将新产生的小额输出也作为这笔交易输入,构造在其中。

如此一来,这条交易信息即便在SV链上重新广播时,矿工会因为存在的这笔非法小额输入而认为整笔交易非法,相当于这笔交易被污染了,“污染源”就是这些小额输入。

这样,也就完成了链上资产的永远分离,避免了资产损失。

在回应者眼中,此次安全质疑完全是媒体过度解读的结果。

BCH当下成为万众瞩目的聚焦中心,这场战役造成的波波“余震”恐怕还会继续。 查看全部
bch.jpg


争吵、分歧、意见不合,

各种偏见交织在人生中的每一丝纤维之中。

————伍尔夫《到灯塔去》




BCH硬分叉引发的种种质疑和争议,不亚于币圈核爆炸。

11月16日凌晨,虽然BCH在第556767个区块高度完成硬分叉,分成了BCH ABC和BCH SV两条链,但这场世纪之战并没有因此落下帷幕,反而愈演愈烈。

今日,有媒体将矛头指向BCH存在重大安全威胁,这对于熊市本就如履薄冰的“观战者”们无异于又一颗深水炸弹。

根据PeckShield态势感知平台数据显示,BCH硬分叉后的当天,共有341068笔重放交易同时存在于ABC和SV两条链上,涉及10080个BCH。

更有国外用户爆料称,在交易过程中遭到了小额重放攻击损失。

BCH开发团队第一时间接受45区(ID:block-45)采访时否认这样的指控,称设计了input污染法和构造特有操作码交易两种方法来防止重放攻击,钱包和交易所安全交易可以选择input污染法。

这无疑是一场被专业名词占领的争论,令“观战者”更加如堕云雾。


被质疑的重放攻击是什么?

澄清中提到的input污染法又是什么?

BCH究竟安全吗?



1 质疑


重放攻击是黑客常用的一种攻击方式,在计算机世界,是指攻击者重复发送一个目的主机已经接受过的信息来达到欺骗目的。

我们可以这样生动理解。

想象一下,某个商店发放了限量的二维码优惠券,只要出示优惠券扫码,即能享受优惠。但这个商店却没有辨别某张券是否被扫过的能力,这时,是不是有人就会利用这个漏洞,重复使用同一张券?

现在,“这家商店”来到了区块链世界。

以BCH为例,即便分叉成两条链,但ABC链和SV链仍然共享着分叉时点以前的相同区块数据,这也是为什么分叉后,用户会凭空拥有了另一条链上的资产。

但同样的原因也会导致资产的凭空流失。质疑者们认为,如果在ABC链上发生了分叉前的老资产的转移,那么,这条交易信息有可能会被攻击者放到SV链上广播。

而分叉后的两条链又是完全独立的,因此SV链并不认为这笔交易已经被记录过,相反会认为完全合法,交易同样会被SV链的矿工打包到区块中,造成SV链上的资产损失。

如果客户端升级时加入了重放攻击保护,就可以避免这类情况发生,但此次BCH客户端升级,双方都没有加入重放攻击保护,这也正是安全漏洞之说的由来。


2 回应


面对这种质疑,今天,BCH社区开发团队对45区(ID:block-45)表示:“交易所和钱包并没有开放充提,所以交易的人是知道的,应该没有问题。大量的交易是因为分叉当晚CSW制造了粉尘交易。”

开发团队还表示:“可以肯定的是,并没有发生大量的重放现象,是极少见的,全世界都知道BCH在算力战,能够有这种行为的用户都可以确定币是安全的。”

而对于这次BCH硬分叉面临的重放攻击,该团队称仍然有防范措施,可以通过input污染法和构造特有操作码交易两种方法来防范。对于钱包和交易所来说,可以选择Input污染法。

一位圈内技术人士对45区(ID:block-45)解读,input污染法中的“input”指的是交易输入。一个BCH的交易结构中,有交易输入和交易输出。

“交易输入就是资金的来源,它引用的是之前已有交易的输出,而交易输出指的是资金的去向,即资金转给了谁。”他这样解释。

“如果矿工在验证交易时,发现交易输入所引用的交易是非法时,那么这条交易自然也会因资金“来路不正”而被认为是非法的。”

据45区(ID:block-45)了解,input污染法正是利用了这一点。

BCH分叉后,ABC和SV两条链新产生的区块数据独立,因此,ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在SV链上是非法的。

BCH社区开发团队表示,input污染法可以将本链上的coinbase交易划分出大量的小额交易输出,用户通过交易所或者钱包提取ABC链上的资产时,可以构造一笔交易,将新产生的小额输出也作为这笔交易输入,构造在其中。

如此一来,这条交易信息即便在SV链上重新广播时,矿工会因为存在的这笔非法小额输入而认为整笔交易非法,相当于这笔交易被污染了,“污染源”就是这些小额输入。

这样,也就完成了链上资产的永远分离,避免了资产损失。

在回应者眼中,此次安全质疑完全是媒体过度解读的结果。

BCH当下成为万众瞩目的聚焦中心,这场战役造成的波波“余震”恐怕还会继续。

BCH 分叉后的钱包解决方案

攻略slowmist 发表了文章 • 2018-11-18 10:10 • 来自相关话题

昨天凌晨 BCH 分叉为两条链:BCH 和 BCHSV,我们持续做着相关风险监测,也注意到相关交易所/钱包暂停了充提。由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放攻击,造成相关对象的财产损失(依实际攻击场景而定)。

在无重放保护的情况下,分离这两种链上资产的方法,目前社区的解决方法主要有如下两个:


1. input 污染法


原理是引入了一笔非法交易的输出作为输入,那么这笔非法交易的输入将会使得这笔交易也会变为非法。

例如:

一笔交易广播到了 BCHSV 链中,引用了非法交易(在 BCH 合法,在 BCHSV 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCHSV 链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了 BCH 链中,引用了非法交易(在 BCHSV 合法,在 BCH 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCH 链承认,那么这笔交易就被重放免疫了。


2. 构造特有操作码交易


两条链的共识是有差别的,如果出构造一个本链合法,对方链上不合法的交易也可以进行分离,本次分叉双方的共识差别也体现在操作码上,可以在 BCH 链中,构造含有 OP_CHECKDATASIG 的输出,那么该笔交易在 BCH 上是合法的,但在 BCHSV 上是不合法的;同理在 BCHSV 链中,构造含有 OP_MUL 的输出,那么该笔交易在 BCHSV 上是合法的,但在 BCH 上是不合法的。

结合社区的方式及交易所相关工程实践经验,我们推荐使用第 1 种 input 污染法,但这需要有分叉后的 BCH 或 BCHSV 的 coinbase 交易(创币交易) UTXO 作为污染源,从这个 coinbase 交易中可以划分大量的小额 output,在用户提现时,可以将这些小额的 output 作为新交易的 input 之一来构建提现交易,从而较方便地完成分离。

另外,从工程实践上,我们也建议充提币的确认数可以适当提高,虽然目前来看两条分叉链未发生明显的攻击情况。

对于普通用户来说,等着先,不着急。


相关资料:

可行的钱包重放免疫实现方法:

https://bch.club/index.php?app=team&mod=Forum&act=detail&topic_id=685&team_id=1


哥白尼团队提供的开源工具,有效分离 BCH 和 BCHSV 两条链:

https://github.com/copernet/tools/tree/master/hardfork 查看全部
bch.jpg

昨天凌晨 BCH 分叉为两条链:BCH 和 BCHSV,我们持续做着相关风险监测,也注意到相关交易所/钱包暂停了充提。由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放攻击,造成相关对象的财产损失(依实际攻击场景而定)。

在无重放保护的情况下,分离这两种链上资产的方法,目前社区的解决方法主要有如下两个:


1. input 污染法


原理是引入了一笔非法交易的输出作为输入,那么这笔非法交易的输入将会使得这笔交易也会变为非法。

例如:

一笔交易广播到了 BCHSV 链中,引用了非法交易(在 BCH 合法,在 BCHSV 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCHSV 链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了 BCH 链中,引用了非法交易(在 BCHSV 合法,在 BCH 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCH 链承认,那么这笔交易就被重放免疫了。


2. 构造特有操作码交易


两条链的共识是有差别的,如果出构造一个本链合法,对方链上不合法的交易也可以进行分离,本次分叉双方的共识差别也体现在操作码上,可以在 BCH 链中,构造含有 OP_CHECKDATASIG 的输出,那么该笔交易在 BCH 上是合法的,但在 BCHSV 上是不合法的;同理在 BCHSV 链中,构造含有 OP_MUL 的输出,那么该笔交易在 BCHSV 上是合法的,但在 BCH 上是不合法的。

结合社区的方式及交易所相关工程实践经验,我们推荐使用第 1 种 input 污染法,但这需要有分叉后的 BCH 或 BCHSV 的 coinbase 交易(创币交易) UTXO 作为污染源,从这个 coinbase 交易中可以划分大量的小额 output,在用户提现时,可以将这些小额的 output 作为新交易的 input 之一来构建提现交易,从而较方便地完成分离。

另外,从工程实践上,我们也建议充提币的确认数可以适当提高,虽然目前来看两条分叉链未发生明显的攻击情况。

对于普通用户来说,等着先,不着急。


相关资料:

可行的钱包重放免疫实现方法:

https://bch.club/index.php?app=team&mod=Forum&act=detail&topic_id=685&team_id=1


哥白尼团队提供的开源工具,有效分离 BCH 和 BCHSV 两条链:

https://github.com/copernet/tools/tree/master/hardfork

BCH硬分叉背后:“重放攻击”下的用户自救指南

攻略secbit 发表了文章 • 2018-11-16 23:20 • 来自相关话题

11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。

在此次此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。


何谓“重放攻击”


传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程。

而在区块链领域,重放攻击(Replay Attacks)通常出现在区块链硬分叉的时候,指的是“一条链上的交易在另一条链上也往往是合法的”。

有一个例子可以简单的说明什么是区块链中的“重放攻击”: 

小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他。 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒。 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒, 这对于啤酒厂来说就是被重放攻击了,损失了无数啤酒。


就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,另外一条分叉出来的链又产生了BSV这一资产,也就是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都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。

 
应对:先分离 再交易


既然BCH在没有重放保护的前提下已经发生分叉,被重放无法避免,那么,为了避免受损失,交易所和用户都有必要在进行新的交易之前,对所持有的BCH ABC/BCH SV进行分离。

让我们回看一下BCH升级后的两个版本:bitcoin abc 0.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进行交易操作,应先进行分离再操作账户更为稳妥。

分离最简单有效的办法,就是在分裂点后100个区块,从矿池购买一丁点coinbase交易的UTXO,发到你的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。

分离两种资产后,新OPCode你就可以使用了,不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。

在此安比(SECBIT)实验室提醒广大BCH持有者和支持ABC/BSV的交易所,在分离你/你的用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode。 查看全部
Bitcoin-Replay-Attack.jpg

11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。

在此次此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。


何谓“重放攻击”


传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程。

而在区块链领域,重放攻击(Replay Attacks)通常出现在区块链硬分叉的时候,指的是“一条链上的交易在另一条链上也往往是合法的”。

有一个例子可以简单的说明什么是区块链中的“重放攻击”: 


小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他。 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒。 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒, 这对于啤酒厂来说就是被重放攻击了,损失了无数啤酒。



就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,另外一条分叉出来的链又产生了BSV这一资产,也就是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都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。

 
应对:先分离 再交易


既然BCH在没有重放保护的前提下已经发生分叉,被重放无法避免,那么,为了避免受损失,交易所和用户都有必要在进行新的交易之前,对所持有的BCH ABC/BCH SV进行分离。

让我们回看一下BCH升级后的两个版本:bitcoin abc 0.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进行交易操作,应先进行分离再操作账户更为稳妥。

分离最简单有效的办法,就是在分裂点后100个区块,从矿池购买一丁点coinbase交易的UTXO,发到你的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。

分离两种资产后,新OPCode你就可以使用了,不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。

在此安比(SECBIT)实验室提醒广大BCH持有者和支持ABC/BSV的交易所,在分离你/你的用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode。

江卓尔:一文说透算力战本质及 BCH 算力大战可能结果

攻略chainnews 发表了文章 • 2018-11-15 12:06 • 来自相关话题

一、为什么算力能成为比特币的最高仲裁机制?


答案很简单:因为算力能杀死一条链。

这是一条最底层的规则:生存是最终的辩论方式,是决定对错的最高依据。这条规则有很多种表述方法,例如「胜王败寇」, 「真理只在大炮的射程之内」,「暴力是决定所有规则的元规则」。

为什么无神论(科学论)是对的?是因为无神论能辩过有神论吗?当然不是,无神论和有神论两边的逻辑基础都不一致,辩起来就是鸡同鸭讲。无神论是对的,不是因为无神论更「有理」,而是因为无神论能造出枪。

我能造出枪消灭你,你都不存在了,你还有什么资格讨论对错吗?

所以,生存是最终的辩论方式,是决定对错的最高依据。为什么我支持「演化论」而不是「稳定论」?因为「演化论」以适应市场需求,增加用户数为唯一目的,而「稳定论」不以此为最高目的。

当然,「稳定论」会认为,我的链协议稳定,所以用户会选择我,但如果不是呢?如果两者矛盾呢?
如果根据市场需要,增加像 DSV 这样的功能,就是能比稳定时,吸引更多用户,首先达到 50 亿的最终目标呢?那么谁是对的,谁是错的?

所以,「演化论」是逻辑自洽的。极端锁死和过度修改都错,「演化论」更有可能在「稳定」和「修改」中找到最佳的位置,并获取最多的用户。

而「稳定论」包含了一个假设:稳定是最好的增加用户的方式。这个假设从商业上来看几乎不可能成立:商业上没有躺赢,中本聪并没有给我们设计一条成为世界货币的躺赢之路。

有人可能会认为:「产品才需要吸引更多用户,而货币不能这样设计」,「BCH 应该好好在货币上发展,而不应该搞各种新功能和第二层网络」。这不对,货币也是产品的一种,美元一样要面临欧元、人民币、日元的竞争,为什么美国政府要搞「石油美元」 (国际石油贸易以美元结算)?还不是为了增加美元的「应用」和「用户数」。

而在加密数字货币领域,这种产品竞争就更剧烈了:任何一种币,都必须面临大量币(产品)的竞争。


二、如何通过算力杀死一条链?


回到算力战上,算力战对大部分人来说,是从未用过的屠龙之技,所以各种文章和推测的错误很多。 莱比特矿池(BTC.TOP)是全网唯一一个有过大规模算力战经验的矿池,任何与本文不符的表述(包括 CSW 的表述)均为错误。

大家都知道「51% 算力攻击」:

1、攻击者通过优势算力,挖掘一条比原链更长的攻击链。
2、攻击链向全网广播后,节点按规则,将接受更长的链,丢弃原链。

下图中的直线链(上面的蓝色链和下面的红色链),表示被中立节点接受的主链。






PS:这里的「更长的链」准确地说是「累计难度更大的链」,例如节点会接受 2 个难度 10 的块,而抛弃掉 3 个难度 5 的块,因为 10+10=20>15=5+5+5。为了叙述方便,后文均假设每个块的难度相同 。

通过 51% 攻击,可以完成各种目的,例如:

1、在 Tx1 (交易 1)确认后,撤销掉 Tx1,让另一个冲突的 Tx2 (交易 2)生效。

例如 Alice 用 Tx1 发了 1 个 BTC 给 Bob,向 Bob 交换 100 个 LTC,在收到 Bob 的 100 个 LTC 后,再用一个发这 1BTC 给自己的 Tx2,替换掉 Tx1,把付给 Bob 的 1BTC 拿回来。

2、用自己挖的块(红色的块),孤立掉其它矿工挖的块(蓝色的块),让其它矿工损失挖矿产出。

在 51% 算力攻击的基础上,可以进行「51% 空块攻击」:攻击者只挖空块(不包括任何交易的块),并不接受(孤立掉)任何其它矿工挖的,正常打包交易的块,让这条链瘫痪掉,任何人都无法正常交易。

并且,由于矿工在这条链上挖到的块都被孤立掉,没有挖矿收入,因此也会逐渐停止挖矿,最后这条链就死了。







三、如何防御「51% 空块攻击」?


防御者需要不承认攻击链,在原来被覆盖的原链之后,调动更多的算力,挖一条比攻击者更长的链。






在实际的攻防中,双方将会不断延长自己的链,并有可能来回重组覆盖。也就是说,一个只按默认规则,接受最长链的中立节点,可能在攻击链较长时,接受攻击链,然后在防御链较长时,放弃攻击链,接受防御链。


四、攻防双方成本分析


胜利的一方,只要比失败的一方多挖一个块就可以。

1、如果防御者放弃了,那攻击者也不用再继续花成本挖块,只要简单停止挖矿即可,这条链就死了。之后攻击者如果发现防御者又开始挖块,那攻击者也只要继续比防御者多挖一个块就可以。

由于这条链已经死了,所以攻防双方挖的所有块就都作废了,双方都将损失所有挖矿成本。

2、如果攻击者放弃了,那情况有些不同,攻击者还是将损失所有挖出的块(和成本),但由于链还存活,所以防御者可以获得之前所挖的块,作为收入。






也就是说,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。


五、攻防双方算力分析


11 月 15 日,BCH 的 ABC 客户端,将硬分叉升级至 0.18.2 版,比特大陆支持 ABC 的此次升级。

而 CSW 所支持的 BSV 客户端,将同时分叉出链 BSV 链,并声称将对 ABC 0.18.2 链(升级链)进行算力战攻击,杀死 ABC 升级链。

5.1、CSW 方的算力:

支持 CSW 的矿池(Coingeek,svpool,BMG 等)目前展示出来的算力为 2000-3000P 左右,CSW 声称还有隐藏算力,因此可认为 CSW 至少有 3000P 自有算力。

CSW 还可以通过租赁方式,控制更多算力,例如和矿池、大矿场谈算力租赁,或者从 nicehash 等算力平台上租赁算力,只要愿意给出溢价(例如+20% 挖矿收益),CSW 自有+租赁算力到 1 万 P,难度不大。

5.2、比特大陆方的算力:

比特大陆旗下的矿池(BTC.com 和 Antpool)合计拥有约 15000P 的算力,再加上比特大陆参股的 ViaBTC 矿池,共计拥有约 20000P 的算力。

由于 BTC 和 BCH 均使用 sha256 算法挖矿,所以矿池在技术上,可以在 BTC 和 BCH 上来回秒切算力。只要正常给矿工按算力付挖矿产出的 BTC,矿工实际上并不关心实际挖的是什么币。矿工甚至不知道自己挖的是什么币,只是解答矿池下发的计算任务。因此比特大陆如果愿意,可以使用所有 20000 万 P 的 BTC 算力,来 BCH 上做防御,之前出现各种传闻,例如比特大陆在新疆部署 9 万台矿机用于算力战等,均为无意义的谣言。比特大陆使用 BTC 算力进行算力战,符合「生存是最终的辩论方式」的算力战原则。

由于比特大陆正处于上市中的关键阶段,CSW 威胁称,若比特大陆使用 BTC 算力来进行算力战,他将通过诉讼方式攻击比特大陆。但这一做法意义不大,因为比特大陆基本上不需要使用全部 20000P 算力应战,若使用部分算力,比特大陆可声明使用自有算力(或合作伙伴算力),其余(正常获得支付 BTC)的矿工既没有动机起诉,也难以确认自己挖的是什么币。

5.3、双方的资金:

虽然比特大陆方算力基本可以肯定比 CSW 多,但算力战的胜负,不仅仅取决于算力。若 CSW 如之前所声称,全力开战,那每天将烧掉几千万,甚至上亿的成本,那算力战的瓶颈,将不是算力,而是双方愿意烧掉的资金。

在资金方面,CSW 声称自己是亿万富翁,有豪宅名车,并得到 Calvin Ayre (博彩业大佬)的鼎力支持。比特大陆则是估值 150 亿美元,正在上市中的庞然大物,并且持有 100 多万个 BCH,在 BCH 上有足够的利益。双方都是重量级选手,至于双方愿意烧掉多少资金,取决于双方的意志,我们无法猜测。


六、攻防双方烧钱比例分析


BCH 的正常算力取决于:BTC 的总算力 & BCH/BTC 的汇率。例如 11 月 2 日 BTC 的总算力 51370P,BCH/BTC 汇率 =0.067,则 BCH 正常算力应为 51370*0.067=3441P。若 BCH 实际算力高于 3441P,则每台矿机挖矿 BCH 产出将低于 BTC,矿工将从 BCH 迁移到 BTC,直到两边挖矿收益相同,反之亦然。

CSW 投入的算力多少,将决定双方的烧钱比例。

6.1、如果 CSW 投入 7000P 算力(两倍 BCH 正常算力)

如第四章中所述,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。因此,若比特大陆也投入 7000P 算力进行防御,并最终获胜,那可以得到 BCH 期间挖出的 BCH 作为补偿(相当于 3500P 算力的成本)。

也就是说,在算力战烧钱时,比特大陆投入 7000P 算力防御,但其中只有 3500P 需要烧钱,剩下 3500P 将获得正常挖矿产出(虽然暂时无法兑现),而 CSW 的 7000P 算力全部都需要烧钱。

因此,CSW 投入的算力越少,比特大陆的「防御抵扣优势」越大,例如各自投入 5000P 时,比特大陆 1500P 烧钱 vs CSW 5000P 烧钱,因此比特大陆坚持到底的决心也必然越大。

6.2、如果 CSW 投入 7000~14000P 算力

此时,决定胜负的将主要不是双方的算力,而是双方的烧钱意志。例如 CSW 投入 10000P vs 比特大陆 10000P,则比特大陆「防御抵扣优势」将不明显,抵扣后将变成 CSW 10000P 烧钱 vs 比特大陆 6500P 烧钱。

并且在双方抽调 BTC 大量算力(假设共 20000P)到 BCH 上打算力战后,将大幅提高每 P 算力的租赁成本:

a、BTC 交易打包手续费将大幅提高

由于 BTC 的区块大小被 Core 锁死为 1M,因此:算力减少 40% → 出块速度减少 40% → 每 10 分钟 1 个 1M 区块变成每 10 分钟 0.6 个区块 =0.6M 区块 → BTC 和 2017 年底一样,发生超级大拥堵 → BTC 交易打包手续费将提高到 20-30% → 每 P 算力使用成本提高 20-30%

b、BTC 每 P 算力产出将大幅提高

若算力战短时间无法结束,那 BTC 经过难度调整后,每 P 算力产出将提高 40%,进一步提高每 P 算力使用成本,降低防御方的抵扣优势。

目前 20000P 算力日产出 3000 万元,算力战后期成本可能上升到 5000 万元 / 日 或更多,若 CSW 按照之前声称,全力进行算力战,那算力战将以极快的速度烧钱,并不会持续很长时间。

6.3、总结:

算力战的胜负,取决于算力和资金的综合影响。CSW 的算力越少,需要的资金优势越大;算力越大,需要的资金优势越小。如果 CSW 的资金优势极大,则哪怕 4000P 的算力,也可以打赢算力战,迫使比特大陆放弃防御。


七、算力战的正面战 & 游击战


从第 2 到 6 章,阐述了「以杀死一条链为目的的算力战」 :从分叉点开始,攻防双方持续地在自己链上挖块,直到一方放弃自己的整条链为止。

这种「算力正面战」类似国家之间进行的,以灭国为目的的正面战争,正面战争耗资巨大,持续时间短,对非军事目标破坏小。






以之相对应的,是「算力游击战」:攻击方由于力量或意志不够,并不进行正面对抗,不是持续地挖攻击链,而是分散、偶尔地攻击,因此攻击成本低,但持续时间长。每一次攻击链在短暂地覆盖掉原链后,都必然再被防御方覆盖回去,只能对链的稳定性造成影响,但不能杀死一条链。

防御方面对「算力游击战」的防御成本为 0,由于攻击方不会持续挖矿,因此防御方只要再继续正常挖几个块,就可以把攻击链覆盖掉,不需要付出额外的防御成本。唯一的损失只是区块链不稳定:这段时间内,链上无法打包交易,被攻击链覆盖区块的交易,也会暂时变成未确认交易。

「正面战」和「游击战」的差别总结如下:






如本文的「上」和「中」所述,算力投票(算力战)的目的是作为最终仲裁方式,在双方目标一致,只是手段不一致的情况下,避免不必要的分叉。只有「正面战」才有「消灭一条链避免分叉」的作用,而「游击战」没有这种作用,因此「游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。


八、算力战的结果


算力战的可能演化路径,如下图:






情况 A:比特大陆防御成功,CSW 攻击失败

CSW 在宣传中一直声称要「打算力战」,「没有分裂」。在 CSW 算力战失败后,若 CSW 履行承诺,放弃 BSV 链,则算力战结束,ABC 链成为 BCH,BSV 链死亡【流程图,结果 2】

但后来 CSW 又声称「要打两年」,「要让 BCH 没有任何交易」(见 Roger Ver 宣布旗下 Bitcoin.com 支持 ABC 后,CSW 给 Roger Ver 的信)






如果 CSW 在正面战失败后(甚至不愿烧钱打正面战),继续打不能杀死一条链,不能防止分裂的「游击战」,同时 BSV 链继续挖块,形成事实上长时间并存的,ABC 和 BSV 两条分裂链【流程图,结果 1】,那 CSW 将违背自己「不分裂」的承诺,被社区大部分人所抛弃。

CSW 长期进行游击战,将导致 BCH 链长时间处于不稳定状态,交易所可能长时间不恢复 BCH 的充提,商家可能长时间不愿接受 BCH,也就是 CSW 信中所称的「2 years of no trade (两年没有任何交易)」, 「welcome to bankruptcy (欢迎面对破产)」。这不符合 BCH 社区所有人的利益。

如果 BCH 社区无法阻止 CSW 一意孤行,长期进行游击战,那么:

a、BCH 上的矿池需要建立互相合作的自动防御系统,在 CSW 的算力正常挖矿时,接受其挖出的块;在检查到孤立原链区块的攻击链时,不接受攻击链,而是在原链区块之后,自动调集算力挖矿,直到覆盖掉 CSW 的攻击链为止。

b、但在防御算力覆盖掉攻击链的这段时间内(可能几分钟到几个小时,视攻击链的长度,攻击链越长,需要的恢复时间越久),BCH 链将暂时不能确认交易,用户也将看到最近确认的交易,重新变成未确认,还是给链造成了不稳定。

因此,最好的方法是 ABC 开发组发布临时战时补丁,最多只接受高度 =1 的重组链(常见的孤立块),不接受任何高度 >=2 的重组链,这样攻击方最多只能孤立最近 1 个区块(回滚 1 确认的交易),恢复时间也很短,不会对交易所和商家造成威胁。

但此补丁造成的后果是,在使用补丁的时间内矿池必须提高警惕,避免因为某些网络原因,产生高度 >=2 的连续孤立块,因为这样会导致不同矿池的永久性分叉。若意外发生了这样的分叉,矿池必须立即互相协调,放弃较短的分叉链,统一到最长的链上。

情况 B:CSW 攻击成功,比特大陆放弃防御

如 6.2 中分析,若 CSW 烧钱超过比特大陆的承受能力,则比特大陆将被迫放弃防御。ABC 开发组若放弃 ABC 链接受 BSV 链,或者不接受 BSV 链但退出 BCH 开发,则算力战结束,ABC 链死亡(无人继续挖矿),BSV 链成为 BCH【流程图,结果 3】。

ABC 开发组也可能不放弃,声称被攻击,原挖矿算法不安全,将挖矿算法从 POW 修改为 POW+POS。虽然修改挖矿算法将导致巨大的争议,但从交易所的实际表态来看,由于 BitcoinCash.org 域名和 ABC 开发组均支持 ABC 链,故交易所将大概率给 ABC 链保留 BCH 的交易对,给 BSV 链新增 BSV 的交易对(和之前诸多 BTC 分叉币一样的流程)【流程图,结果 4】。

这是最差的一种情况,BCH 社区将发生巨大的分裂,BCH 将受到巨大削弱,BSV 将继承 BCH 放弃的目标——挑战 BTC,成为真正的比特币。






不管最后的结果如何,本次算力战,都将展示算力的作用和威力,显著提高算力在整个生态中的地位,并为算力作为比特币分歧的最终裁决手段,做好铺垫。BTC,BCH,BSV 等诸多同算法分裂币种,最后可能都将被统一。


九、算力战期间用户建议


1、若你不打算在算力战期间买卖 BCH,那简单保管好你的私钥即可。

2、若你准备在算力战期间买卖 BCH,请仔细阅读本文关于算力战攻防的原理和流程说明,并忽略任何与本文相抵触的表述。算力战期间 ABC 和 BSV 的价格变化,请咨询上帝(我的一贯观点:币价长期问用户数,短期问上帝)。

3、CSW 一直在混淆「一个交易在两条链上都能打包」和「只存在一条链,没有分裂」这两件没有关系的事情(可能是为了 CSW 的支持者反对 BCH 分裂成两个币?)。算力战一开始,ABC 和 BSV 链只要有最轻微的一点不一致(例如 ABC 链打包了一个带 DSV 操作码的交易),那 ABC 和 BSV 链在物理上,就分叉成了两条链,不存在什么「只存在一条链」,CSW 最多只可能做到杀死 ABC 链,让两条链只有一条活下来。

在 ABC 和 BSV 链分裂后,由于 CSW 不在 BSV 链上加重放保护,故将发生之前 ETH 和 ETC 分叉时类似的情况(发送 ETH 时,一起把同地址的 ETC 发了出去)。你在发送 ABC 币时,由于你发 ABC 的这个交易在 BSV 链上也能打包,所以很可能将 BSV 币也一起发了出去。若你不懂得做分离,需将币发到 BCH 和 BSV 充值地址一样的交易所,以免丢币。

4、在算力战前将币充到(承诺给两种币的)交易所,好处是算力战期间还可以交易,并且如果分叉,交易所会帮你做好两种币分离。坏处是什么时候可以充提,得完全听交易所。如果算力战持续很长时间(尤其如果 CSW 长时间打游击战),交易所可能会很久都不开放充提。另外,任何交易所都有倒闭的风险。

5、把币留在链上自己控制私钥,坏处是算力战期间不能交易,好处是控制自己的币,可以在算力战后,选最先恢复充提的交易所交易。两种做法各有利弊,根据自己的情况和需要,自行选择。


九、我和莱比特矿池(BTC.TOP)的态度


我支持算力投票(算力战),认为 BCH 应该以获取用户为最高目的,快速演化,并通过算力投票(算力战)的方式,消除演化中的分歧,防止不必要的分叉。

莱比特矿池(BTC.TOP)的算力将支持愿意投入更多算力和资金的一方,并帮助这一方,尽快结束算力战混乱的局面,恢复 BCH 区块链的秩序。


十、总结


1、生存是最终的辩论方式,是决定对错的最高依据。算力能杀死一条链,所以算力能成为比特币的最高仲裁机制。

2、通过「51% 空块攻击」可以阻止一条链上打包确认任何交易,并且矿工无法挖到任何块后,也会逐渐停止挖矿,最后这条链就死了。

3、防御「51% 空块攻击」需要坚守原链,调动更多的算力,挖一条比攻击者更长的链,反过来把攻击链覆盖回去。

4、防御者有挖矿产出作为「防御抵扣优势」,攻击者的算力越大,则防御者的抵扣优势越小,攻击者需要的资金优势越小。反过来,攻击者的资金优势越大,则需要的算力越小。

5、比特大陆可调用 BTC 的算力用于 BCH 算力战,因此算力多于 CSW。CSW 必须有资金优势和更坚强的烧钱意志,才能胜利。

6、「算力游击战」不能达到算力战的最终目的:杀死一条链。「算力游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。

7、算力战后,若失败的一方认输,则算力战结束,存活链成为 BCH。若失败的一方不认输(CSW 继续打游击战,或者 ABC 改 POW+POS 算法),则 BCH 分裂为 BCH 和 BSV 两个币。

8、如果 CSW 坚持进行「算力游击战」,则需要 ABC 开发组打补丁、矿池、交易所配合,消除影响。
 
 
作者:江卓尔,莱比特矿池(BTC.TOP) CEO 查看全部

exchanges-experience-difficulties-during-bitcoin-cash-distribution.jpg


一、为什么算力能成为比特币的最高仲裁机制?


答案很简单:因为算力能杀死一条链。

这是一条最底层的规则:生存是最终的辩论方式,是决定对错的最高依据。这条规则有很多种表述方法,例如「胜王败寇」, 「真理只在大炮的射程之内」,「暴力是决定所有规则的元规则」。

为什么无神论(科学论)是对的?是因为无神论能辩过有神论吗?当然不是,无神论和有神论两边的逻辑基础都不一致,辩起来就是鸡同鸭讲。无神论是对的,不是因为无神论更「有理」,而是因为无神论能造出枪。

我能造出枪消灭你,你都不存在了,你还有什么资格讨论对错吗?

所以,生存是最终的辩论方式,是决定对错的最高依据。为什么我支持「演化论」而不是「稳定论」?因为「演化论」以适应市场需求,增加用户数为唯一目的,而「稳定论」不以此为最高目的。

当然,「稳定论」会认为,我的链协议稳定,所以用户会选择我,但如果不是呢?如果两者矛盾呢?
如果根据市场需要,增加像 DSV 这样的功能,就是能比稳定时,吸引更多用户,首先达到 50 亿的最终目标呢?那么谁是对的,谁是错的?

所以,「演化论」是逻辑自洽的。极端锁死和过度修改都错,「演化论」更有可能在「稳定」和「修改」中找到最佳的位置,并获取最多的用户。

而「稳定论」包含了一个假设:稳定是最好的增加用户的方式。这个假设从商业上来看几乎不可能成立:商业上没有躺赢,中本聪并没有给我们设计一条成为世界货币的躺赢之路。

有人可能会认为:「产品才需要吸引更多用户,而货币不能这样设计」,「BCH 应该好好在货币上发展,而不应该搞各种新功能和第二层网络」。这不对,货币也是产品的一种,美元一样要面临欧元、人民币、日元的竞争,为什么美国政府要搞「石油美元」 (国际石油贸易以美元结算)?还不是为了增加美元的「应用」和「用户数」。

而在加密数字货币领域,这种产品竞争就更剧烈了:任何一种币,都必须面临大量币(产品)的竞争。


二、如何通过算力杀死一条链?


回到算力战上,算力战对大部分人来说,是从未用过的屠龙之技,所以各种文章和推测的错误很多。 莱比特矿池(BTC.TOP)是全网唯一一个有过大规模算力战经验的矿池,任何与本文不符的表述(包括 CSW 的表述)均为错误。

大家都知道「51% 算力攻击」:

1、攻击者通过优势算力,挖掘一条比原链更长的攻击链。
2、攻击链向全网广播后,节点按规则,将接受更长的链,丢弃原链。

下图中的直线链(上面的蓝色链和下面的红色链),表示被中立节点接受的主链。

3dd545c6-3a16-5832-b77f-137e0c565dc7.jpg


PS:这里的「更长的链」准确地说是「累计难度更大的链」,例如节点会接受 2 个难度 10 的块,而抛弃掉 3 个难度 5 的块,因为 10+10=20>15=5+5+5。为了叙述方便,后文均假设每个块的难度相同 。

通过 51% 攻击,可以完成各种目的,例如:

1、在 Tx1 (交易 1)确认后,撤销掉 Tx1,让另一个冲突的 Tx2 (交易 2)生效。

例如 Alice 用 Tx1 发了 1 个 BTC 给 Bob,向 Bob 交换 100 个 LTC,在收到 Bob 的 100 个 LTC 后,再用一个发这 1BTC 给自己的 Tx2,替换掉 Tx1,把付给 Bob 的 1BTC 拿回来。

2、用自己挖的块(红色的块),孤立掉其它矿工挖的块(蓝色的块),让其它矿工损失挖矿产出。

在 51% 算力攻击的基础上,可以进行「51% 空块攻击」:攻击者只挖空块(不包括任何交易的块),并不接受(孤立掉)任何其它矿工挖的,正常打包交易的块,让这条链瘫痪掉,任何人都无法正常交易。

并且,由于矿工在这条链上挖到的块都被孤立掉,没有挖矿收入,因此也会逐渐停止挖矿,最后这条链就死了。

e4dd21f5-c1fa-5676-bc21-8d2e3f828ccd.jpg



三、如何防御「51% 空块攻击」?


防御者需要不承认攻击链,在原来被覆盖的原链之后,调动更多的算力,挖一条比攻击者更长的链。

2dd1786c-3054-5c78-9151-f7c865ef7ab2.jpg


在实际的攻防中,双方将会不断延长自己的链,并有可能来回重组覆盖。也就是说,一个只按默认规则,接受最长链的中立节点,可能在攻击链较长时,接受攻击链,然后在防御链较长时,放弃攻击链,接受防御链。


四、攻防双方成本分析


胜利的一方,只要比失败的一方多挖一个块就可以。

1、如果防御者放弃了,那攻击者也不用再继续花成本挖块,只要简单停止挖矿即可,这条链就死了。之后攻击者如果发现防御者又开始挖块,那攻击者也只要继续比防御者多挖一个块就可以。

由于这条链已经死了,所以攻防双方挖的所有块就都作废了,双方都将损失所有挖矿成本。

2、如果攻击者放弃了,那情况有些不同,攻击者还是将损失所有挖出的块(和成本),但由于链还存活,所以防御者可以获得之前所挖的块,作为收入。

f10311ce-819c-5840-b5a4-8b66128f3aea.jpg


也就是说,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。


五、攻防双方算力分析


11 月 15 日,BCH 的 ABC 客户端,将硬分叉升级至 0.18.2 版,比特大陆支持 ABC 的此次升级。

而 CSW 所支持的 BSV 客户端,将同时分叉出链 BSV 链,并声称将对 ABC 0.18.2 链(升级链)进行算力战攻击,杀死 ABC 升级链。

5.1、CSW 方的算力:

支持 CSW 的矿池(Coingeek,svpool,BMG 等)目前展示出来的算力为 2000-3000P 左右,CSW 声称还有隐藏算力,因此可认为 CSW 至少有 3000P 自有算力。

CSW 还可以通过租赁方式,控制更多算力,例如和矿池、大矿场谈算力租赁,或者从 nicehash 等算力平台上租赁算力,只要愿意给出溢价(例如+20% 挖矿收益),CSW 自有+租赁算力到 1 万 P,难度不大。

5.2、比特大陆方的算力:

比特大陆旗下的矿池(BTC.com 和 Antpool)合计拥有约 15000P 的算力,再加上比特大陆参股的 ViaBTC 矿池,共计拥有约 20000P 的算力。

由于 BTC 和 BCH 均使用 sha256 算法挖矿,所以矿池在技术上,可以在 BTC 和 BCH 上来回秒切算力。只要正常给矿工按算力付挖矿产出的 BTC,矿工实际上并不关心实际挖的是什么币。矿工甚至不知道自己挖的是什么币,只是解答矿池下发的计算任务。因此比特大陆如果愿意,可以使用所有 20000 万 P 的 BTC 算力,来 BCH 上做防御,之前出现各种传闻,例如比特大陆在新疆部署 9 万台矿机用于算力战等,均为无意义的谣言。比特大陆使用 BTC 算力进行算力战,符合「生存是最终的辩论方式」的算力战原则。

由于比特大陆正处于上市中的关键阶段,CSW 威胁称,若比特大陆使用 BTC 算力来进行算力战,他将通过诉讼方式攻击比特大陆。但这一做法意义不大,因为比特大陆基本上不需要使用全部 20000P 算力应战,若使用部分算力,比特大陆可声明使用自有算力(或合作伙伴算力),其余(正常获得支付 BTC)的矿工既没有动机起诉,也难以确认自己挖的是什么币。

5.3、双方的资金:

虽然比特大陆方算力基本可以肯定比 CSW 多,但算力战的胜负,不仅仅取决于算力。若 CSW 如之前所声称,全力开战,那每天将烧掉几千万,甚至上亿的成本,那算力战的瓶颈,将不是算力,而是双方愿意烧掉的资金。

在资金方面,CSW 声称自己是亿万富翁,有豪宅名车,并得到 Calvin Ayre (博彩业大佬)的鼎力支持。比特大陆则是估值 150 亿美元,正在上市中的庞然大物,并且持有 100 多万个 BCH,在 BCH 上有足够的利益。双方都是重量级选手,至于双方愿意烧掉多少资金,取决于双方的意志,我们无法猜测。


六、攻防双方烧钱比例分析


BCH 的正常算力取决于:BTC 的总算力 & BCH/BTC 的汇率。例如 11 月 2 日 BTC 的总算力 51370P,BCH/BTC 汇率 =0.067,则 BCH 正常算力应为 51370*0.067=3441P。若 BCH 实际算力高于 3441P,则每台矿机挖矿 BCH 产出将低于 BTC,矿工将从 BCH 迁移到 BTC,直到两边挖矿收益相同,反之亦然。

CSW 投入的算力多少,将决定双方的烧钱比例。

6.1、如果 CSW 投入 7000P 算力(两倍 BCH 正常算力)

如第四章中所述,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。因此,若比特大陆也投入 7000P 算力进行防御,并最终获胜,那可以得到 BCH 期间挖出的 BCH 作为补偿(相当于 3500P 算力的成本)。

也就是说,在算力战烧钱时,比特大陆投入 7000P 算力防御,但其中只有 3500P 需要烧钱,剩下 3500P 将获得正常挖矿产出(虽然暂时无法兑现),而 CSW 的 7000P 算力全部都需要烧钱。

因此,CSW 投入的算力越少,比特大陆的「防御抵扣优势」越大,例如各自投入 5000P 时,比特大陆 1500P 烧钱 vs CSW 5000P 烧钱,因此比特大陆坚持到底的决心也必然越大。

6.2、如果 CSW 投入 7000~14000P 算力

此时,决定胜负的将主要不是双方的算力,而是双方的烧钱意志。例如 CSW 投入 10000P vs 比特大陆 10000P,则比特大陆「防御抵扣优势」将不明显,抵扣后将变成 CSW 10000P 烧钱 vs 比特大陆 6500P 烧钱。

并且在双方抽调 BTC 大量算力(假设共 20000P)到 BCH 上打算力战后,将大幅提高每 P 算力的租赁成本:

a、BTC 交易打包手续费将大幅提高

由于 BTC 的区块大小被 Core 锁死为 1M,因此:算力减少 40% → 出块速度减少 40% → 每 10 分钟 1 个 1M 区块变成每 10 分钟 0.6 个区块 =0.6M 区块 → BTC 和 2017 年底一样,发生超级大拥堵 → BTC 交易打包手续费将提高到 20-30% → 每 P 算力使用成本提高 20-30%

b、BTC 每 P 算力产出将大幅提高

若算力战短时间无法结束,那 BTC 经过难度调整后,每 P 算力产出将提高 40%,进一步提高每 P 算力使用成本,降低防御方的抵扣优势。

目前 20000P 算力日产出 3000 万元,算力战后期成本可能上升到 5000 万元 / 日 或更多,若 CSW 按照之前声称,全力进行算力战,那算力战将以极快的速度烧钱,并不会持续很长时间。

6.3、总结:

算力战的胜负,取决于算力和资金的综合影响。CSW 的算力越少,需要的资金优势越大;算力越大,需要的资金优势越小。如果 CSW 的资金优势极大,则哪怕 4000P 的算力,也可以打赢算力战,迫使比特大陆放弃防御。


七、算力战的正面战 & 游击战


从第 2 到 6 章,阐述了「以杀死一条链为目的的算力战」 :从分叉点开始,攻防双方持续地在自己链上挖块,直到一方放弃自己的整条链为止。

这种「算力正面战」类似国家之间进行的,以灭国为目的的正面战争,正面战争耗资巨大,持续时间短,对非军事目标破坏小。

f3a1d91b-3245-53cb-83c5-45e9fe66976d.jpg


以之相对应的,是「算力游击战」:攻击方由于力量或意志不够,并不进行正面对抗,不是持续地挖攻击链,而是分散、偶尔地攻击,因此攻击成本低,但持续时间长。每一次攻击链在短暂地覆盖掉原链后,都必然再被防御方覆盖回去,只能对链的稳定性造成影响,但不能杀死一条链。

防御方面对「算力游击战」的防御成本为 0,由于攻击方不会持续挖矿,因此防御方只要再继续正常挖几个块,就可以把攻击链覆盖掉,不需要付出额外的防御成本。唯一的损失只是区块链不稳定:这段时间内,链上无法打包交易,被攻击链覆盖区块的交易,也会暂时变成未确认交易。

「正面战」和「游击战」的差别总结如下:

6c15a69f-a161-56b8-98d9-d50db297b80b.jpg


如本文的「上」和「中」所述,算力投票(算力战)的目的是作为最终仲裁方式,在双方目标一致,只是手段不一致的情况下,避免不必要的分叉。只有「正面战」才有「消灭一条链避免分叉」的作用,而「游击战」没有这种作用,因此「游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。


八、算力战的结果


算力战的可能演化路径,如下图:

9169b01f-76af-5870-a713-e7c0282911e2.jpg


情况 A:比特大陆防御成功,CSW 攻击失败

CSW 在宣传中一直声称要「打算力战」,「没有分裂」。在 CSW 算力战失败后,若 CSW 履行承诺,放弃 BSV 链,则算力战结束,ABC 链成为 BCH,BSV 链死亡【流程图,结果 2】

但后来 CSW 又声称「要打两年」,「要让 BCH 没有任何交易」(见 Roger Ver 宣布旗下 Bitcoin.com 支持 ABC 后,CSW 给 Roger Ver 的信)

3a15bb37-e76c-5da9-a253-e3046f7a8189.jpg


如果 CSW 在正面战失败后(甚至不愿烧钱打正面战),继续打不能杀死一条链,不能防止分裂的「游击战」,同时 BSV 链继续挖块,形成事实上长时间并存的,ABC 和 BSV 两条分裂链【流程图,结果 1】,那 CSW 将违背自己「不分裂」的承诺,被社区大部分人所抛弃。

CSW 长期进行游击战,将导致 BCH 链长时间处于不稳定状态,交易所可能长时间不恢复 BCH 的充提,商家可能长时间不愿接受 BCH,也就是 CSW 信中所称的「2 years of no trade (两年没有任何交易)」, 「welcome to bankruptcy (欢迎面对破产)」。这不符合 BCH 社区所有人的利益。

如果 BCH 社区无法阻止 CSW 一意孤行,长期进行游击战,那么:

a、BCH 上的矿池需要建立互相合作的自动防御系统,在 CSW 的算力正常挖矿时,接受其挖出的块;在检查到孤立原链区块的攻击链时,不接受攻击链,而是在原链区块之后,自动调集算力挖矿,直到覆盖掉 CSW 的攻击链为止。

b、但在防御算力覆盖掉攻击链的这段时间内(可能几分钟到几个小时,视攻击链的长度,攻击链越长,需要的恢复时间越久),BCH 链将暂时不能确认交易,用户也将看到最近确认的交易,重新变成未确认,还是给链造成了不稳定。

因此,最好的方法是 ABC 开发组发布临时战时补丁,最多只接受高度 =1 的重组链(常见的孤立块),不接受任何高度 >=2 的重组链,这样攻击方最多只能孤立最近 1 个区块(回滚 1 确认的交易),恢复时间也很短,不会对交易所和商家造成威胁。

但此补丁造成的后果是,在使用补丁的时间内矿池必须提高警惕,避免因为某些网络原因,产生高度 >=2 的连续孤立块,因为这样会导致不同矿池的永久性分叉。若意外发生了这样的分叉,矿池必须立即互相协调,放弃较短的分叉链,统一到最长的链上。

情况 B:CSW 攻击成功,比特大陆放弃防御

如 6.2 中分析,若 CSW 烧钱超过比特大陆的承受能力,则比特大陆将被迫放弃防御。ABC 开发组若放弃 ABC 链接受 BSV 链,或者不接受 BSV 链但退出 BCH 开发,则算力战结束,ABC 链死亡(无人继续挖矿),BSV 链成为 BCH【流程图,结果 3】。

ABC 开发组也可能不放弃,声称被攻击,原挖矿算法不安全,将挖矿算法从 POW 修改为 POW+POS。虽然修改挖矿算法将导致巨大的争议,但从交易所的实际表态来看,由于 BitcoinCash.org 域名和 ABC 开发组均支持 ABC 链,故交易所将大概率给 ABC 链保留 BCH 的交易对,给 BSV 链新增 BSV 的交易对(和之前诸多 BTC 分叉币一样的流程)【流程图,结果 4】。

这是最差的一种情况,BCH 社区将发生巨大的分裂,BCH 将受到巨大削弱,BSV 将继承 BCH 放弃的目标——挑战 BTC,成为真正的比特币。

3636bfd1-9975-54b5-b4de-27800baaad8a.jpg


不管最后的结果如何,本次算力战,都将展示算力的作用和威力,显著提高算力在整个生态中的地位,并为算力作为比特币分歧的最终裁决手段,做好铺垫。BTC,BCH,BSV 等诸多同算法分裂币种,最后可能都将被统一。


九、算力战期间用户建议


1、若你不打算在算力战期间买卖 BCH,那简单保管好你的私钥即可。

2、若你准备在算力战期间买卖 BCH,请仔细阅读本文关于算力战攻防的原理和流程说明,并忽略任何与本文相抵触的表述。算力战期间 ABC 和 BSV 的价格变化,请咨询上帝(我的一贯观点:币价长期问用户数,短期问上帝)。

3、CSW 一直在混淆「一个交易在两条链上都能打包」和「只存在一条链,没有分裂」这两件没有关系的事情(可能是为了 CSW 的支持者反对 BCH 分裂成两个币?)。算力战一开始,ABC 和 BSV 链只要有最轻微的一点不一致(例如 ABC 链打包了一个带 DSV 操作码的交易),那 ABC 和 BSV 链在物理上,就分叉成了两条链,不存在什么「只存在一条链」,CSW 最多只可能做到杀死 ABC 链,让两条链只有一条活下来。

在 ABC 和 BSV 链分裂后,由于 CSW 不在 BSV 链上加重放保护,故将发生之前 ETH 和 ETC 分叉时类似的情况(发送 ETH 时,一起把同地址的 ETC 发了出去)。你在发送 ABC 币时,由于你发 ABC 的这个交易在 BSV 链上也能打包,所以很可能将 BSV 币也一起发了出去。若你不懂得做分离,需将币发到 BCH 和 BSV 充值地址一样的交易所,以免丢币。

4、在算力战前将币充到(承诺给两种币的)交易所,好处是算力战期间还可以交易,并且如果分叉,交易所会帮你做好两种币分离。坏处是什么时候可以充提,得完全听交易所。如果算力战持续很长时间(尤其如果 CSW 长时间打游击战),交易所可能会很久都不开放充提。另外,任何交易所都有倒闭的风险。

5、把币留在链上自己控制私钥,坏处是算力战期间不能交易,好处是控制自己的币,可以在算力战后,选最先恢复充提的交易所交易。两种做法各有利弊,根据自己的情况和需要,自行选择。


九、我和莱比特矿池(BTC.TOP)的态度


我支持算力投票(算力战),认为 BCH 应该以获取用户为最高目的,快速演化,并通过算力投票(算力战)的方式,消除演化中的分歧,防止不必要的分叉。

莱比特矿池(BTC.TOP)的算力将支持愿意投入更多算力和资金的一方,并帮助这一方,尽快结束算力战混乱的局面,恢复 BCH 区块链的秩序。


十、总结


1、生存是最终的辩论方式,是决定对错的最高依据。算力能杀死一条链,所以算力能成为比特币的最高仲裁机制。

2、通过「51% 空块攻击」可以阻止一条链上打包确认任何交易,并且矿工无法挖到任何块后,也会逐渐停止挖矿,最后这条链就死了。

3、防御「51% 空块攻击」需要坚守原链,调动更多的算力,挖一条比攻击者更长的链,反过来把攻击链覆盖回去。

4、防御者有挖矿产出作为「防御抵扣优势」,攻击者的算力越大,则防御者的抵扣优势越小,攻击者需要的资金优势越小。反过来,攻击者的资金优势越大,则需要的算力越小。

5、比特大陆可调用 BTC 的算力用于 BCH 算力战,因此算力多于 CSW。CSW 必须有资金优势和更坚强的烧钱意志,才能胜利。

6、「算力游击战」不能达到算力战的最终目的:杀死一条链。「算力游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。

7、算力战后,若失败的一方认输,则算力战结束,存活链成为 BCH。若失败的一方不认输(CSW 继续打游击战,或者 ABC 改 POW+POS 算法),则 BCH 分裂为 BCH 和 BSV 两个币。

8、如果 CSW 坚持进行「算力游击战」,则需要 ABC 开发组打补丁、矿池、交易所配合,消除影响。
 
 
作者:江卓尔,莱比特矿池(BTC.TOP) CEO

BCH分叉在即,重放保护与分离BSV你必须要了解

攻略leek 发表了文章 • 2018-11-14 12:10 • 来自相关话题

2018年11月15日,BitcoinCash从版本0.17硬分叉升级到0.18时候,出现了另外一个与0.18不兼容的版本BitcoinSV,但是这个版本没有添加重放保护,号称要以算力战的方式用BitcoinSV替换BitcoinABC 0.18。算力战的问题这里暂且不谈,只说重放保护的问题以及如何分离BCH和BSV。


关于重放保护的相关问题


1. 什么是重放保护?

重放保护,就是让交易只在当前链中有效,并且在其它链中无效。通常在一条链分裂成两条链时,为了让两条链的交易互不影响,需要在生成交易信息的时候,加入不同的标识或者使用不同的交易结构,这样,另一条链的矿工就会验证该交易无效,从而不打包该交易。

2.添加重放保护的一方,有什么影响?

目前来看,添加重放保护的一方,是处于劣势的,因为该举动意味着放弃了另一方的所有生态。2017年8月1号BCH分叉时,主动添加重放保护,只能重新建立自己的相关应用,从0开始。

但是,添加重放保护,是能上交易所的基本条件。虽然不添加重放保护,交易所也可以把两种分离,但是交易所要花费很多精力和技术去做这些事。技术差的交易所,会因为账务混乱,无法支持。除非这种币有很大的用户群,否则交易所不愿意花费高成本去支持这种币。

3. BCH每年两次的硬分叉升级,为什么不添加重放保护?

BCH的硬分叉升级是为了升级(本来是升级,不知道谁取名字叫硬分叉),不是为了分叉,和ETH一样,全节点客户端都需要升级,否则就无法同步区块,但是轻钱包却不用升级。如果升级时添加重放保护,意味着之前所有的BCH轻钱包或者一些服务都不能使用,这些生态都需要同时升级,对生态的影响非常严重。(并不是所有的硬分叉升级,轻钱包都不需要修改的,区块链系统在升级的时候,尽量避免修改与构造交易相关的修改,否则就要作相关兼容,不然就需要很多生态一起升级,费时费力,用户体验也不好)。

4.BCH和BTC分叉时,是如何添加重放保护的?

2017年8月1号BCH分叉时,主动添加了重放保护,简单的说,就是在交易签名的数据中,添加了SIGHASH_FORKID=0x40这个数据(详情https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md)。 BSV如果要添加重放保护,只要把0x40改为其它值就可以了。

5. ETC和ETH分叉时,没有重放保护,造成了什么样的问题?

ETC的出生,是让人未意料到的,从ETC到ETH,是一次硬分叉升级,没有重放保护,但是仍有人坚持挖ETC原链,由于ETC的难度调整很快,所以ETC活了下来,并且有了价值(BCH 的0.15版,也活了下来,但是由于没有主流交易所支持,可以认为是没有价值的)。但是由于大家都没有做好准备,特别是交易所,被重放攻击了。重放攻击,对于有价值的币有意义,对于没有价值的币,是没有意义的,因为你攻击得到的币,是没有价值的。

6. 如何重放攻击?

大部分影响下,没有重放保护的两种币,在转帐的时候,发送其中的一种币,另一种币也会同时发送。重放攻击,就是利用这个漏洞,在接收币的时候,同时获取另外一种币。重放攻击一般对交易所进行攻击。
例如:

在ETC分叉的初期,没有重放保护,交易所以为ETC不会出现,也没有做分离处理,用户在提取ETH的时候,同时也收到了ETC,然后用户自已把ETH和ETC分离,向交易所充值ETH,再提出ETH,这样就多收到了ETC。


如何分离没有重放保护的BSV?


1. 分离两种币的一些基本准备工作

想要分离两种币,前提是两种币都有算力,并且都能出块。如果11.15以后BSV不出块,那么也不可能分离了。

为验证这两种币是否分离成功了,你需要两种币的区块链浏览器进行查询,但是现在还没有BSV区块链浏览器。

另一个验证的办法,就是同时准备BCH钱包和BSV钱包,并且把同一个私钥或者相同协议的助记词导入到这两个钱包中。目前,BSV没有轻钱包,唯一的全节点客户端只能在Linux系统运行,并且没有界面。

下图是BSV全节点客户端的操作截图:







2. 分离两种币的一些方法

两种区块链币分叉以后,如果没有专门的重放保护,大部分情况交易信息是完全一样的,如果想分离,就需要让一笔交易在一条链上打包,在另一条链上不打包。如果自己有矿池,那么就会有很多手段,例如,矿池自己构造交易,直接打包,不广播,那么,这些交易就不会在另一条链上存在。另外,构造一些特殊交易,例如利用BCH新的操作码构造交易,也可以让交易只在BCH链上打包,在BSV链不打包。但是这两种方法对用户的要求太高,因为普通用户没有矿池,又不是高手,自己不能构造交易。下面介绍两种方法,可以让普通用户都可以操作。

3. INPUT污染法

向你的BCH钱包转入一笔分离后的BCH当作污染源,然后把钱包中的所有币一分不留的全部转向另一个地址,转移成功后,会发现BSV钱包中的币并没有转走,两种币分离成功。

这个方法的分离原理,要从比特币的转账原理说起。






上图这笔交易由2个输入转账到一个输出。这两个输入必须同时存在,矿池才会验证通过,并打包进区块。如果输入1只存在BCH区块链中,那么BSV矿池就会拒绝收录这笔交易。操作的时要求用户一分不留的全部转走,就是为了让那笔当作污染源的输入能够包括在交易中,否则就会分离失败。

这个方法要求首先有一笔分离后的BCH,才能把其它的BCH和BSV分离开。这些币可以是矿池新挖出来的币,也可以是别人分离后转给你的币。我会在分离BCH后,给大家发送BCH,以便大家分离。

4. 区块不同步确认法

此方法用到两个特性:

BCH的零确认有个特点,就是未确认的交易,最多只能发送26次。

BCH和BSV挖矿出块不同步。


我们可以利用这两个特点分离BCH和BSV。

这个方法操作相对复杂一些,并需要试很多次,还要花费一些BCH或BSV,需要准备BCH钱包和BSV钱包,把同一个私钥导入到BCH钱包和BSV钱包。

我们仍然操作BCH(因为BCH的工具比较多,钱包多)。向BCH钱包转入大约0.01个BCH,不要太多,此时,BCH钱包和BSV钱包都会收到这0.01个币。

快速把这些币转账到原来的地址,连续操作26次以上(越快越好,最好在5分钟能操作完成,否则要试很多次),等钱包提示错误不能再操作为止。如果你的钱包不允许零确认26次,那就需要换个钱包。如果你会用程序生成交易,那最好不过了。

等未确认的交易达到26次以后,等待BCH网络和BSV网络出块。如果BCH网络先出块,那么再发一笔BCH交易,此时BCH网络会收录这笔交易,BSV网络因为超过26次零确认,会拒绝你的交易,分离成功。如果BSV网络先出块,那么用BSV钱包再发一笔交易,同样原理,也可以分离BCH和BSV。



作者:区块链展望与观察 查看全部
replay-050817-79b61b33eac00b6a.jpeg

2018年11月15日,BitcoinCash从版本0.17硬分叉升级到0.18时候,出现了另外一个与0.18不兼容的版本BitcoinSV,但是这个版本没有添加重放保护,号称要以算力战的方式用BitcoinSV替换BitcoinABC 0.18。算力战的问题这里暂且不谈,只说重放保护的问题以及如何分离BCH和BSV。


关于重放保护的相关问题


1. 什么是重放保护?

重放保护,就是让交易只在当前链中有效,并且在其它链中无效。通常在一条链分裂成两条链时,为了让两条链的交易互不影响,需要在生成交易信息的时候,加入不同的标识或者使用不同的交易结构,这样,另一条链的矿工就会验证该交易无效,从而不打包该交易。

2.添加重放保护的一方,有什么影响?

目前来看,添加重放保护的一方,是处于劣势的,因为该举动意味着放弃了另一方的所有生态。2017年8月1号BCH分叉时,主动添加重放保护,只能重新建立自己的相关应用,从0开始。

但是,添加重放保护,是能上交易所的基本条件。虽然不添加重放保护,交易所也可以把两种分离,但是交易所要花费很多精力和技术去做这些事。技术差的交易所,会因为账务混乱,无法支持。除非这种币有很大的用户群,否则交易所不愿意花费高成本去支持这种币。

3. BCH每年两次的硬分叉升级,为什么不添加重放保护?

BCH的硬分叉升级是为了升级(本来是升级,不知道谁取名字叫硬分叉),不是为了分叉,和ETH一样,全节点客户端都需要升级,否则就无法同步区块,但是轻钱包却不用升级。如果升级时添加重放保护,意味着之前所有的BCH轻钱包或者一些服务都不能使用,这些生态都需要同时升级,对生态的影响非常严重。(并不是所有的硬分叉升级,轻钱包都不需要修改的,区块链系统在升级的时候,尽量避免修改与构造交易相关的修改,否则就要作相关兼容,不然就需要很多生态一起升级,费时费力,用户体验也不好)。

4.BCH和BTC分叉时,是如何添加重放保护的?

2017年8月1号BCH分叉时,主动添加了重放保护,简单的说,就是在交易签名的数据中,添加了SIGHASH_FORKID=0x40这个数据(详情https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md)。 BSV如果要添加重放保护,只要把0x40改为其它值就可以了。

5. ETC和ETH分叉时,没有重放保护,造成了什么样的问题?

ETC的出生,是让人未意料到的,从ETC到ETH,是一次硬分叉升级,没有重放保护,但是仍有人坚持挖ETC原链,由于ETC的难度调整很快,所以ETC活了下来,并且有了价值(BCH 的0.15版,也活了下来,但是由于没有主流交易所支持,可以认为是没有价值的)。但是由于大家都没有做好准备,特别是交易所,被重放攻击了。重放攻击,对于有价值的币有意义,对于没有价值的币,是没有意义的,因为你攻击得到的币,是没有价值的。

6. 如何重放攻击?

大部分影响下,没有重放保护的两种币,在转帐的时候,发送其中的一种币,另一种币也会同时发送。重放攻击,就是利用这个漏洞,在接收币的时候,同时获取另外一种币。重放攻击一般对交易所进行攻击。
例如:

在ETC分叉的初期,没有重放保护,交易所以为ETC不会出现,也没有做分离处理,用户在提取ETH的时候,同时也收到了ETC,然后用户自已把ETH和ETC分离,向交易所充值ETH,再提出ETH,这样就多收到了ETC。


如何分离没有重放保护的BSV?


1. 分离两种币的一些基本准备工作

想要分离两种币,前提是两种币都有算力,并且都能出块。如果11.15以后BSV不出块,那么也不可能分离了。

为验证这两种币是否分离成功了,你需要两种币的区块链浏览器进行查询,但是现在还没有BSV区块链浏览器。

另一个验证的办法,就是同时准备BCH钱包和BSV钱包,并且把同一个私钥或者相同协议的助记词导入到这两个钱包中。目前,BSV没有轻钱包,唯一的全节点客户端只能在Linux系统运行,并且没有界面。

下图是BSV全节点客户端的操作截图:

36698e3922c474fd79953f6196cc28ed_G4ZTMKRUHE3A.jpg



2. 分离两种币的一些方法

两种区块链币分叉以后,如果没有专门的重放保护,大部分情况交易信息是完全一样的,如果想分离,就需要让一笔交易在一条链上打包,在另一条链上不打包。如果自己有矿池,那么就会有很多手段,例如,矿池自己构造交易,直接打包,不广播,那么,这些交易就不会在另一条链上存在。另外,构造一些特殊交易,例如利用BCH新的操作码构造交易,也可以让交易只在BCH链上打包,在BSV链不打包。但是这两种方法对用户的要求太高,因为普通用户没有矿池,又不是高手,自己不能构造交易。下面介绍两种方法,可以让普通用户都可以操作。

3. INPUT污染法

向你的BCH钱包转入一笔分离后的BCH当作污染源,然后把钱包中的所有币一分不留的全部转向另一个地址,转移成功后,会发现BSV钱包中的币并没有转走,两种币分离成功。

这个方法的分离原理,要从比特币的转账原理说起。

6ffbe071e83d5f9666db3c78690b0ea4_GEYDENBKGE2TA.jpg


上图这笔交易由2个输入转账到一个输出。这两个输入必须同时存在,矿池才会验证通过,并打包进区块。如果输入1只存在BCH区块链中,那么BSV矿池就会拒绝收录这笔交易。操作的时要求用户一分不留的全部转走,就是为了让那笔当作污染源的输入能够包括在交易中,否则就会分离失败。

这个方法要求首先有一笔分离后的BCH,才能把其它的BCH和BSV分离开。这些币可以是矿池新挖出来的币,也可以是别人分离后转给你的币。我会在分离BCH后,给大家发送BCH,以便大家分离。

4. 区块不同步确认法

此方法用到两个特性:


BCH的零确认有个特点,就是未确认的交易,最多只能发送26次。

BCH和BSV挖矿出块不同步。



我们可以利用这两个特点分离BCH和BSV。


这个方法操作相对复杂一些,并需要试很多次,还要花费一些BCH或BSV,需要准备BCH钱包和BSV钱包,把同一个私钥导入到BCH钱包和BSV钱包。

我们仍然操作BCH(因为BCH的工具比较多,钱包多)。向BCH钱包转入大约0.01个BCH,不要太多,此时,BCH钱包和BSV钱包都会收到这0.01个币。

快速把这些币转账到原来的地址,连续操作26次以上(越快越好,最好在5分钟能操作完成,否则要试很多次),等钱包提示错误不能再操作为止。如果你的钱包不允许零确认26次,那就需要换个钱包。如果你会用程序生成交易,那最好不过了。

等未确认的交易达到26次以后,等待BCH网络和BSV网络出块。如果BCH网络先出块,那么再发一笔BCH交易,此时BCH网络会收录这笔交易,BSV网络因为超过26次零确认,会拒绝你的交易,分离成功。如果BSV网络先出块,那么用BSV钱包再发一笔交易,同样原理,也可以分离BCH和BSV。




作者:区块链展望与观察

直击 BCH 硬分叉:采用「钱包分离法」彻底根除重放攻击风险

攻略chainnews 发表了文章 • 2018-11-20 13:24 • 来自相关话题

北京时间 10 月 16 日,自 02:16 块高度 556767 起,以比特大陆和蚂蚁矿池为首的 BCH ABC 阵营(代表人物吴忌寒)和以 CoinGeek 及 nChain 为首的 BCH SV 阵营 (代表人物 Craig Steve Wright,即澳本聪)正式宣告分家,分叉为 BCH ABC 和 BCH SV 两条独立的公链。

这场被业界广泛关注的 BCH 分叉算力之战,并没有出现一开始假想的 51% 算力攻击,双方在算力、出块速度上你追我赶,各自独立运行,暂时 ABC 链保持领先,SV 紧追其后。表面上看似波澜不惊,实则却暗流涌动。由于 BCH 分叉为 ABC 和 SV 后,两条新分叉后的支链,地址、私钥、签名规则、交易格式都相同,因此存在被重放攻击的风险。

何为重放攻击,简而言之是指,A 在 ABC 公链上向 B 发出了一个交易请求(把 ABC 转给 B ),B 可以在 SV 链上重放 A 发出的请求(索取与 ABC 等量的 SV),结果是,A 只向 B 发出了一次交易请求(转出 ABC ),B 却可以同时获得属于 A 的两份资产(ABC+SV),这样以来,B (攻击者)就非法侵占了 A 原本预期转账之外的额外资产,造成 A 在数字资产上的损失。

在此前区块链历史上的多次硬分叉,都存在因缺乏重放保护功能而出现的重放攻击事件,此次 BCH 硬分叉后,外网也已经报道出现了重放攻击个例。

据区块链安全公司 PeckShield 态势感知平台数据显示:11 月 16 日,即 BCH 硬分叉后的当天,BCH ABC 和 BCH SV 两条链上存在 341,068 笔重放交易;11 月 18 日,在受到不明巨量粉尘攻击的影响下,BCH ABC 和 BCH SV 两条链上的重放交易数高达 1,409,055 次,达到了百万级。图一为 BCH ABC 和 SV 链上硬分叉后,每小时被重放的交易次数。

然而,在如此巨量重放交易存在的情况下,ABC 和 SV 公链并没有出台全链层面的重放保护功能,来保障用户资产不受重放攻击的威胁。且各大交易所开始逐渐恢复 BCH 交易和存取币,而任何交易行为都存在潜在被重放攻击的可能。

当务之急,在重放保护功能出台前,交易所和一般用户该如何保障自身的数字资产不受侵害呢?





图一:BCH ABC 和 SV 链上硬分叉后每小时被重放的交易次数


PeckShield 安全人员经过周密分析并实测认为:可采用「钱包分离法」来解除风险,也就是用户应该将 ABC 和 SV 资产分离到不同钱包地址,具体操作有以下三种:

1、无掺加地址分离:在 ABC 和 SV 链上分别生成一个不同的地址,然后把原 BCH 地址中 ABC 和 SV 币分别转到这两个地址中。这两个交易确认成功后,新地址中的数字资产就不会再遭受重放攻击。据了解,有些 SV 节点在把 SV 的交易重放到 ABC 链上,所以我们建议先发起 ABC 链的交易,确认后再发起 SV 链交易。

2、掺加 Input 疫苗:在发起一个 ABC/SV 交易时,在 input 中加入一个只存在于 ABC/SV 链的小额 UTXO,使得这个交易在另一个链上是非法交易,无法重放。这个小额的 UTXO 可以由第三方服务商生成转发给用户,也可以自己产生。

3、掺加特殊 OP Code:ABC 链和 SV 链都有独有的 OP code,所以可以把它们加入交易中,达到 类似于第二种方法的效果。在 ABC 链的交易中可以加入 OP_CHECKDATASIG,SV 链可以加 OP_MUL。


PeckShield 认为只要彻底做到钱包分离,且分离过程不受干扰,就可以确保资产不再受重放攻击困扰。当然,为了强化各个处理方法的高效、牢靠,可以组合叠加使用。PeckShield 建议一般 BCH 持有者可以采用简单容易操作的第二种方法。对于交易所而言,因存在更大规模的交易量和复杂地址,可以叠加使用第一种+第二种或第一种+第三种方法来确保安全。PeckShield 也已和各大交易所建立联系,并尝试用各类有效方法,帮助用户解除存在的重放攻击风险。 查看全部
the-bitcoin-cash-community-debates-future-difficulty-adjustments-820x510.jpg

北京时间 10 月 16 日,自 02:16 块高度 556767 起,以比特大陆和蚂蚁矿池为首的 BCH ABC 阵营(代表人物吴忌寒)和以 CoinGeek 及 nChain 为首的 BCH SV 阵营 (代表人物 Craig Steve Wright,即澳本聪)正式宣告分家,分叉为 BCH ABC 和 BCH SV 两条独立的公链。

这场被业界广泛关注的 BCH 分叉算力之战,并没有出现一开始假想的 51% 算力攻击,双方在算力、出块速度上你追我赶,各自独立运行,暂时 ABC 链保持领先,SV 紧追其后。表面上看似波澜不惊,实则却暗流涌动。由于 BCH 分叉为 ABC 和 SV 后,两条新分叉后的支链,地址、私钥、签名规则、交易格式都相同,因此存在被重放攻击的风险。

何为重放攻击,简而言之是指,A 在 ABC 公链上向 B 发出了一个交易请求(把 ABC 转给 B ),B 可以在 SV 链上重放 A 发出的请求(索取与 ABC 等量的 SV),结果是,A 只向 B 发出了一次交易请求(转出 ABC ),B 却可以同时获得属于 A 的两份资产(ABC+SV),这样以来,B (攻击者)就非法侵占了 A 原本预期转账之外的额外资产,造成 A 在数字资产上的损失。

在此前区块链历史上的多次硬分叉,都存在因缺乏重放保护功能而出现的重放攻击事件,此次 BCH 硬分叉后,外网也已经报道出现了重放攻击个例。

据区块链安全公司 PeckShield 态势感知平台数据显示:11 月 16 日,即 BCH 硬分叉后的当天,BCH ABC 和 BCH SV 两条链上存在 341,068 笔重放交易;11 月 18 日,在受到不明巨量粉尘攻击的影响下,BCH ABC 和 BCH SV 两条链上的重放交易数高达 1,409,055 次,达到了百万级。图一为 BCH ABC 和 SV 链上硬分叉后,每小时被重放的交易次数。

然而,在如此巨量重放交易存在的情况下,ABC 和 SV 公链并没有出台全链层面的重放保护功能,来保障用户资产不受重放攻击的威胁。且各大交易所开始逐渐恢复 BCH 交易和存取币,而任何交易行为都存在潜在被重放攻击的可能。

当务之急,在重放保护功能出台前,交易所和一般用户该如何保障自身的数字资产不受侵害呢?

5d80cb2a-2325-5223-81b7-1681f43ead6b.jpeg

图一:BCH ABC 和 SV 链上硬分叉后每小时被重放的交易次数


PeckShield 安全人员经过周密分析并实测认为:可采用「钱包分离法」来解除风险,也就是用户应该将 ABC 和 SV 资产分离到不同钱包地址,具体操作有以下三种:


1、无掺加地址分离:在 ABC 和 SV 链上分别生成一个不同的地址,然后把原 BCH 地址中 ABC 和 SV 币分别转到这两个地址中。这两个交易确认成功后,新地址中的数字资产就不会再遭受重放攻击。据了解,有些 SV 节点在把 SV 的交易重放到 ABC 链上,所以我们建议先发起 ABC 链的交易,确认后再发起 SV 链交易。

2、掺加 Input 疫苗:在发起一个 ABC/SV 交易时,在 input 中加入一个只存在于 ABC/SV 链的小额 UTXO,使得这个交易在另一个链上是非法交易,无法重放。这个小额的 UTXO 可以由第三方服务商生成转发给用户,也可以自己产生。

3、掺加特殊 OP Code:ABC 链和 SV 链都有独有的 OP code,所以可以把它们加入交易中,达到 类似于第二种方法的效果。在 ABC 链的交易中可以加入 OP_CHECKDATASIG,SV 链可以加 OP_MUL。



PeckShield 认为只要彻底做到钱包分离,且分离过程不受干扰,就可以确保资产不再受重放攻击困扰。当然,为了强化各个处理方法的高效、牢靠,可以组合叠加使用。PeckShield 建议一般 BCH 持有者可以采用简单容易操作的第二种方法。对于交易所而言,因存在更大规模的交易量和复杂地址,可以叠加使用第一种+第二种或第一种+第三种方法来确保安全。PeckShield 也已和各大交易所建立联系,并尝试用各类有效方法,帮助用户解除存在的重放攻击风险。

重放攻击原理和防范措施——如何安全分离BCH的分裂币

攻略shandian 发表了文章 • 2018-11-18 19:20 • 来自相关话题

第0章 引言


即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。


第1章 重放攻击原理


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

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

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

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

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

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

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

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


第2章 领取分裂币


BCH分裂前用户需要注意的最重要的知识点有两个,第一个是掌握私钥。第二个是做好重防保护。

不过我们还是要面对现实,比特币确实很难用,对很多用户来说,可能真的搞不清楚私钥是个啥玩意。第一推荐真的自己去搞清楚来,如果实在是搞不清楚,那就存放在讲信用的交易所吧。

分裂后,用户如何领取分裂币呢?

领取分裂币的过程其实非常简单,只要用户将私钥导入到分裂币钱包,就完成了领取。

分裂后,第一步需要做的就是确认你有多少分裂币。这个一般使用区块链浏览器就可以查询的到。一般一个区块链币诞生后,一定会有一个区块链浏览器的,你只需要将你分裂前的收币地址复制到区块链浏览器去查看一下,就可以知道自己有多少分裂币了。

现在Bitcoin abc是有区块浏览器的

https://bch.btc.com


Bitcoin sv暂时还没有找到可用的区块浏览器。

第二步是安装分裂后的钱包。分裂后,去下载最新的钱包。一般来说下载一个开发者做的完整节点钱包是最为安全的。但因为要下载整个区块链,所以也是最麻烦的。只要你知道如何导出和导入私钥,使用SPV轻钱包也是一样的,安全性上也是足够的。

bitcoin abc在这里下载钱包:

https://download.bitcoinabc.org/0.18.4/


bitcoin sv在这里下载钱包,目前没有windows版本的

https://github.com/bitcoin-sv/bitcoin-sv/releases


鉴于目前生态比较混乱,不建议使用轻钱包。   

第三步就是导入私钥进钱包。

如果用户使用的是完整节点做钱包,比特币都保护在wallet.dat文件里。当分裂后,用户只需要重新下载分裂币的完整节点钱包,并且将wallet.dat文件导入进去就可以完成分裂币的领取了。

如果用户使用的是轻钱包,则需要你想办法将原来的私钥明文导出,并导入到分裂币的轻钱包中。但鉴于目前生态比较混乱,不建议使用轻钱包。   

请注意,上述领取分裂币的过程根本就没有发生任何的发币过程。


第3章 用户主动设计防重放保护


1.在分裂前,请将自己的币存在自己控制私钥的地址上。

2.为了保险起见,建议一定要存一个只有小余额(比如0.01BCH)的地址,这个地址里的币就是用来测试用的。

3.分裂后,下载新的分裂后的两个BCH钱包,将私钥导入到BCH钱包。

4.分裂后,等一天,到矿池(如果交易所提供提现,就从交易所买)买0.011BCH-abc,和0.012BCH-sv,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

这一步需要强调一下,为什么要等一天?因为比特币的区块奖励成熟度是100个区块,即比特币挖矿的Coinbase奖励在100个区块后才能花。这里说的从交易所里买币,最根本有效的应该是从矿池买分裂后100个区块的发出来的coinbase币。因为分裂后的coinbase币绝对是只可能在一条链上有效,在另一条链上是无效的。但为什么我们觉得从交易所买币也可能有用呢?是因为绝大多数交易所都会做好币的防重放保护,否则他们不敢打开提现功能。

5.然后你将你的钱包同步区块,你就会发现,在BCH-abc钱包只能收到0.011BCH,而BCH-sv钱包只能收到0.012BCH。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,就不可能被重放了。

6.将你污染的币,全部(注意一定是全部)发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BCH的那个钱包来完成测试。然后再将你的大额钱包做分离。

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK。 查看全部
Bitcoin-Gold-Fork-How-to-double-Bitcoin.jpg


第0章 引言


即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。


第1章 重放攻击原理


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

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

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

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

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

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

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

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


第2章 领取分裂币


BCH分裂前用户需要注意的最重要的知识点有两个,第一个是掌握私钥。第二个是做好重防保护。

不过我们还是要面对现实,比特币确实很难用,对很多用户来说,可能真的搞不清楚私钥是个啥玩意。第一推荐真的自己去搞清楚来,如果实在是搞不清楚,那就存放在讲信用的交易所吧。

分裂后,用户如何领取分裂币呢?

领取分裂币的过程其实非常简单,只要用户将私钥导入到分裂币钱包,就完成了领取。

分裂后,第一步需要做的就是确认你有多少分裂币。这个一般使用区块链浏览器就可以查询的到。一般一个区块链币诞生后,一定会有一个区块链浏览器的,你只需要将你分裂前的收币地址复制到区块链浏览器去查看一下,就可以知道自己有多少分裂币了。

现在Bitcoin abc是有区块浏览器的


https://bch.btc.com



Bitcoin sv暂时还没有找到可用的区块浏览器。

第二步是安装分裂后的钱包。分裂后,去下载最新的钱包。一般来说下载一个开发者做的完整节点钱包是最为安全的。但因为要下载整个区块链,所以也是最麻烦的。只要你知道如何导出和导入私钥,使用SPV轻钱包也是一样的,安全性上也是足够的。

bitcoin abc在这里下载钱包:


https://download.bitcoinabc.org/0.18.4/



bitcoin sv在这里下载钱包,目前没有windows版本的


https://github.com/bitcoin-sv/bitcoin-sv/releases



鉴于目前生态比较混乱,不建议使用轻钱包。   

第三步就是导入私钥进钱包。

如果用户使用的是完整节点做钱包,比特币都保护在wallet.dat文件里。当分裂后,用户只需要重新下载分裂币的完整节点钱包,并且将wallet.dat文件导入进去就可以完成分裂币的领取了。

如果用户使用的是轻钱包,则需要你想办法将原来的私钥明文导出,并导入到分裂币的轻钱包中。但鉴于目前生态比较混乱,不建议使用轻钱包。   

请注意,上述领取分裂币的过程根本就没有发生任何的发币过程。


第3章 用户主动设计防重放保护


1.在分裂前,请将自己的币存在自己控制私钥的地址上。

2.为了保险起见,建议一定要存一个只有小余额(比如0.01BCH)的地址,这个地址里的币就是用来测试用的。

3.分裂后,下载新的分裂后的两个BCH钱包,将私钥导入到BCH钱包。

4.分裂后,等一天,到矿池(如果交易所提供提现,就从交易所买)买0.011BCH-abc,和0.012BCH-sv,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

这一步需要强调一下,为什么要等一天?因为比特币的区块奖励成熟度是100个区块,即比特币挖矿的Coinbase奖励在100个区块后才能花。这里说的从交易所里买币,最根本有效的应该是从矿池买分裂后100个区块的发出来的coinbase币。因为分裂后的coinbase币绝对是只可能在一条链上有效,在另一条链上是无效的。但为什么我们觉得从交易所买币也可能有用呢?是因为绝大多数交易所都会做好币的防重放保护,否则他们不敢打开提现功能。

5.然后你将你的钱包同步区块,你就会发现,在BCH-abc钱包只能收到0.011BCH,而BCH-sv钱包只能收到0.012BCH。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,就不可能被重放了。

6.将你污染的币,全部(注意一定是全部)发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BCH的那个钱包来完成测试。然后再将你的大额钱包做分离。

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK。

听说1W个BCH不安全?好像是媒体过度解读了

攻略45qu 发表了文章 • 2018-11-18 17:44 • 来自相关话题

争吵、分歧、意见不合,

各种偏见交织在人生中的每一丝纤维之中。

————伍尔夫《到灯塔去》



BCH硬分叉引发的种种质疑和争议,不亚于币圈核爆炸。

11月16日凌晨,虽然BCH在第556767个区块高度完成硬分叉,分成了BCH ABC和BCH SV两条链,但这场世纪之战并没有因此落下帷幕,反而愈演愈烈。

今日,有媒体将矛头指向BCH存在重大安全威胁,这对于熊市本就如履薄冰的“观战者”们无异于又一颗深水炸弹。

根据PeckShield态势感知平台数据显示,BCH硬分叉后的当天,共有341068笔重放交易同时存在于ABC和SV两条链上,涉及10080个BCH。

更有国外用户爆料称,在交易过程中遭到了小额重放攻击损失。

BCH开发团队第一时间接受45区(ID:block-45)采访时否认这样的指控,称设计了input污染法和构造特有操作码交易两种方法来防止重放攻击,钱包和交易所安全交易可以选择input污染法。

这无疑是一场被专业名词占领的争论,令“观战者”更加如堕云雾。


被质疑的重放攻击是什么?

澄清中提到的input污染法又是什么?

BCH究竟安全吗?


1 质疑


重放攻击是黑客常用的一种攻击方式,在计算机世界,是指攻击者重复发送一个目的主机已经接受过的信息来达到欺骗目的。

我们可以这样生动理解。

想象一下,某个商店发放了限量的二维码优惠券,只要出示优惠券扫码,即能享受优惠。但这个商店却没有辨别某张券是否被扫过的能力,这时,是不是有人就会利用这个漏洞,重复使用同一张券?

现在,“这家商店”来到了区块链世界。

以BCH为例,即便分叉成两条链,但ABC链和SV链仍然共享着分叉时点以前的相同区块数据,这也是为什么分叉后,用户会凭空拥有了另一条链上的资产。

但同样的原因也会导致资产的凭空流失。质疑者们认为,如果在ABC链上发生了分叉前的老资产的转移,那么,这条交易信息有可能会被攻击者放到SV链上广播。

而分叉后的两条链又是完全独立的,因此SV链并不认为这笔交易已经被记录过,相反会认为完全合法,交易同样会被SV链的矿工打包到区块中,造成SV链上的资产损失。

如果客户端升级时加入了重放攻击保护,就可以避免这类情况发生,但此次BCH客户端升级,双方都没有加入重放攻击保护,这也正是安全漏洞之说的由来。


2 回应


面对这种质疑,今天,BCH社区开发团队对45区(ID:block-45)表示:“交易所和钱包并没有开放充提,所以交易的人是知道的,应该没有问题。大量的交易是因为分叉当晚CSW制造了粉尘交易。”

开发团队还表示:“可以肯定的是,并没有发生大量的重放现象,是极少见的,全世界都知道BCH在算力战,能够有这种行为的用户都可以确定币是安全的。”

而对于这次BCH硬分叉面临的重放攻击,该团队称仍然有防范措施,可以通过input污染法和构造特有操作码交易两种方法来防范。对于钱包和交易所来说,可以选择Input污染法。

一位圈内技术人士对45区(ID:block-45)解读,input污染法中的“input”指的是交易输入。一个BCH的交易结构中,有交易输入和交易输出。

“交易输入就是资金的来源,它引用的是之前已有交易的输出,而交易输出指的是资金的去向,即资金转给了谁。”他这样解释。

“如果矿工在验证交易时,发现交易输入所引用的交易是非法时,那么这条交易自然也会因资金“来路不正”而被认为是非法的。”

据45区(ID:block-45)了解,input污染法正是利用了这一点。

BCH分叉后,ABC和SV两条链新产生的区块数据独立,因此,ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在SV链上是非法的。

BCH社区开发团队表示,input污染法可以将本链上的coinbase交易划分出大量的小额交易输出,用户通过交易所或者钱包提取ABC链上的资产时,可以构造一笔交易,将新产生的小额输出也作为这笔交易输入,构造在其中。

如此一来,这条交易信息即便在SV链上重新广播时,矿工会因为存在的这笔非法小额输入而认为整笔交易非法,相当于这笔交易被污染了,“污染源”就是这些小额输入。

这样,也就完成了链上资产的永远分离,避免了资产损失。

在回应者眼中,此次安全质疑完全是媒体过度解读的结果。

BCH当下成为万众瞩目的聚焦中心,这场战役造成的波波“余震”恐怕还会继续。 查看全部
bch.jpg


争吵、分歧、意见不合,

各种偏见交织在人生中的每一丝纤维之中。

————伍尔夫《到灯塔去》




BCH硬分叉引发的种种质疑和争议,不亚于币圈核爆炸。

11月16日凌晨,虽然BCH在第556767个区块高度完成硬分叉,分成了BCH ABC和BCH SV两条链,但这场世纪之战并没有因此落下帷幕,反而愈演愈烈。

今日,有媒体将矛头指向BCH存在重大安全威胁,这对于熊市本就如履薄冰的“观战者”们无异于又一颗深水炸弹。

根据PeckShield态势感知平台数据显示,BCH硬分叉后的当天,共有341068笔重放交易同时存在于ABC和SV两条链上,涉及10080个BCH。

更有国外用户爆料称,在交易过程中遭到了小额重放攻击损失。

BCH开发团队第一时间接受45区(ID:block-45)采访时否认这样的指控,称设计了input污染法和构造特有操作码交易两种方法来防止重放攻击,钱包和交易所安全交易可以选择input污染法。

这无疑是一场被专业名词占领的争论,令“观战者”更加如堕云雾。


被质疑的重放攻击是什么?

澄清中提到的input污染法又是什么?

BCH究竟安全吗?



1 质疑


重放攻击是黑客常用的一种攻击方式,在计算机世界,是指攻击者重复发送一个目的主机已经接受过的信息来达到欺骗目的。

我们可以这样生动理解。

想象一下,某个商店发放了限量的二维码优惠券,只要出示优惠券扫码,即能享受优惠。但这个商店却没有辨别某张券是否被扫过的能力,这时,是不是有人就会利用这个漏洞,重复使用同一张券?

现在,“这家商店”来到了区块链世界。

以BCH为例,即便分叉成两条链,但ABC链和SV链仍然共享着分叉时点以前的相同区块数据,这也是为什么分叉后,用户会凭空拥有了另一条链上的资产。

但同样的原因也会导致资产的凭空流失。质疑者们认为,如果在ABC链上发生了分叉前的老资产的转移,那么,这条交易信息有可能会被攻击者放到SV链上广播。

而分叉后的两条链又是完全独立的,因此SV链并不认为这笔交易已经被记录过,相反会认为完全合法,交易同样会被SV链的矿工打包到区块中,造成SV链上的资产损失。

如果客户端升级时加入了重放攻击保护,就可以避免这类情况发生,但此次BCH客户端升级,双方都没有加入重放攻击保护,这也正是安全漏洞之说的由来。


2 回应


面对这种质疑,今天,BCH社区开发团队对45区(ID:block-45)表示:“交易所和钱包并没有开放充提,所以交易的人是知道的,应该没有问题。大量的交易是因为分叉当晚CSW制造了粉尘交易。”

开发团队还表示:“可以肯定的是,并没有发生大量的重放现象,是极少见的,全世界都知道BCH在算力战,能够有这种行为的用户都可以确定币是安全的。”

而对于这次BCH硬分叉面临的重放攻击,该团队称仍然有防范措施,可以通过input污染法和构造特有操作码交易两种方法来防范。对于钱包和交易所来说,可以选择Input污染法。

一位圈内技术人士对45区(ID:block-45)解读,input污染法中的“input”指的是交易输入。一个BCH的交易结构中,有交易输入和交易输出。

“交易输入就是资金的来源,它引用的是之前已有交易的输出,而交易输出指的是资金的去向,即资金转给了谁。”他这样解释。

“如果矿工在验证交易时,发现交易输入所引用的交易是非法时,那么这条交易自然也会因资金“来路不正”而被认为是非法的。”

据45区(ID:block-45)了解,input污染法正是利用了这一点。

BCH分叉后,ABC和SV两条链新产生的区块数据独立,因此,ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在SV链上是非法的。

BCH社区开发团队表示,input污染法可以将本链上的coinbase交易划分出大量的小额交易输出,用户通过交易所或者钱包提取ABC链上的资产时,可以构造一笔交易,将新产生的小额输出也作为这笔交易输入,构造在其中。

如此一来,这条交易信息即便在SV链上重新广播时,矿工会因为存在的这笔非法小额输入而认为整笔交易非法,相当于这笔交易被污染了,“污染源”就是这些小额输入。

这样,也就完成了链上资产的永远分离,避免了资产损失。

在回应者眼中,此次安全质疑完全是媒体过度解读的结果。

BCH当下成为万众瞩目的聚焦中心,这场战役造成的波波“余震”恐怕还会继续。

BCH 分叉后的钱包解决方案

攻略slowmist 发表了文章 • 2018-11-18 10:10 • 来自相关话题

昨天凌晨 BCH 分叉为两条链:BCH 和 BCHSV,我们持续做着相关风险监测,也注意到相关交易所/钱包暂停了充提。由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放攻击,造成相关对象的财产损失(依实际攻击场景而定)。

在无重放保护的情况下,分离这两种链上资产的方法,目前社区的解决方法主要有如下两个:


1. input 污染法


原理是引入了一笔非法交易的输出作为输入,那么这笔非法交易的输入将会使得这笔交易也会变为非法。

例如:

一笔交易广播到了 BCHSV 链中,引用了非法交易(在 BCH 合法,在 BCHSV 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCHSV 链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了 BCH 链中,引用了非法交易(在 BCHSV 合法,在 BCH 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCH 链承认,那么这笔交易就被重放免疫了。


2. 构造特有操作码交易


两条链的共识是有差别的,如果出构造一个本链合法,对方链上不合法的交易也可以进行分离,本次分叉双方的共识差别也体现在操作码上,可以在 BCH 链中,构造含有 OP_CHECKDATASIG 的输出,那么该笔交易在 BCH 上是合法的,但在 BCHSV 上是不合法的;同理在 BCHSV 链中,构造含有 OP_MUL 的输出,那么该笔交易在 BCHSV 上是合法的,但在 BCH 上是不合法的。

结合社区的方式及交易所相关工程实践经验,我们推荐使用第 1 种 input 污染法,但这需要有分叉后的 BCH 或 BCHSV 的 coinbase 交易(创币交易) UTXO 作为污染源,从这个 coinbase 交易中可以划分大量的小额 output,在用户提现时,可以将这些小额的 output 作为新交易的 input 之一来构建提现交易,从而较方便地完成分离。

另外,从工程实践上,我们也建议充提币的确认数可以适当提高,虽然目前来看两条分叉链未发生明显的攻击情况。

对于普通用户来说,等着先,不着急。


相关资料:

可行的钱包重放免疫实现方法:

https://bch.club/index.php?app=team&mod=Forum&act=detail&topic_id=685&team_id=1


哥白尼团队提供的开源工具,有效分离 BCH 和 BCHSV 两条链:

https://github.com/copernet/tools/tree/master/hardfork 查看全部
bch.jpg

昨天凌晨 BCH 分叉为两条链:BCH 和 BCHSV,我们持续做着相关风险监测,也注意到相关交易所/钱包暂停了充提。由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放攻击,造成相关对象的财产损失(依实际攻击场景而定)。

在无重放保护的情况下,分离这两种链上资产的方法,目前社区的解决方法主要有如下两个:


1. input 污染法


原理是引入了一笔非法交易的输出作为输入,那么这笔非法交易的输入将会使得这笔交易也会变为非法。

例如:

一笔交易广播到了 BCHSV 链中,引用了非法交易(在 BCH 合法,在 BCHSV 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCHSV 链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了 BCH 链中,引用了非法交易(在 BCHSV 合法,在 BCH 非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被 BCH 链承认,那么这笔交易就被重放免疫了。


2. 构造特有操作码交易


两条链的共识是有差别的,如果出构造一个本链合法,对方链上不合法的交易也可以进行分离,本次分叉双方的共识差别也体现在操作码上,可以在 BCH 链中,构造含有 OP_CHECKDATASIG 的输出,那么该笔交易在 BCH 上是合法的,但在 BCHSV 上是不合法的;同理在 BCHSV 链中,构造含有 OP_MUL 的输出,那么该笔交易在 BCHSV 上是合法的,但在 BCH 上是不合法的。

结合社区的方式及交易所相关工程实践经验,我们推荐使用第 1 种 input 污染法,但这需要有分叉后的 BCH 或 BCHSV 的 coinbase 交易(创币交易) UTXO 作为污染源,从这个 coinbase 交易中可以划分大量的小额 output,在用户提现时,可以将这些小额的 output 作为新交易的 input 之一来构建提现交易,从而较方便地完成分离。

另外,从工程实践上,我们也建议充提币的确认数可以适当提高,虽然目前来看两条分叉链未发生明显的攻击情况。

对于普通用户来说,等着先,不着急。


相关资料:

可行的钱包重放免疫实现方法:

https://bch.club/index.php?app=team&mod=Forum&act=detail&topic_id=685&team_id=1


哥白尼团队提供的开源工具,有效分离 BCH 和 BCHSV 两条链:

https://github.com/copernet/tools/tree/master/hardfork

BCH硬分叉背后:“重放攻击”下的用户自救指南

攻略secbit 发表了文章 • 2018-11-16 23:20 • 来自相关话题

11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。

在此次此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。


何谓“重放攻击”


传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程。

而在区块链领域,重放攻击(Replay Attacks)通常出现在区块链硬分叉的时候,指的是“一条链上的交易在另一条链上也往往是合法的”。

有一个例子可以简单的说明什么是区块链中的“重放攻击”: 

小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他。 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒。 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒, 这对于啤酒厂来说就是被重放攻击了,损失了无数啤酒。


就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,另外一条分叉出来的链又产生了BSV这一资产,也就是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都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。

 
应对:先分离 再交易


既然BCH在没有重放保护的前提下已经发生分叉,被重放无法避免,那么,为了避免受损失,交易所和用户都有必要在进行新的交易之前,对所持有的BCH ABC/BCH SV进行分离。

让我们回看一下BCH升级后的两个版本:bitcoin abc 0.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进行交易操作,应先进行分离再操作账户更为稳妥。

分离最简单有效的办法,就是在分裂点后100个区块,从矿池购买一丁点coinbase交易的UTXO,发到你的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。

分离两种资产后,新OPCode你就可以使用了,不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。

在此安比(SECBIT)实验室提醒广大BCH持有者和支持ABC/BSV的交易所,在分离你/你的用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode。 查看全部
Bitcoin-Replay-Attack.jpg

11月16日凌晨2:16分,BCH在第556767个块高度发生硬分叉,分叉大战落下帷幕,分成了BCH ABC和BCH SV两个阵营。

在此次此次硬分叉中,BCH ABC和BCH SV双方都没有进行“重放保护”。也就是说,此次分叉后,理论上,重放攻击将有可能导致任何一方发生共识崩塌和算力归零。


何谓“重放攻击”


传统计算机术语中,重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的数据包,来达到欺骗系统的目的。重放攻击在任何网络通讯过程中都可能发生,是计算机世界黑客常用的攻击方式之一。主要用于身份认证过程。

而在区块链领域,重放攻击(Replay Attacks)通常出现在区块链硬分叉的时候,指的是“一条链上的交易在另一条链上也往往是合法的”。

有一个例子可以简单的说明什么是区块链中的“重放攻击”: 


小A向某个不能有效识别付款(这里指不能判断是哪一笔付款)的啤酒厂买啤酒,当他把用支付宝成功付款的付款信息出示给销售员后, 销售员把啤酒给他。 然后小A又再把上次的付款信息出示给另一个销售员, 销售员又给他一份啤酒。 只要小A不断重复出示他的付款信息,就可以源源不断骗得啤酒, 这对于啤酒厂来说就是被重放攻击了,损失了无数啤酒。



就本次BCH硬分叉来说,BCH由一条链变成了两条链,在这两条链都得到支持并持续运营的情况下,另外一条分叉出来的链又产生了BSV这一资产,也就是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都有很好的经济量,而用户如果无法解决掉自己的操作被重放的可能,他想卖其中一个资产的同时保留另一个资产,要么自行进行分离,要么就只能在交易所的协助下才能实现了。

 
应对:先分离 再交易


既然BCH在没有重放保护的前提下已经发生分叉,被重放无法避免,那么,为了避免受损失,交易所和用户都有必要在进行新的交易之前,对所持有的BCH ABC/BCH SV进行分离。

让我们回看一下BCH升级后的两个版本:bitcoin abc 0.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进行交易操作,应先进行分离再操作账户更为稳妥。

分离最简单有效的办法,就是在分裂点后100个区块,从矿池购买一丁点coinbase交易的UTXO,发到你的BCH钱包里,然后将所有余额一次性转入一个新地址。只需要在一条链上这么做一次,就可以彻底分离出来了。

分离两种资产后,新OPCode你就可以使用了,不会出现因被重放而导致新OPCode在BCH链上有安全隐患的情况。

在此安比(SECBIT)实验室提醒广大BCH持有者和支持ABC/BSV的交易所,在分离你/你的用户的BSV之前,为避免重放造成损失,在交易中谨慎使用新的OPCode。

江卓尔:一文说透算力战本质及 BCH 算力大战可能结果

攻略chainnews 发表了文章 • 2018-11-15 12:06 • 来自相关话题

一、为什么算力能成为比特币的最高仲裁机制?


答案很简单:因为算力能杀死一条链。

这是一条最底层的规则:生存是最终的辩论方式,是决定对错的最高依据。这条规则有很多种表述方法,例如「胜王败寇」, 「真理只在大炮的射程之内」,「暴力是决定所有规则的元规则」。

为什么无神论(科学论)是对的?是因为无神论能辩过有神论吗?当然不是,无神论和有神论两边的逻辑基础都不一致,辩起来就是鸡同鸭讲。无神论是对的,不是因为无神论更「有理」,而是因为无神论能造出枪。

我能造出枪消灭你,你都不存在了,你还有什么资格讨论对错吗?

所以,生存是最终的辩论方式,是决定对错的最高依据。为什么我支持「演化论」而不是「稳定论」?因为「演化论」以适应市场需求,增加用户数为唯一目的,而「稳定论」不以此为最高目的。

当然,「稳定论」会认为,我的链协议稳定,所以用户会选择我,但如果不是呢?如果两者矛盾呢?
如果根据市场需要,增加像 DSV 这样的功能,就是能比稳定时,吸引更多用户,首先达到 50 亿的最终目标呢?那么谁是对的,谁是错的?

所以,「演化论」是逻辑自洽的。极端锁死和过度修改都错,「演化论」更有可能在「稳定」和「修改」中找到最佳的位置,并获取最多的用户。

而「稳定论」包含了一个假设:稳定是最好的增加用户的方式。这个假设从商业上来看几乎不可能成立:商业上没有躺赢,中本聪并没有给我们设计一条成为世界货币的躺赢之路。

有人可能会认为:「产品才需要吸引更多用户,而货币不能这样设计」,「BCH 应该好好在货币上发展,而不应该搞各种新功能和第二层网络」。这不对,货币也是产品的一种,美元一样要面临欧元、人民币、日元的竞争,为什么美国政府要搞「石油美元」 (国际石油贸易以美元结算)?还不是为了增加美元的「应用」和「用户数」。

而在加密数字货币领域,这种产品竞争就更剧烈了:任何一种币,都必须面临大量币(产品)的竞争。


二、如何通过算力杀死一条链?


回到算力战上,算力战对大部分人来说,是从未用过的屠龙之技,所以各种文章和推测的错误很多。 莱比特矿池(BTC.TOP)是全网唯一一个有过大规模算力战经验的矿池,任何与本文不符的表述(包括 CSW 的表述)均为错误。

大家都知道「51% 算力攻击」:

1、攻击者通过优势算力,挖掘一条比原链更长的攻击链。
2、攻击链向全网广播后,节点按规则,将接受更长的链,丢弃原链。

下图中的直线链(上面的蓝色链和下面的红色链),表示被中立节点接受的主链。






PS:这里的「更长的链」准确地说是「累计难度更大的链」,例如节点会接受 2 个难度 10 的块,而抛弃掉 3 个难度 5 的块,因为 10+10=20>15=5+5+5。为了叙述方便,后文均假设每个块的难度相同 。

通过 51% 攻击,可以完成各种目的,例如:

1、在 Tx1 (交易 1)确认后,撤销掉 Tx1,让另一个冲突的 Tx2 (交易 2)生效。

例如 Alice 用 Tx1 发了 1 个 BTC 给 Bob,向 Bob 交换 100 个 LTC,在收到 Bob 的 100 个 LTC 后,再用一个发这 1BTC 给自己的 Tx2,替换掉 Tx1,把付给 Bob 的 1BTC 拿回来。

2、用自己挖的块(红色的块),孤立掉其它矿工挖的块(蓝色的块),让其它矿工损失挖矿产出。

在 51% 算力攻击的基础上,可以进行「51% 空块攻击」:攻击者只挖空块(不包括任何交易的块),并不接受(孤立掉)任何其它矿工挖的,正常打包交易的块,让这条链瘫痪掉,任何人都无法正常交易。

并且,由于矿工在这条链上挖到的块都被孤立掉,没有挖矿收入,因此也会逐渐停止挖矿,最后这条链就死了。







三、如何防御「51% 空块攻击」?


防御者需要不承认攻击链,在原来被覆盖的原链之后,调动更多的算力,挖一条比攻击者更长的链。






在实际的攻防中,双方将会不断延长自己的链,并有可能来回重组覆盖。也就是说,一个只按默认规则,接受最长链的中立节点,可能在攻击链较长时,接受攻击链,然后在防御链较长时,放弃攻击链,接受防御链。


四、攻防双方成本分析


胜利的一方,只要比失败的一方多挖一个块就可以。

1、如果防御者放弃了,那攻击者也不用再继续花成本挖块,只要简单停止挖矿即可,这条链就死了。之后攻击者如果发现防御者又开始挖块,那攻击者也只要继续比防御者多挖一个块就可以。

由于这条链已经死了,所以攻防双方挖的所有块就都作废了,双方都将损失所有挖矿成本。

2、如果攻击者放弃了,那情况有些不同,攻击者还是将损失所有挖出的块(和成本),但由于链还存活,所以防御者可以获得之前所挖的块,作为收入。






也就是说,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。


五、攻防双方算力分析


11 月 15 日,BCH 的 ABC 客户端,将硬分叉升级至 0.18.2 版,比特大陆支持 ABC 的此次升级。

而 CSW 所支持的 BSV 客户端,将同时分叉出链 BSV 链,并声称将对 ABC 0.18.2 链(升级链)进行算力战攻击,杀死 ABC 升级链。

5.1、CSW 方的算力:

支持 CSW 的矿池(Coingeek,svpool,BMG 等)目前展示出来的算力为 2000-3000P 左右,CSW 声称还有隐藏算力,因此可认为 CSW 至少有 3000P 自有算力。

CSW 还可以通过租赁方式,控制更多算力,例如和矿池、大矿场谈算力租赁,或者从 nicehash 等算力平台上租赁算力,只要愿意给出溢价(例如+20% 挖矿收益),CSW 自有+租赁算力到 1 万 P,难度不大。

5.2、比特大陆方的算力:

比特大陆旗下的矿池(BTC.com 和 Antpool)合计拥有约 15000P 的算力,再加上比特大陆参股的 ViaBTC 矿池,共计拥有约 20000P 的算力。

由于 BTC 和 BCH 均使用 sha256 算法挖矿,所以矿池在技术上,可以在 BTC 和 BCH 上来回秒切算力。只要正常给矿工按算力付挖矿产出的 BTC,矿工实际上并不关心实际挖的是什么币。矿工甚至不知道自己挖的是什么币,只是解答矿池下发的计算任务。因此比特大陆如果愿意,可以使用所有 20000 万 P 的 BTC 算力,来 BCH 上做防御,之前出现各种传闻,例如比特大陆在新疆部署 9 万台矿机用于算力战等,均为无意义的谣言。比特大陆使用 BTC 算力进行算力战,符合「生存是最终的辩论方式」的算力战原则。

由于比特大陆正处于上市中的关键阶段,CSW 威胁称,若比特大陆使用 BTC 算力来进行算力战,他将通过诉讼方式攻击比特大陆。但这一做法意义不大,因为比特大陆基本上不需要使用全部 20000P 算力应战,若使用部分算力,比特大陆可声明使用自有算力(或合作伙伴算力),其余(正常获得支付 BTC)的矿工既没有动机起诉,也难以确认自己挖的是什么币。

5.3、双方的资金:

虽然比特大陆方算力基本可以肯定比 CSW 多,但算力战的胜负,不仅仅取决于算力。若 CSW 如之前所声称,全力开战,那每天将烧掉几千万,甚至上亿的成本,那算力战的瓶颈,将不是算力,而是双方愿意烧掉的资金。

在资金方面,CSW 声称自己是亿万富翁,有豪宅名车,并得到 Calvin Ayre (博彩业大佬)的鼎力支持。比特大陆则是估值 150 亿美元,正在上市中的庞然大物,并且持有 100 多万个 BCH,在 BCH 上有足够的利益。双方都是重量级选手,至于双方愿意烧掉多少资金,取决于双方的意志,我们无法猜测。


六、攻防双方烧钱比例分析


BCH 的正常算力取决于:BTC 的总算力 & BCH/BTC 的汇率。例如 11 月 2 日 BTC 的总算力 51370P,BCH/BTC 汇率 =0.067,则 BCH 正常算力应为 51370*0.067=3441P。若 BCH 实际算力高于 3441P,则每台矿机挖矿 BCH 产出将低于 BTC,矿工将从 BCH 迁移到 BTC,直到两边挖矿收益相同,反之亦然。

CSW 投入的算力多少,将决定双方的烧钱比例。

6.1、如果 CSW 投入 7000P 算力(两倍 BCH 正常算力)

如第四章中所述,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。因此,若比特大陆也投入 7000P 算力进行防御,并最终获胜,那可以得到 BCH 期间挖出的 BCH 作为补偿(相当于 3500P 算力的成本)。

也就是说,在算力战烧钱时,比特大陆投入 7000P 算力防御,但其中只有 3500P 需要烧钱,剩下 3500P 将获得正常挖矿产出(虽然暂时无法兑现),而 CSW 的 7000P 算力全部都需要烧钱。

因此,CSW 投入的算力越少,比特大陆的「防御抵扣优势」越大,例如各自投入 5000P 时,比特大陆 1500P 烧钱 vs CSW 5000P 烧钱,因此比特大陆坚持到底的决心也必然越大。

6.2、如果 CSW 投入 7000~14000P 算力

此时,决定胜负的将主要不是双方的算力,而是双方的烧钱意志。例如 CSW 投入 10000P vs 比特大陆 10000P,则比特大陆「防御抵扣优势」将不明显,抵扣后将变成 CSW 10000P 烧钱 vs 比特大陆 6500P 烧钱。

并且在双方抽调 BTC 大量算力(假设共 20000P)到 BCH 上打算力战后,将大幅提高每 P 算力的租赁成本:

a、BTC 交易打包手续费将大幅提高

由于 BTC 的区块大小被 Core 锁死为 1M,因此:算力减少 40% → 出块速度减少 40% → 每 10 分钟 1 个 1M 区块变成每 10 分钟 0.6 个区块 =0.6M 区块 → BTC 和 2017 年底一样,发生超级大拥堵 → BTC 交易打包手续费将提高到 20-30% → 每 P 算力使用成本提高 20-30%

b、BTC 每 P 算力产出将大幅提高

若算力战短时间无法结束,那 BTC 经过难度调整后,每 P 算力产出将提高 40%,进一步提高每 P 算力使用成本,降低防御方的抵扣优势。

目前 20000P 算力日产出 3000 万元,算力战后期成本可能上升到 5000 万元 / 日 或更多,若 CSW 按照之前声称,全力进行算力战,那算力战将以极快的速度烧钱,并不会持续很长时间。

6.3、总结:

算力战的胜负,取决于算力和资金的综合影响。CSW 的算力越少,需要的资金优势越大;算力越大,需要的资金优势越小。如果 CSW 的资金优势极大,则哪怕 4000P 的算力,也可以打赢算力战,迫使比特大陆放弃防御。


七、算力战的正面战 & 游击战


从第 2 到 6 章,阐述了「以杀死一条链为目的的算力战」 :从分叉点开始,攻防双方持续地在自己链上挖块,直到一方放弃自己的整条链为止。

这种「算力正面战」类似国家之间进行的,以灭国为目的的正面战争,正面战争耗资巨大,持续时间短,对非军事目标破坏小。






以之相对应的,是「算力游击战」:攻击方由于力量或意志不够,并不进行正面对抗,不是持续地挖攻击链,而是分散、偶尔地攻击,因此攻击成本低,但持续时间长。每一次攻击链在短暂地覆盖掉原链后,都必然再被防御方覆盖回去,只能对链的稳定性造成影响,但不能杀死一条链。

防御方面对「算力游击战」的防御成本为 0,由于攻击方不会持续挖矿,因此防御方只要再继续正常挖几个块,就可以把攻击链覆盖掉,不需要付出额外的防御成本。唯一的损失只是区块链不稳定:这段时间内,链上无法打包交易,被攻击链覆盖区块的交易,也会暂时变成未确认交易。

「正面战」和「游击战」的差别总结如下:






如本文的「上」和「中」所述,算力投票(算力战)的目的是作为最终仲裁方式,在双方目标一致,只是手段不一致的情况下,避免不必要的分叉。只有「正面战」才有「消灭一条链避免分叉」的作用,而「游击战」没有这种作用,因此「游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。


八、算力战的结果


算力战的可能演化路径,如下图:






情况 A:比特大陆防御成功,CSW 攻击失败

CSW 在宣传中一直声称要「打算力战」,「没有分裂」。在 CSW 算力战失败后,若 CSW 履行承诺,放弃 BSV 链,则算力战结束,ABC 链成为 BCH,BSV 链死亡【流程图,结果 2】

但后来 CSW 又声称「要打两年」,「要让 BCH 没有任何交易」(见 Roger Ver 宣布旗下 Bitcoin.com 支持 ABC 后,CSW 给 Roger Ver 的信)






如果 CSW 在正面战失败后(甚至不愿烧钱打正面战),继续打不能杀死一条链,不能防止分裂的「游击战」,同时 BSV 链继续挖块,形成事实上长时间并存的,ABC 和 BSV 两条分裂链【流程图,结果 1】,那 CSW 将违背自己「不分裂」的承诺,被社区大部分人所抛弃。

CSW 长期进行游击战,将导致 BCH 链长时间处于不稳定状态,交易所可能长时间不恢复 BCH 的充提,商家可能长时间不愿接受 BCH,也就是 CSW 信中所称的「2 years of no trade (两年没有任何交易)」, 「welcome to bankruptcy (欢迎面对破产)」。这不符合 BCH 社区所有人的利益。

如果 BCH 社区无法阻止 CSW 一意孤行,长期进行游击战,那么:

a、BCH 上的矿池需要建立互相合作的自动防御系统,在 CSW 的算力正常挖矿时,接受其挖出的块;在检查到孤立原链区块的攻击链时,不接受攻击链,而是在原链区块之后,自动调集算力挖矿,直到覆盖掉 CSW 的攻击链为止。

b、但在防御算力覆盖掉攻击链的这段时间内(可能几分钟到几个小时,视攻击链的长度,攻击链越长,需要的恢复时间越久),BCH 链将暂时不能确认交易,用户也将看到最近确认的交易,重新变成未确认,还是给链造成了不稳定。

因此,最好的方法是 ABC 开发组发布临时战时补丁,最多只接受高度 =1 的重组链(常见的孤立块),不接受任何高度 >=2 的重组链,这样攻击方最多只能孤立最近 1 个区块(回滚 1 确认的交易),恢复时间也很短,不会对交易所和商家造成威胁。

但此补丁造成的后果是,在使用补丁的时间内矿池必须提高警惕,避免因为某些网络原因,产生高度 >=2 的连续孤立块,因为这样会导致不同矿池的永久性分叉。若意外发生了这样的分叉,矿池必须立即互相协调,放弃较短的分叉链,统一到最长的链上。

情况 B:CSW 攻击成功,比特大陆放弃防御

如 6.2 中分析,若 CSW 烧钱超过比特大陆的承受能力,则比特大陆将被迫放弃防御。ABC 开发组若放弃 ABC 链接受 BSV 链,或者不接受 BSV 链但退出 BCH 开发,则算力战结束,ABC 链死亡(无人继续挖矿),BSV 链成为 BCH【流程图,结果 3】。

ABC 开发组也可能不放弃,声称被攻击,原挖矿算法不安全,将挖矿算法从 POW 修改为 POW+POS。虽然修改挖矿算法将导致巨大的争议,但从交易所的实际表态来看,由于 BitcoinCash.org 域名和 ABC 开发组均支持 ABC 链,故交易所将大概率给 ABC 链保留 BCH 的交易对,给 BSV 链新增 BSV 的交易对(和之前诸多 BTC 分叉币一样的流程)【流程图,结果 4】。

这是最差的一种情况,BCH 社区将发生巨大的分裂,BCH 将受到巨大削弱,BSV 将继承 BCH 放弃的目标——挑战 BTC,成为真正的比特币。






不管最后的结果如何,本次算力战,都将展示算力的作用和威力,显著提高算力在整个生态中的地位,并为算力作为比特币分歧的最终裁决手段,做好铺垫。BTC,BCH,BSV 等诸多同算法分裂币种,最后可能都将被统一。


九、算力战期间用户建议


1、若你不打算在算力战期间买卖 BCH,那简单保管好你的私钥即可。

2、若你准备在算力战期间买卖 BCH,请仔细阅读本文关于算力战攻防的原理和流程说明,并忽略任何与本文相抵触的表述。算力战期间 ABC 和 BSV 的价格变化,请咨询上帝(我的一贯观点:币价长期问用户数,短期问上帝)。

3、CSW 一直在混淆「一个交易在两条链上都能打包」和「只存在一条链,没有分裂」这两件没有关系的事情(可能是为了 CSW 的支持者反对 BCH 分裂成两个币?)。算力战一开始,ABC 和 BSV 链只要有最轻微的一点不一致(例如 ABC 链打包了一个带 DSV 操作码的交易),那 ABC 和 BSV 链在物理上,就分叉成了两条链,不存在什么「只存在一条链」,CSW 最多只可能做到杀死 ABC 链,让两条链只有一条活下来。

在 ABC 和 BSV 链分裂后,由于 CSW 不在 BSV 链上加重放保护,故将发生之前 ETH 和 ETC 分叉时类似的情况(发送 ETH 时,一起把同地址的 ETC 发了出去)。你在发送 ABC 币时,由于你发 ABC 的这个交易在 BSV 链上也能打包,所以很可能将 BSV 币也一起发了出去。若你不懂得做分离,需将币发到 BCH 和 BSV 充值地址一样的交易所,以免丢币。

4、在算力战前将币充到(承诺给两种币的)交易所,好处是算力战期间还可以交易,并且如果分叉,交易所会帮你做好两种币分离。坏处是什么时候可以充提,得完全听交易所。如果算力战持续很长时间(尤其如果 CSW 长时间打游击战),交易所可能会很久都不开放充提。另外,任何交易所都有倒闭的风险。

5、把币留在链上自己控制私钥,坏处是算力战期间不能交易,好处是控制自己的币,可以在算力战后,选最先恢复充提的交易所交易。两种做法各有利弊,根据自己的情况和需要,自行选择。


九、我和莱比特矿池(BTC.TOP)的态度


我支持算力投票(算力战),认为 BCH 应该以获取用户为最高目的,快速演化,并通过算力投票(算力战)的方式,消除演化中的分歧,防止不必要的分叉。

莱比特矿池(BTC.TOP)的算力将支持愿意投入更多算力和资金的一方,并帮助这一方,尽快结束算力战混乱的局面,恢复 BCH 区块链的秩序。


十、总结


1、生存是最终的辩论方式,是决定对错的最高依据。算力能杀死一条链,所以算力能成为比特币的最高仲裁机制。

2、通过「51% 空块攻击」可以阻止一条链上打包确认任何交易,并且矿工无法挖到任何块后,也会逐渐停止挖矿,最后这条链就死了。

3、防御「51% 空块攻击」需要坚守原链,调动更多的算力,挖一条比攻击者更长的链,反过来把攻击链覆盖回去。

4、防御者有挖矿产出作为「防御抵扣优势」,攻击者的算力越大,则防御者的抵扣优势越小,攻击者需要的资金优势越小。反过来,攻击者的资金优势越大,则需要的算力越小。

5、比特大陆可调用 BTC 的算力用于 BCH 算力战,因此算力多于 CSW。CSW 必须有资金优势和更坚强的烧钱意志,才能胜利。

6、「算力游击战」不能达到算力战的最终目的:杀死一条链。「算力游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。

7、算力战后,若失败的一方认输,则算力战结束,存活链成为 BCH。若失败的一方不认输(CSW 继续打游击战,或者 ABC 改 POW+POS 算法),则 BCH 分裂为 BCH 和 BSV 两个币。

8、如果 CSW 坚持进行「算力游击战」,则需要 ABC 开发组打补丁、矿池、交易所配合,消除影响。
 
 
作者:江卓尔,莱比特矿池(BTC.TOP) CEO 查看全部

exchanges-experience-difficulties-during-bitcoin-cash-distribution.jpg


一、为什么算力能成为比特币的最高仲裁机制?


答案很简单:因为算力能杀死一条链。

这是一条最底层的规则:生存是最终的辩论方式,是决定对错的最高依据。这条规则有很多种表述方法,例如「胜王败寇」, 「真理只在大炮的射程之内」,「暴力是决定所有规则的元规则」。

为什么无神论(科学论)是对的?是因为无神论能辩过有神论吗?当然不是,无神论和有神论两边的逻辑基础都不一致,辩起来就是鸡同鸭讲。无神论是对的,不是因为无神论更「有理」,而是因为无神论能造出枪。

我能造出枪消灭你,你都不存在了,你还有什么资格讨论对错吗?

所以,生存是最终的辩论方式,是决定对错的最高依据。为什么我支持「演化论」而不是「稳定论」?因为「演化论」以适应市场需求,增加用户数为唯一目的,而「稳定论」不以此为最高目的。

当然,「稳定论」会认为,我的链协议稳定,所以用户会选择我,但如果不是呢?如果两者矛盾呢?
如果根据市场需要,增加像 DSV 这样的功能,就是能比稳定时,吸引更多用户,首先达到 50 亿的最终目标呢?那么谁是对的,谁是错的?

所以,「演化论」是逻辑自洽的。极端锁死和过度修改都错,「演化论」更有可能在「稳定」和「修改」中找到最佳的位置,并获取最多的用户。

而「稳定论」包含了一个假设:稳定是最好的增加用户的方式。这个假设从商业上来看几乎不可能成立:商业上没有躺赢,中本聪并没有给我们设计一条成为世界货币的躺赢之路。

有人可能会认为:「产品才需要吸引更多用户,而货币不能这样设计」,「BCH 应该好好在货币上发展,而不应该搞各种新功能和第二层网络」。这不对,货币也是产品的一种,美元一样要面临欧元、人民币、日元的竞争,为什么美国政府要搞「石油美元」 (国际石油贸易以美元结算)?还不是为了增加美元的「应用」和「用户数」。

而在加密数字货币领域,这种产品竞争就更剧烈了:任何一种币,都必须面临大量币(产品)的竞争。


二、如何通过算力杀死一条链?


回到算力战上,算力战对大部分人来说,是从未用过的屠龙之技,所以各种文章和推测的错误很多。 莱比特矿池(BTC.TOP)是全网唯一一个有过大规模算力战经验的矿池,任何与本文不符的表述(包括 CSW 的表述)均为错误。

大家都知道「51% 算力攻击」:

1、攻击者通过优势算力,挖掘一条比原链更长的攻击链。
2、攻击链向全网广播后,节点按规则,将接受更长的链,丢弃原链。

下图中的直线链(上面的蓝色链和下面的红色链),表示被中立节点接受的主链。

3dd545c6-3a16-5832-b77f-137e0c565dc7.jpg


PS:这里的「更长的链」准确地说是「累计难度更大的链」,例如节点会接受 2 个难度 10 的块,而抛弃掉 3 个难度 5 的块,因为 10+10=20>15=5+5+5。为了叙述方便,后文均假设每个块的难度相同 。

通过 51% 攻击,可以完成各种目的,例如:

1、在 Tx1 (交易 1)确认后,撤销掉 Tx1,让另一个冲突的 Tx2 (交易 2)生效。

例如 Alice 用 Tx1 发了 1 个 BTC 给 Bob,向 Bob 交换 100 个 LTC,在收到 Bob 的 100 个 LTC 后,再用一个发这 1BTC 给自己的 Tx2,替换掉 Tx1,把付给 Bob 的 1BTC 拿回来。

2、用自己挖的块(红色的块),孤立掉其它矿工挖的块(蓝色的块),让其它矿工损失挖矿产出。

在 51% 算力攻击的基础上,可以进行「51% 空块攻击」:攻击者只挖空块(不包括任何交易的块),并不接受(孤立掉)任何其它矿工挖的,正常打包交易的块,让这条链瘫痪掉,任何人都无法正常交易。

并且,由于矿工在这条链上挖到的块都被孤立掉,没有挖矿收入,因此也会逐渐停止挖矿,最后这条链就死了。

e4dd21f5-c1fa-5676-bc21-8d2e3f828ccd.jpg



三、如何防御「51% 空块攻击」?


防御者需要不承认攻击链,在原来被覆盖的原链之后,调动更多的算力,挖一条比攻击者更长的链。

2dd1786c-3054-5c78-9151-f7c865ef7ab2.jpg


在实际的攻防中,双方将会不断延长自己的链,并有可能来回重组覆盖。也就是说,一个只按默认规则,接受最长链的中立节点,可能在攻击链较长时,接受攻击链,然后在防御链较长时,放弃攻击链,接受防御链。


四、攻防双方成本分析


胜利的一方,只要比失败的一方多挖一个块就可以。

1、如果防御者放弃了,那攻击者也不用再继续花成本挖块,只要简单停止挖矿即可,这条链就死了。之后攻击者如果发现防御者又开始挖块,那攻击者也只要继续比防御者多挖一个块就可以。

由于这条链已经死了,所以攻防双方挖的所有块就都作废了,双方都将损失所有挖矿成本。

2、如果攻击者放弃了,那情况有些不同,攻击者还是将损失所有挖出的块(和成本),但由于链还存活,所以防御者可以获得之前所挖的块,作为收入。

f10311ce-819c-5840-b5a4-8b66128f3aea.jpg


也就是说,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。


五、攻防双方算力分析


11 月 15 日,BCH 的 ABC 客户端,将硬分叉升级至 0.18.2 版,比特大陆支持 ABC 的此次升级。

而 CSW 所支持的 BSV 客户端,将同时分叉出链 BSV 链,并声称将对 ABC 0.18.2 链(升级链)进行算力战攻击,杀死 ABC 升级链。

5.1、CSW 方的算力:

支持 CSW 的矿池(Coingeek,svpool,BMG 等)目前展示出来的算力为 2000-3000P 左右,CSW 声称还有隐藏算力,因此可认为 CSW 至少有 3000P 自有算力。

CSW 还可以通过租赁方式,控制更多算力,例如和矿池、大矿场谈算力租赁,或者从 nicehash 等算力平台上租赁算力,只要愿意给出溢价(例如+20% 挖矿收益),CSW 自有+租赁算力到 1 万 P,难度不大。

5.2、比特大陆方的算力:

比特大陆旗下的矿池(BTC.com 和 Antpool)合计拥有约 15000P 的算力,再加上比特大陆参股的 ViaBTC 矿池,共计拥有约 20000P 的算力。

由于 BTC 和 BCH 均使用 sha256 算法挖矿,所以矿池在技术上,可以在 BTC 和 BCH 上来回秒切算力。只要正常给矿工按算力付挖矿产出的 BTC,矿工实际上并不关心实际挖的是什么币。矿工甚至不知道自己挖的是什么币,只是解答矿池下发的计算任务。因此比特大陆如果愿意,可以使用所有 20000 万 P 的 BTC 算力,来 BCH 上做防御,之前出现各种传闻,例如比特大陆在新疆部署 9 万台矿机用于算力战等,均为无意义的谣言。比特大陆使用 BTC 算力进行算力战,符合「生存是最终的辩论方式」的算力战原则。

由于比特大陆正处于上市中的关键阶段,CSW 威胁称,若比特大陆使用 BTC 算力来进行算力战,他将通过诉讼方式攻击比特大陆。但这一做法意义不大,因为比特大陆基本上不需要使用全部 20000P 算力应战,若使用部分算力,比特大陆可声明使用自有算力(或合作伙伴算力),其余(正常获得支付 BTC)的矿工既没有动机起诉,也难以确认自己挖的是什么币。

5.3、双方的资金:

虽然比特大陆方算力基本可以肯定比 CSW 多,但算力战的胜负,不仅仅取决于算力。若 CSW 如之前所声称,全力开战,那每天将烧掉几千万,甚至上亿的成本,那算力战的瓶颈,将不是算力,而是双方愿意烧掉的资金。

在资金方面,CSW 声称自己是亿万富翁,有豪宅名车,并得到 Calvin Ayre (博彩业大佬)的鼎力支持。比特大陆则是估值 150 亿美元,正在上市中的庞然大物,并且持有 100 多万个 BCH,在 BCH 上有足够的利益。双方都是重量级选手,至于双方愿意烧掉多少资金,取决于双方的意志,我们无法猜测。


六、攻防双方烧钱比例分析


BCH 的正常算力取决于:BTC 的总算力 & BCH/BTC 的汇率。例如 11 月 2 日 BTC 的总算力 51370P,BCH/BTC 汇率 =0.067,则 BCH 正常算力应为 51370*0.067=3441P。若 BCH 实际算力高于 3441P,则每台矿机挖矿 BCH 产出将低于 BTC,矿工将从 BCH 迁移到 BTC,直到两边挖矿收益相同,反之亦然。

CSW 投入的算力多少,将决定双方的烧钱比例。

6.1、如果 CSW 投入 7000P 算力(两倍 BCH 正常算力)

如第四章中所述,攻击方不管胜负,必然损失攻击成本,而防御方有防守优势,如果获胜还可以获得挖矿收入作为补偿。因此,若比特大陆也投入 7000P 算力进行防御,并最终获胜,那可以得到 BCH 期间挖出的 BCH 作为补偿(相当于 3500P 算力的成本)。

也就是说,在算力战烧钱时,比特大陆投入 7000P 算力防御,但其中只有 3500P 需要烧钱,剩下 3500P 将获得正常挖矿产出(虽然暂时无法兑现),而 CSW 的 7000P 算力全部都需要烧钱。

因此,CSW 投入的算力越少,比特大陆的「防御抵扣优势」越大,例如各自投入 5000P 时,比特大陆 1500P 烧钱 vs CSW 5000P 烧钱,因此比特大陆坚持到底的决心也必然越大。

6.2、如果 CSW 投入 7000~14000P 算力

此时,决定胜负的将主要不是双方的算力,而是双方的烧钱意志。例如 CSW 投入 10000P vs 比特大陆 10000P,则比特大陆「防御抵扣优势」将不明显,抵扣后将变成 CSW 10000P 烧钱 vs 比特大陆 6500P 烧钱。

并且在双方抽调 BTC 大量算力(假设共 20000P)到 BCH 上打算力战后,将大幅提高每 P 算力的租赁成本:

a、BTC 交易打包手续费将大幅提高

由于 BTC 的区块大小被 Core 锁死为 1M,因此:算力减少 40% → 出块速度减少 40% → 每 10 分钟 1 个 1M 区块变成每 10 分钟 0.6 个区块 =0.6M 区块 → BTC 和 2017 年底一样,发生超级大拥堵 → BTC 交易打包手续费将提高到 20-30% → 每 P 算力使用成本提高 20-30%

b、BTC 每 P 算力产出将大幅提高

若算力战短时间无法结束,那 BTC 经过难度调整后,每 P 算力产出将提高 40%,进一步提高每 P 算力使用成本,降低防御方的抵扣优势。

目前 20000P 算力日产出 3000 万元,算力战后期成本可能上升到 5000 万元 / 日 或更多,若 CSW 按照之前声称,全力进行算力战,那算力战将以极快的速度烧钱,并不会持续很长时间。

6.3、总结:

算力战的胜负,取决于算力和资金的综合影响。CSW 的算力越少,需要的资金优势越大;算力越大,需要的资金优势越小。如果 CSW 的资金优势极大,则哪怕 4000P 的算力,也可以打赢算力战,迫使比特大陆放弃防御。


七、算力战的正面战 & 游击战


从第 2 到 6 章,阐述了「以杀死一条链为目的的算力战」 :从分叉点开始,攻防双方持续地在自己链上挖块,直到一方放弃自己的整条链为止。

这种「算力正面战」类似国家之间进行的,以灭国为目的的正面战争,正面战争耗资巨大,持续时间短,对非军事目标破坏小。

f3a1d91b-3245-53cb-83c5-45e9fe66976d.jpg


以之相对应的,是「算力游击战」:攻击方由于力量或意志不够,并不进行正面对抗,不是持续地挖攻击链,而是分散、偶尔地攻击,因此攻击成本低,但持续时间长。每一次攻击链在短暂地覆盖掉原链后,都必然再被防御方覆盖回去,只能对链的稳定性造成影响,但不能杀死一条链。

防御方面对「算力游击战」的防御成本为 0,由于攻击方不会持续挖矿,因此防御方只要再继续正常挖几个块,就可以把攻击链覆盖掉,不需要付出额外的防御成本。唯一的损失只是区块链不稳定:这段时间内,链上无法打包交易,被攻击链覆盖区块的交易,也会暂时变成未确认交易。

「正面战」和「游击战」的差别总结如下:

6c15a69f-a161-56b8-98d9-d50db297b80b.jpg


如本文的「上」和「中」所述,算力投票(算力战)的目的是作为最终仲裁方式,在双方目标一致,只是手段不一致的情况下,避免不必要的分叉。只有「正面战」才有「消灭一条链避免分叉」的作用,而「游击战」没有这种作用,因此「游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。


八、算力战的结果


算力战的可能演化路径,如下图:

9169b01f-76af-5870-a713-e7c0282911e2.jpg


情况 A:比特大陆防御成功,CSW 攻击失败

CSW 在宣传中一直声称要「打算力战」,「没有分裂」。在 CSW 算力战失败后,若 CSW 履行承诺,放弃 BSV 链,则算力战结束,ABC 链成为 BCH,BSV 链死亡【流程图,结果 2】

但后来 CSW 又声称「要打两年」,「要让 BCH 没有任何交易」(见 Roger Ver 宣布旗下 Bitcoin.com 支持 ABC 后,CSW 给 Roger Ver 的信)

3a15bb37-e76c-5da9-a253-e3046f7a8189.jpg


如果 CSW 在正面战失败后(甚至不愿烧钱打正面战),继续打不能杀死一条链,不能防止分裂的「游击战」,同时 BSV 链继续挖块,形成事实上长时间并存的,ABC 和 BSV 两条分裂链【流程图,结果 1】,那 CSW 将违背自己「不分裂」的承诺,被社区大部分人所抛弃。

CSW 长期进行游击战,将导致 BCH 链长时间处于不稳定状态,交易所可能长时间不恢复 BCH 的充提,商家可能长时间不愿接受 BCH,也就是 CSW 信中所称的「2 years of no trade (两年没有任何交易)」, 「welcome to bankruptcy (欢迎面对破产)」。这不符合 BCH 社区所有人的利益。

如果 BCH 社区无法阻止 CSW 一意孤行,长期进行游击战,那么:

a、BCH 上的矿池需要建立互相合作的自动防御系统,在 CSW 的算力正常挖矿时,接受其挖出的块;在检查到孤立原链区块的攻击链时,不接受攻击链,而是在原链区块之后,自动调集算力挖矿,直到覆盖掉 CSW 的攻击链为止。

b、但在防御算力覆盖掉攻击链的这段时间内(可能几分钟到几个小时,视攻击链的长度,攻击链越长,需要的恢复时间越久),BCH 链将暂时不能确认交易,用户也将看到最近确认的交易,重新变成未确认,还是给链造成了不稳定。

因此,最好的方法是 ABC 开发组发布临时战时补丁,最多只接受高度 =1 的重组链(常见的孤立块),不接受任何高度 >=2 的重组链,这样攻击方最多只能孤立最近 1 个区块(回滚 1 确认的交易),恢复时间也很短,不会对交易所和商家造成威胁。

但此补丁造成的后果是,在使用补丁的时间内矿池必须提高警惕,避免因为某些网络原因,产生高度 >=2 的连续孤立块,因为这样会导致不同矿池的永久性分叉。若意外发生了这样的分叉,矿池必须立即互相协调,放弃较短的分叉链,统一到最长的链上。

情况 B:CSW 攻击成功,比特大陆放弃防御

如 6.2 中分析,若 CSW 烧钱超过比特大陆的承受能力,则比特大陆将被迫放弃防御。ABC 开发组若放弃 ABC 链接受 BSV 链,或者不接受 BSV 链但退出 BCH 开发,则算力战结束,ABC 链死亡(无人继续挖矿),BSV 链成为 BCH【流程图,结果 3】。

ABC 开发组也可能不放弃,声称被攻击,原挖矿算法不安全,将挖矿算法从 POW 修改为 POW+POS。虽然修改挖矿算法将导致巨大的争议,但从交易所的实际表态来看,由于 BitcoinCash.org 域名和 ABC 开发组均支持 ABC 链,故交易所将大概率给 ABC 链保留 BCH 的交易对,给 BSV 链新增 BSV 的交易对(和之前诸多 BTC 分叉币一样的流程)【流程图,结果 4】。

这是最差的一种情况,BCH 社区将发生巨大的分裂,BCH 将受到巨大削弱,BSV 将继承 BCH 放弃的目标——挑战 BTC,成为真正的比特币。

3636bfd1-9975-54b5-b4de-27800baaad8a.jpg


不管最后的结果如何,本次算力战,都将展示算力的作用和威力,显著提高算力在整个生态中的地位,并为算力作为比特币分歧的最终裁决手段,做好铺垫。BTC,BCH,BSV 等诸多同算法分裂币种,最后可能都将被统一。


九、算力战期间用户建议


1、若你不打算在算力战期间买卖 BCH,那简单保管好你的私钥即可。

2、若你准备在算力战期间买卖 BCH,请仔细阅读本文关于算力战攻防的原理和流程说明,并忽略任何与本文相抵触的表述。算力战期间 ABC 和 BSV 的价格变化,请咨询上帝(我的一贯观点:币价长期问用户数,短期问上帝)。

3、CSW 一直在混淆「一个交易在两条链上都能打包」和「只存在一条链,没有分裂」这两件没有关系的事情(可能是为了 CSW 的支持者反对 BCH 分裂成两个币?)。算力战一开始,ABC 和 BSV 链只要有最轻微的一点不一致(例如 ABC 链打包了一个带 DSV 操作码的交易),那 ABC 和 BSV 链在物理上,就分叉成了两条链,不存在什么「只存在一条链」,CSW 最多只可能做到杀死 ABC 链,让两条链只有一条活下来。

在 ABC 和 BSV 链分裂后,由于 CSW 不在 BSV 链上加重放保护,故将发生之前 ETH 和 ETC 分叉时类似的情况(发送 ETH 时,一起把同地址的 ETC 发了出去)。你在发送 ABC 币时,由于你发 ABC 的这个交易在 BSV 链上也能打包,所以很可能将 BSV 币也一起发了出去。若你不懂得做分离,需将币发到 BCH 和 BSV 充值地址一样的交易所,以免丢币。

4、在算力战前将币充到(承诺给两种币的)交易所,好处是算力战期间还可以交易,并且如果分叉,交易所会帮你做好两种币分离。坏处是什么时候可以充提,得完全听交易所。如果算力战持续很长时间(尤其如果 CSW 长时间打游击战),交易所可能会很久都不开放充提。另外,任何交易所都有倒闭的风险。

5、把币留在链上自己控制私钥,坏处是算力战期间不能交易,好处是控制自己的币,可以在算力战后,选最先恢复充提的交易所交易。两种做法各有利弊,根据自己的情况和需要,自行选择。


九、我和莱比特矿池(BTC.TOP)的态度


我支持算力投票(算力战),认为 BCH 应该以获取用户为最高目的,快速演化,并通过算力投票(算力战)的方式,消除演化中的分歧,防止不必要的分叉。

莱比特矿池(BTC.TOP)的算力将支持愿意投入更多算力和资金的一方,并帮助这一方,尽快结束算力战混乱的局面,恢复 BCH 区块链的秩序。


十、总结


1、生存是最终的辩论方式,是决定对错的最高依据。算力能杀死一条链,所以算力能成为比特币的最高仲裁机制。

2、通过「51% 空块攻击」可以阻止一条链上打包确认任何交易,并且矿工无法挖到任何块后,也会逐渐停止挖矿,最后这条链就死了。

3、防御「51% 空块攻击」需要坚守原链,调动更多的算力,挖一条比攻击者更长的链,反过来把攻击链覆盖回去。

4、防御者有挖矿产出作为「防御抵扣优势」,攻击者的算力越大,则防御者的抵扣优势越小,攻击者需要的资金优势越小。反过来,攻击者的资金优势越大,则需要的算力越小。

5、比特大陆可调用 BTC 的算力用于 BCH 算力战,因此算力多于 CSW。CSW 必须有资金优势和更坚强的烧钱意志,才能胜利。

6、「算力游击战」不能达到算力战的最终目的:杀死一条链。「算力游击战」除了延长算力战时间,给生态造成破坏外,没有任何意义。

7、算力战后,若失败的一方认输,则算力战结束,存活链成为 BCH。若失败的一方不认输(CSW 继续打游击战,或者 ABC 改 POW+POS 算法),则 BCH 分裂为 BCH 和 BSV 两个币。

8、如果 CSW 坚持进行「算力游击战」,则需要 ABC 开发组打补丁、矿池、交易所配合,消除影响。
 
 
作者:江卓尔,莱比特矿池(BTC.TOP) CEO

BCH分叉在即,重放保护与分离BSV你必须要了解

攻略leek 发表了文章 • 2018-11-14 12:10 • 来自相关话题

2018年11月15日,BitcoinCash从版本0.17硬分叉升级到0.18时候,出现了另外一个与0.18不兼容的版本BitcoinSV,但是这个版本没有添加重放保护,号称要以算力战的方式用BitcoinSV替换BitcoinABC 0.18。算力战的问题这里暂且不谈,只说重放保护的问题以及如何分离BCH和BSV。


关于重放保护的相关问题


1. 什么是重放保护?

重放保护,就是让交易只在当前链中有效,并且在其它链中无效。通常在一条链分裂成两条链时,为了让两条链的交易互不影响,需要在生成交易信息的时候,加入不同的标识或者使用不同的交易结构,这样,另一条链的矿工就会验证该交易无效,从而不打包该交易。

2.添加重放保护的一方,有什么影响?

目前来看,添加重放保护的一方,是处于劣势的,因为该举动意味着放弃了另一方的所有生态。2017年8月1号BCH分叉时,主动添加重放保护,只能重新建立自己的相关应用,从0开始。

但是,添加重放保护,是能上交易所的基本条件。虽然不添加重放保护,交易所也可以把两种分离,但是交易所要花费很多精力和技术去做这些事。技术差的交易所,会因为账务混乱,无法支持。除非这种币有很大的用户群,否则交易所不愿意花费高成本去支持这种币。

3. BCH每年两次的硬分叉升级,为什么不添加重放保护?

BCH的硬分叉升级是为了升级(本来是升级,不知道谁取名字叫硬分叉),不是为了分叉,和ETH一样,全节点客户端都需要升级,否则就无法同步区块,但是轻钱包却不用升级。如果升级时添加重放保护,意味着之前所有的BCH轻钱包或者一些服务都不能使用,这些生态都需要同时升级,对生态的影响非常严重。(并不是所有的硬分叉升级,轻钱包都不需要修改的,区块链系统在升级的时候,尽量避免修改与构造交易相关的修改,否则就要作相关兼容,不然就需要很多生态一起升级,费时费力,用户体验也不好)。

4.BCH和BTC分叉时,是如何添加重放保护的?

2017年8月1号BCH分叉时,主动添加了重放保护,简单的说,就是在交易签名的数据中,添加了SIGHASH_FORKID=0x40这个数据(详情https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md)。 BSV如果要添加重放保护,只要把0x40改为其它值就可以了。

5. ETC和ETH分叉时,没有重放保护,造成了什么样的问题?

ETC的出生,是让人未意料到的,从ETC到ETH,是一次硬分叉升级,没有重放保护,但是仍有人坚持挖ETC原链,由于ETC的难度调整很快,所以ETC活了下来,并且有了价值(BCH 的0.15版,也活了下来,但是由于没有主流交易所支持,可以认为是没有价值的)。但是由于大家都没有做好准备,特别是交易所,被重放攻击了。重放攻击,对于有价值的币有意义,对于没有价值的币,是没有意义的,因为你攻击得到的币,是没有价值的。

6. 如何重放攻击?

大部分影响下,没有重放保护的两种币,在转帐的时候,发送其中的一种币,另一种币也会同时发送。重放攻击,就是利用这个漏洞,在接收币的时候,同时获取另外一种币。重放攻击一般对交易所进行攻击。
例如:

在ETC分叉的初期,没有重放保护,交易所以为ETC不会出现,也没有做分离处理,用户在提取ETH的时候,同时也收到了ETC,然后用户自已把ETH和ETC分离,向交易所充值ETH,再提出ETH,这样就多收到了ETC。


如何分离没有重放保护的BSV?


1. 分离两种币的一些基本准备工作

想要分离两种币,前提是两种币都有算力,并且都能出块。如果11.15以后BSV不出块,那么也不可能分离了。

为验证这两种币是否分离成功了,你需要两种币的区块链浏览器进行查询,但是现在还没有BSV区块链浏览器。

另一个验证的办法,就是同时准备BCH钱包和BSV钱包,并且把同一个私钥或者相同协议的助记词导入到这两个钱包中。目前,BSV没有轻钱包,唯一的全节点客户端只能在Linux系统运行,并且没有界面。

下图是BSV全节点客户端的操作截图:







2. 分离两种币的一些方法

两种区块链币分叉以后,如果没有专门的重放保护,大部分情况交易信息是完全一样的,如果想分离,就需要让一笔交易在一条链上打包,在另一条链上不打包。如果自己有矿池,那么就会有很多手段,例如,矿池自己构造交易,直接打包,不广播,那么,这些交易就不会在另一条链上存在。另外,构造一些特殊交易,例如利用BCH新的操作码构造交易,也可以让交易只在BCH链上打包,在BSV链不打包。但是这两种方法对用户的要求太高,因为普通用户没有矿池,又不是高手,自己不能构造交易。下面介绍两种方法,可以让普通用户都可以操作。

3. INPUT污染法

向你的BCH钱包转入一笔分离后的BCH当作污染源,然后把钱包中的所有币一分不留的全部转向另一个地址,转移成功后,会发现BSV钱包中的币并没有转走,两种币分离成功。

这个方法的分离原理,要从比特币的转账原理说起。






上图这笔交易由2个输入转账到一个输出。这两个输入必须同时存在,矿池才会验证通过,并打包进区块。如果输入1只存在BCH区块链中,那么BSV矿池就会拒绝收录这笔交易。操作的时要求用户一分不留的全部转走,就是为了让那笔当作污染源的输入能够包括在交易中,否则就会分离失败。

这个方法要求首先有一笔分离后的BCH,才能把其它的BCH和BSV分离开。这些币可以是矿池新挖出来的币,也可以是别人分离后转给你的币。我会在分离BCH后,给大家发送BCH,以便大家分离。

4. 区块不同步确认法

此方法用到两个特性:

BCH的零确认有个特点,就是未确认的交易,最多只能发送26次。

BCH和BSV挖矿出块不同步。


我们可以利用这两个特点分离BCH和BSV。

这个方法操作相对复杂一些,并需要试很多次,还要花费一些BCH或BSV,需要准备BCH钱包和BSV钱包,把同一个私钥导入到BCH钱包和BSV钱包。

我们仍然操作BCH(因为BCH的工具比较多,钱包多)。向BCH钱包转入大约0.01个BCH,不要太多,此时,BCH钱包和BSV钱包都会收到这0.01个币。

快速把这些币转账到原来的地址,连续操作26次以上(越快越好,最好在5分钟能操作完成,否则要试很多次),等钱包提示错误不能再操作为止。如果你的钱包不允许零确认26次,那就需要换个钱包。如果你会用程序生成交易,那最好不过了。

等未确认的交易达到26次以后,等待BCH网络和BSV网络出块。如果BCH网络先出块,那么再发一笔BCH交易,此时BCH网络会收录这笔交易,BSV网络因为超过26次零确认,会拒绝你的交易,分离成功。如果BSV网络先出块,那么用BSV钱包再发一笔交易,同样原理,也可以分离BCH和BSV。



作者:区块链展望与观察 查看全部
replay-050817-79b61b33eac00b6a.jpeg

2018年11月15日,BitcoinCash从版本0.17硬分叉升级到0.18时候,出现了另外一个与0.18不兼容的版本BitcoinSV,但是这个版本没有添加重放保护,号称要以算力战的方式用BitcoinSV替换BitcoinABC 0.18。算力战的问题这里暂且不谈,只说重放保护的问题以及如何分离BCH和BSV。


关于重放保护的相关问题


1. 什么是重放保护?

重放保护,就是让交易只在当前链中有效,并且在其它链中无效。通常在一条链分裂成两条链时,为了让两条链的交易互不影响,需要在生成交易信息的时候,加入不同的标识或者使用不同的交易结构,这样,另一条链的矿工就会验证该交易无效,从而不打包该交易。

2.添加重放保护的一方,有什么影响?

目前来看,添加重放保护的一方,是处于劣势的,因为该举动意味着放弃了另一方的所有生态。2017年8月1号BCH分叉时,主动添加重放保护,只能重新建立自己的相关应用,从0开始。

但是,添加重放保护,是能上交易所的基本条件。虽然不添加重放保护,交易所也可以把两种分离,但是交易所要花费很多精力和技术去做这些事。技术差的交易所,会因为账务混乱,无法支持。除非这种币有很大的用户群,否则交易所不愿意花费高成本去支持这种币。

3. BCH每年两次的硬分叉升级,为什么不添加重放保护?

BCH的硬分叉升级是为了升级(本来是升级,不知道谁取名字叫硬分叉),不是为了分叉,和ETH一样,全节点客户端都需要升级,否则就无法同步区块,但是轻钱包却不用升级。如果升级时添加重放保护,意味着之前所有的BCH轻钱包或者一些服务都不能使用,这些生态都需要同时升级,对生态的影响非常严重。(并不是所有的硬分叉升级,轻钱包都不需要修改的,区块链系统在升级的时候,尽量避免修改与构造交易相关的修改,否则就要作相关兼容,不然就需要很多生态一起升级,费时费力,用户体验也不好)。

4.BCH和BTC分叉时,是如何添加重放保护的?

2017年8月1号BCH分叉时,主动添加了重放保护,简单的说,就是在交易签名的数据中,添加了SIGHASH_FORKID=0x40这个数据(详情https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md)。 BSV如果要添加重放保护,只要把0x40改为其它值就可以了。

5. ETC和ETH分叉时,没有重放保护,造成了什么样的问题?

ETC的出生,是让人未意料到的,从ETC到ETH,是一次硬分叉升级,没有重放保护,但是仍有人坚持挖ETC原链,由于ETC的难度调整很快,所以ETC活了下来,并且有了价值(BCH 的0.15版,也活了下来,但是由于没有主流交易所支持,可以认为是没有价值的)。但是由于大家都没有做好准备,特别是交易所,被重放攻击了。重放攻击,对于有价值的币有意义,对于没有价值的币,是没有意义的,因为你攻击得到的币,是没有价值的。

6. 如何重放攻击?

大部分影响下,没有重放保护的两种币,在转帐的时候,发送其中的一种币,另一种币也会同时发送。重放攻击,就是利用这个漏洞,在接收币的时候,同时获取另外一种币。重放攻击一般对交易所进行攻击。
例如:

在ETC分叉的初期,没有重放保护,交易所以为ETC不会出现,也没有做分离处理,用户在提取ETH的时候,同时也收到了ETC,然后用户自已把ETH和ETC分离,向交易所充值ETH,再提出ETH,这样就多收到了ETC。


如何分离没有重放保护的BSV?


1. 分离两种币的一些基本准备工作

想要分离两种币,前提是两种币都有算力,并且都能出块。如果11.15以后BSV不出块,那么也不可能分离了。

为验证这两种币是否分离成功了,你需要两种币的区块链浏览器进行查询,但是现在还没有BSV区块链浏览器。

另一个验证的办法,就是同时准备BCH钱包和BSV钱包,并且把同一个私钥或者相同协议的助记词导入到这两个钱包中。目前,BSV没有轻钱包,唯一的全节点客户端只能在Linux系统运行,并且没有界面。

下图是BSV全节点客户端的操作截图:

36698e3922c474fd79953f6196cc28ed_G4ZTMKRUHE3A.jpg



2. 分离两种币的一些方法

两种区块链币分叉以后,如果没有专门的重放保护,大部分情况交易信息是完全一样的,如果想分离,就需要让一笔交易在一条链上打包,在另一条链上不打包。如果自己有矿池,那么就会有很多手段,例如,矿池自己构造交易,直接打包,不广播,那么,这些交易就不会在另一条链上存在。另外,构造一些特殊交易,例如利用BCH新的操作码构造交易,也可以让交易只在BCH链上打包,在BSV链不打包。但是这两种方法对用户的要求太高,因为普通用户没有矿池,又不是高手,自己不能构造交易。下面介绍两种方法,可以让普通用户都可以操作。

3. INPUT污染法

向你的BCH钱包转入一笔分离后的BCH当作污染源,然后把钱包中的所有币一分不留的全部转向另一个地址,转移成功后,会发现BSV钱包中的币并没有转走,两种币分离成功。

这个方法的分离原理,要从比特币的转账原理说起。

6ffbe071e83d5f9666db3c78690b0ea4_GEYDENBKGE2TA.jpg


上图这笔交易由2个输入转账到一个输出。这两个输入必须同时存在,矿池才会验证通过,并打包进区块。如果输入1只存在BCH区块链中,那么BSV矿池就会拒绝收录这笔交易。操作的时要求用户一分不留的全部转走,就是为了让那笔当作污染源的输入能够包括在交易中,否则就会分离失败。

这个方法要求首先有一笔分离后的BCH,才能把其它的BCH和BSV分离开。这些币可以是矿池新挖出来的币,也可以是别人分离后转给你的币。我会在分离BCH后,给大家发送BCH,以便大家分离。

4. 区块不同步确认法

此方法用到两个特性:


BCH的零确认有个特点,就是未确认的交易,最多只能发送26次。

BCH和BSV挖矿出块不同步。



我们可以利用这两个特点分离BCH和BSV。


这个方法操作相对复杂一些,并需要试很多次,还要花费一些BCH或BSV,需要准备BCH钱包和BSV钱包,把同一个私钥导入到BCH钱包和BSV钱包。

我们仍然操作BCH(因为BCH的工具比较多,钱包多)。向BCH钱包转入大约0.01个BCH,不要太多,此时,BCH钱包和BSV钱包都会收到这0.01个币。

快速把这些币转账到原来的地址,连续操作26次以上(越快越好,最好在5分钟能操作完成,否则要试很多次),等钱包提示错误不能再操作为止。如果你的钱包不允许零确认26次,那就需要换个钱包。如果你会用程序生成交易,那最好不过了。

等未确认的交易达到26次以后,等待BCH网络和BSV网络出块。如果BCH网络先出块,那么再发一笔BCH交易,此时BCH网络会收录这笔交易,BSV网络因为超过26次零确认,会拒绝你的交易,分离成功。如果BSV网络先出块,那么用BSV钱包再发一笔交易,同样原理,也可以分离BCH和BSV。




作者:区块链展望与观察