首页>深度 > >>正文

避免重放攻击!BCH币分离自救指南

2018-11-15   16:34    Mark B. Lundeberg

也就是说,你在一条链上发出的交易,在另一条链上也会进行同样的交易,而且会是合法的,这对于用户而言是一种损失!而要避免这种情况,你就需要进行币分离的操作,来自Electron Cash团队的开发者介绍了一种添加“重放攻击保护”的方式。

对于北京时间11月16日凌晨0时40分即将发生的比特币现金(BCH)硬分叉,根据目前的形势来看,发生链分裂的可能性是非常大的,而一旦发生链分裂后,BCH就会分裂成两种数量相同的币,而如果你的币是在自己的钱包当中的,请不要直接进行交易,因为这是会发生重放攻击的,也就是说,你在一条链上发出的交易,在另一条链上也会进行同样的交易,而且会是合法的,这对于用户而言是一种损失!而要避免这种情况,你就需要进行币分离的操作,来自Electron Cash团队的开发者介绍了一种添加“重放攻击保护”的方式。

以下为译文:

作者:Mark B. Lundeberg 代码库:https://github.com/markblundeberg/coinsplitter_checkdatasig 目录

1、描述

2、限制

3、安装方式

4、用法

(1)步骤: (2)你可以在分叉前做大部分的工作! (3)隐私模式; (4)在其他钱包上实现分离操作(硬件钱包/多签钱包/冷钱包(只读)/非Electron Cash钱包) (5)OP_MUL分离器

5、图文教程

(1)工具栏菜单方式 (2)地址列表方式

 

一、描述

 

 

该软件是Electron Cash的一种变体,其目的是为北京时间2018年11月16日凌晨0时40分发生的两个不同版本的比特币现金(BCH)共识规则集,添加一种分离币的能力。

操作原理是使用比特币脚本中的OP_IF分支创建一笔币(即一笔交易输出),它是可用两种方式进行花费的:

(1)Path 1,其执行纳入了新的操作码OP_CHECKDATASIGVERIFY ,或 (2)Path 0,其执行方式与普通地址类似;

通过在Path 1上花费这笔币,你可以创建一笔新币,它只能存在于其共识规则支持OP_CHECKDATASIGVERIFY的链(下文称为CDS链))当中。稍后,在其他链上可使用Path 0实现退还。该工具使得操作过程变得简化,且这个过程几乎是自动的。

不同的节点软件将遵循不同的链(在默认配置下):

(1)CDS链:ABC> 0.18.X,BU> 1.5.X,XT发布的“K”。 (2)非CDS链:旧版ABC,BU,XT软件,以及所有SV版本软件。

 

二、限制

 

 

此工具无法直接和硬件钱包一起使用。要在硬件钱包上实现拆分币的操作,你应该将已经分离好的币发送到硬件钱包(例如先用软件钱包+该工具完成拆分操作),然后将这些已经分离好的币与你硬件钱包的币混合在一起。

此外,该工具直接创建的是单向分离,你可以立即交易分裂后的CDS链币,但无法交易非CDS币。如果你确实在非CDS链上使用了相关的币,这意味着你正在创建冲突的交易,原则上可在一次区块重组期间,重放回CDS链。因此,非CDS的币应保持不动,直至你确定不可能发生区块重组。或者,你可以通过要求其他人向你发送已与CDS链不兼容的币,并将其与你的非CDS币混合在一起,从而实现双向分离。这可以使你立即进行非CDS链的交易。

警告:此工具已经过充分测试,但原则上它可能会丢失‘拆分合约’地址上的资金。出于这个原因,向这个地址发送的交易应当是小额的(例如默认的1000聪)

 

三、安装

 

 

你可以在https://github.com/markblundeberg/coinsplitter_checkdatasig/releases下载该工具的打包版本,作者Mark Lundeberg已进行了签名校验,PGP密钥为0x7C6BEB5309693C85E3F51DFBDC1959C1BE5BF112。这些文件的使用方法和使用Electron Cash的方式是相同的。

来源和说明可访问:https://github.com/markblundeberg/coinsplitter_checkdatasig.

 

四、用法

 

 

