导致新加密货币的硬分叉为加密交换运营商带来了独特的机遇和挑战。Poloniex在最近的Bitcoin Cash硬叉之后面临的一个挑战是保护我们的客户免受重播攻击。由于SV链后面的开发团队选择在分叉后近两周才实施重放保护,因此Poloniex工程师的任务是设计解决方案。

社区中的许多人对Poloniex如何应对这一特殊挑战感到好奇,因此我们决定提供一些见解。

什么是重播攻击?

虽然名称暗示某种恶意行为,但重放攻击可能是由于节点在硬分叉后经历的混乱而发生的。这种混淆可能导致代币持有人无意中在其中一条新链上发送交易,从而导致资金损失。

在硬分叉之前,比特币现金节点都在监听新的有效比特币现金交易。当节点听到新交易时,它会执行数学测试,以便验证发件人是否是资金的真正所有者。如果此数学测试告诉节点该事务是有效的,它将告知网络中的其他节点,并且该事务最终将被添加到区块链中。

在硬分叉之后,一些节点运营商立即升级到比特币ABC链,一些运营商升级到SV链。当一个链上的节点听到另一个听起来有效的链的事务时,会发生重放攻击,因此它会将其传递给网络的其余部分。例如,Alice向Bob发送了1个比特币ABC,最终也无意中向Bob发送了1个比特币SV。她的交易在第二条链上得到“重播”。

为什么会这样?

要理解为什么会发生这种情况,我们必须看看比特币现金交易的内幕。

如果Alice有一个15比特币现金的钱包,她没有15个独立的BCH - 她拥有多块比特币现金,称为输出,最多可加15比特币现金。例如,Alice的15 BCH可能是两个输出的组合:10 BCH和5 BCH。在区块链拆分后,比特币现金硬叉之后,爱丽丝现在在两个不同的区块链上具有相同的输出:10个BCH-ABC,5个BCH-ABC和10个BCH-SV,5个BCH-SV。可以使用相同的私钥来移动所有这些输出。

为简单起见,假设Alice想要将她的5 BCH-ABC发送给Bob(尽管交易通常涉及多个输出的组合)。使用她的私钥,她签署了一条消息,说明将此BCH- ABC的特定输出发送给Bob。此时,BCH-ABC节点可以执行我们前面提到的数学测试,证明Alice拥有私钥来发送此事务。比特币SV节点“偷听”此事务时出现问题。比特币SV节点可以执行相同的数学测试,并得出结论,Alice使用她的私钥将5 BCH SV的特定输出发送给Bob。

Alice的数字签名在两个链上都有效。即使她只打算向Bob发送5个BCH-ABC,她也最终还向他发送了5 BCH SV的匹配输出。

如何防止重放攻击

如您所见,重放攻击可以在硬分叉后立即发生,因为每个人在两个不同的链上都有相同的输出。在一条链上移动输出的数字签名能够在另一条链上移动匹配的输出。

然而,由于两个链条都在叉子之后单独开采,因此通过新的coinbase奖励引入了新的独特输出。ABC链上的硬币基础奖由SV链上不存在的输出组成,反之亦然。这些后叉输出是防止重放攻击的关键。

比方说,吉米是比特币现金矿工。如果在分叉后,Jimmy开始挖掘BCH-ABC并获得新创建的BCH-ABC的币基奖励,这些将是SV链上不存在的输出。如果他将这5个BCH-ABC发送给Alice,她可以将它们发送给Bob而不用担心重播攻击。如果比特币SV节点无意中听到此事务,它将无法识别Alice尝试发送的输出,因此没有比特币SV会移动。

使用post-fork输出防止重放攻击

在分叉之后,Poloniex立即开始收集一小组后叉输出或UXTO。如果Alice是Poloniex的客户并且要求撤销5 BCH-ABC,我们将混合至少1个后叉输出。如果BCH-SV节点无意中听到我们的事务,则包含post-fork输出将阻止SV节点识别事务。数字签名将移动ABC链上的指定输出而不是SV链上的指定输出,因为这些特定输出并非全部存在于SV链上。

通过采用包括1个后叉输出以及所有BCH-ABC和BCH-SV撤销的方法,Poloniex能够充满信心地操作交易所及其客户不会因重放攻击而遭受资金损失。


文章来自Connor Dempsey

致March Boorstin领导BCH硬叉的工程设计,并与Anders Brownworth一起为本文提供了技术见解。