该软件的启动方式与Electron Cash是相同的,它也能打开任何版本的Electron Cash钱包。拆分工具本身仅适用于带私钥的钱包(而不适用于只读钱包或硬件钱包)。在分离过程的任何时刻,你都可以关闭对话框或钱包,因为脚本密钥是从钱包中的私钥(与对话框中指示的“主地址”相关的密钥)确定性地导出的。

4-1 步骤

 

1、打开一个拥有资金的钱包。

2、打开网络对话框,以确保自己连接到支持OP_CHECKDATASIGVERIFY的节点软件服务器。推荐的服务器有:

(1)bch.imaginary.cash

(2)electron.jochen-hoenicke.de

(3)electroncash.ueo.ch

(4)wallet.satoshiscoffeehouse.com

(5)更多

3、打开菜单工具|Coin Splitter(币拆分器)

4、点击“Fund split contract...”(资金拆分合约)按钮,然后就会弹出一笔交易预览,你可以进行检查。该工具将0.00001 BCH(1000聪,约0.005美金)发送到一个特殊的P2SH地址(地址开头为3,在bitcoincash则为p)。然后点击广播按钮。

5、然后点击“Redeem with split (CDS chain)”(赎回分离( (CDS链)))按钮,然后广播生成的交易。这里会有两种变体:

  1. 变体1: 只赎回分离币,这会产生一笔价值约为660聪的币,它只能存在于CDS链上。你可以将这笔币和其它币混合,以创建更多的分离币。
  2. 变体2:同时赎回该币和其它钱包币。通过将所有钱包的资金组合成一笔币,这可以节省混合币的额外复杂性和费用。
此时,你就拥有了只能存在于CDS链上的分离币。如果你不打算在一段时间内在非CDS链上进行交易,那么现在该过程已经是完成了。如果你要进行非CDS链的交易,则需要注意确保区块重组攻击无法撤消拆分 CDS链的交易。你在非CDS链上采取的任何行动,在理论上都可以在CDS链上实现重放!对于偏执狂而言,最佳的做法是至少等到200个区块(大约1天多的时间),之后区块重组攻击在技术上就变得不太可行了。

 

步骤#4中创建的资金,在非CDS链上可能或没有进行重放。如果已经进行了重放,则可通过连接到非CDS服务器,重打开币拆分对话框,然后单击 “Refund (any chain)”按钮来恢复660聪。同样地,最好不要在200个区块时间内执行这种操作。

4-2 你可以在分叉发生前做大部分的工作!

上述的步骤1-4,实际上是可以在分叉前执行的。在这种情况下,分离币将存在于所有的链上,然后你需要等待到分叉发生之后,然后确保交易在所有链上进行重放。你甚至可以执行步骤5,并保存交易,以供分叉后进行广播,但是,如果你在过渡期间使用钱包,请注意,这可能会花费已保存交易的部分输入,从而使其无效。

4-3 隐私模式

如果你不想把钱包地址连接到一起,你也可以通过右键单击“地址”选项卡中的地址来打开币分离工具。这将创建一个按地址的分离合约,并提供了只组合驻留在该地址上币的选项。

4-4在其他钱包上实现拆分操作(硬件钱包/多签钱包/冷钱包(只读)/非Electron Cash钱包)

该工具旨在与拥有私钥的标准非多重签名钱包一起使用。这样做是为了确定性地推导出分离合约,因此只要使用助记词就可以完全恢复钱包。不幸的是,这意味着该工具无法直接与其他类型的钱包一起使用。但是,间接方法仍然是没有问题的。

 

而要在硬件钱包中使用该工具来实现币的分离,你必须手动执行资金和混合操作。

1、使用Electron Cash创建标准软件钱包,(你可以将助记词保存在安全性较低的地方,因为你只需要在此钱包中存入1000聪。)

2、打开币分离工具;

3、发送资金!选择并复制分离合约地址,bitcoincash:ppppppppp... 并使用你的硬件钱包向该地址发送1000聪。这1000聪也可以是来自你拥有的任何其他钱包。由于步骤6当中的费用/粉尘交易限制的原因,请不要发送低于888聪的交易。

4、当进行分离操作的时候,再次打开软件钱包,以及分离工具。它应该找到你所发出的1000聪utxo;

5、从你的硬件钱包(例如bitcoincash:qzzzzzzzzz)获取一个接收地址。将其输入到分离器工具的“输出地址”字段当中。

6、发送交易!这会发送一笔微小的分离币到你的硬件钱包当中。之后该软件钱包将为空。

7、混合!使用你的硬件钱包软件混合所有的币(包括你刚发送的小额拆分币)。结果将是一个包含你整个钱包资金的大额分离币。

上述方法可确保你的硬件钱包是安全的,因为在任何时候都不需要将大钱包资金从硬件钱包中转移出去。同样的逻辑适用于多重签名钱包、冷(只读)钱包,以及任何种类的(非Electron Cash))比特币现金钱包。

 

4-5 OP_MUL 分离器

在该工具的最新版本中,你还可以为使用OP_MUL的分离合约提供资金,这可以让你在硬分叉后的SV链上进行一次单向的币分离操作,如果你很小心地使用该工具以及OP_CHECKDATASIGVERIFY工具,你就可以实现安全的双向分离,而不会受到任何类型的重放攻击。

 

OP_MUL方法的缺点在于,分离器合约地址上的资金无法在其他链上(其中OP_MUL是未被起用的)实现恢复。所以,你绝不应该向合约地址发送超过1000聪的资金,因为它们将被锁定在 ABC链上,直至有一天OP_MUL被启用它们才能实现恢复(这可能会在2019年5月份发生,但不一定能够保证)

 

五、图文教程

 

5-1 工具栏菜单方式

P1

 

打开币分离器(Coin splitter)

p2

初始状态

p3

单击“创建分离币”(Create splittable coin)按钮,这里钱包会选择使用找零地址(黄色输入)来创建一笔价值为0.00001 BCH的分离币(prslp… 地址),并将多余的币发送到另一个找零地址。

p4

点击“广播”(Broadcast)按钮之后,我们会看到分离币的信息(txid等),现在我们可以点击赎回/退款按钮。

p5

如果对话框和钱包关闭了,那么重新打开,它会自动再次找到先前制造的分离币。你可以在prslp… 地址里找到任何币(即使TX是由除了这个对话框之外的一些方法创建的)。此地址是确定性导出的,因此只要你保存了钱包助记词,你就可以恢复该地址。

p6

单击“赎回拆分币”(Redeem with split)按钮,选择“合并所有的币”(combine all coins)选项。拆分币(第一笔输入)会和钱包中的所有币组合到一起:接收地址的三笔币(绿色部分)和先前交易的找零输出(黄色部分)。单笔结果输出币只能存在于CDS链上,并放置在第一个未使用的地址上。

p7

截至发稿时,是不存在CDS链的(除了测试网络),因此,广播此交易是会失败的!如果我们尝试在非CDS节点上广播此交易,在分叉发生后,此错误代码还是会出现。(但我们可以进行退款操作,这在任何链上都是完全有效的)

5-2 地址列表方式

p8

 

在同一个钱包中,我们现在通过地址选项卡打开币分离对话框。

(与Electron Cash中一样,此选项卡可通过“视图”菜单显示)。这将以更私密的模式打开币分离器,它不会在相同的交易中将你的钱包地址连接到一起。

p9

和打开工具菜单进行对比,我们可以看到几个差异:

1、“主地址”是我们选择的地址,而不是钱包的第一个地址。

2、分离合约地址是完全不同的;

3、该对话框找不到任何现有币(因为它与其他对话框相比,地址是不同的)

4、出现了一个新的支出选项,默认选择该选项。

p10

点击“创建分离币”(‘Create splittable coin’),交易输入和找零输出都对应于我们选择的地址。如果你选择了非零余额的地址,那么该步骤是会一定成功的!

p11

单击“赎回分离”(Redeem with split),并选择“合并地址**中的币”选项。那么分离币就与地址中的币结合成一笔币。钱包里的其它币被忽略了。同样的,单个输出币只能存在于CDS链上。但请注意,钱包里的其它币还没有被分离处理!

 

以上为教材译文。如果还是没有掌握,不要轻举妄动,或者可以交给专业的交易所或钱包商处理。

原文:https://github.com/markblundeberg/coinsplitter_checkdatasig/blob/master/doc/coinsplitter_user_guide.md

编译:洒脱喜

稿源(译):巴比特资讯(http://www.8btc.com/coinsplitter_user_guide)

 返回首页>>

相关信息