在BCH硬分叉后防止重放攻击-1的更多相关文章

  1. 在BCH硬分叉后防止重放攻击-2

    重放攻击原理和防范措施——如何安全分离BCH的分来源:巴比特018-11-18 16:49:37 热度 12390 第0章 引言 即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要 ...

  2. BCH硬分叉,BitcoinABC强势逆袭BitcoinSV

        最近币圈讨论最多的就是BCH的硬分叉,今天凌晨BCH硬分叉在众多币圈大佬关注下落下帷幕,此次分叉大站BitcoinABC强势完胜BitcoinSV.吴忌寒在推特上表示:祝贺!在这个新的区块之后 ...

  3. 硬分叉后,BCH的钱包解决方案

    上周BCH进行了硬分叉,分叉成了两条链:BCH和BCHSV,对于分叉后的BCH如何进行交易呢?钱包是否有相关的危险因素? 由于分叉后的两条链没做重放保护,可能导致一条链上发起的交易,在另一条链上做重放 ...

  4. BCH硬分叉在即,Bitcoin ABC和NChain两大阵营PK

    混迹币圈,我们都知道,BTC分叉有了BCH,而近期BCH也将面临分叉,这次分叉将是Bitcoin ABC和NChain两大阵营的较量,最后谁能成为主导,我们拭目以待. 比特币现金(BCH)的价格自上周 ...

  5. BCH/BCHABC/BCHSV分叉后重放机制小结

    1. 不过,在谈重放保护之前,我们需要先了解一下重放攻击(又称重播攻击.回放攻击).实际上,重放攻击在互联网行业里就有过出现,也是计算机世界黑客最常用的攻击方式之一,它是指攻击者发送一个目的主机已接收 ...

  6. what??|诞生才一年的BCH竟面临硬分叉的抉择

    BCH才刚过一周岁生日一个星期,BCH社区的主力之一Bitcoin ABC(BCH全网接近三分之二节点运行的软件系统由Bitcoin ABC开发)就搅动了社区的涟漪.8月8号,Bitcoin ABC公 ...

  7. pre-fork 分叉 软分叉 硬分叉 前叉实现 pre-fork implementation

    https://mp.weixin.qq.com/s/wIDTs2J1ZkLkAEHqQnkYnw 什么是分叉?为何对区块链发展至关重要? Uselink公有链 Uselink公有链 2018-12- ...

  8. ethereum/EIPs-607 Hardfork Meta: Spurious Dragon硬分叉相关

    eip title author type status created requires 607 Hardfork Meta: Spurious Dragon Alex Beregszaszi Me ...

  9. 正本清源区块链——Caoz

    正本清源区块链 说明:以下内容整理自Caoz的<正本清源区块链>,如有不妥,请联系我修改或删除. 简介 不讨论炒币!不讨论炒币!不讨论炒币! 本课程内容分为两部分: 第一部分,烧脑篇,介绍 ...

随机推荐

  1. 解决error: only position independent executables (PIE) are supported

    在Android.mk文件中添加以下内容 LOCAL_CFLAGS += -pie -fPIE LOCAL_LDFLAGS += -pie -fPIE 原帖地址:http://blog.csdn.ne ...

  2. delphi通过TADOConnection组件直接连接MSSQL数据库并读写数据。

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  3. ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考

    ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考 目的:批量修改工作空间所有要素类的空间参考(坐标系) 工具名称:WorkspaceChangeSpatialReference 使 ...

  4. isPlainObject的解释

    参考: http://www.365mini.com/page/jquery_isplainobject.htm 先来看下使用案例: //在当前页面内追加换行标签和指定的HTML内容 function ...

  5. 用python对txt中文件读取,然后按顺序标号存入excel中

    读取txt文件,然后存入excel中 import xlwt #从txt文件中读取内容,放到ftext1中 f1=open('/Users/XXX/Documents/pythonwork/tenso ...

  6. ajax请求是参数问题

    Illegal invocation processData:false,processData用于对data参数进行序列化处理,默认值是true.默认情况下发送的数据将被转换为对象,如果不希望把Fi ...

  7. 04_web基础(六)之请求转发与重定向

    1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...

  8. 1.1、CDH 搭建Hadoop在安装之前(配置网络名称)

    重要: CDH需要IPv4.不支持IPv6.提示:粘合时,请使用bond0 IP地址,因为它代表所有聚合链接. 按如下方式配置群集中的每个主机,以确保所有成员可以相互通信: 将主机名设置为唯一名称(不 ...

  9. Python基础之-----------函数

    ---恢复内容开始--- 函数:在其他的语言中,我们也经常听到函数的概念,那么什么是函数呢?在Java中叫做method: 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函 ...

  10. linux下mysql升级

    最近漏洞扫描,扫描出了数据库存在中高危漏洞,于是迫切需要进行数据库升级.上网查了各种资料,说法很多,也到自己虚拟机上试了好多方法,终于倒腾出来,做下小总结记录一下. 升级操作: 1.到mysql官网h ...