Bitcoin86.com

比特币分叉主因:ECDSA 算法漏洞引发的延展性攻击

椭圆曲线签名算法存在一个漏洞,就是在更改交易签名之后并不会立即使原交易失效。

比特币分叉主因:ECDSA 算法漏洞引发的延展性攻击
 
如果你已经在加密行业里“混迹”多年,肯定听说过“比特币交易延展性(transaction malleability)”问题,而且知道它不是件好事儿。但是,究竟什么是“交易延展性”、以及为什么说它不好?

下面,就让星球君(微信:o-daily)带大家来看看 PascalCoin 基金会创始人兼首席执行官、PascalCoin 核心开发人员、以及 RandomHash(随机哈希)发明人 Herman Schoenfeld 如何解释这个问题吧。

在诸如比特币等加密货币中,“交易(transaction)”其实就是用户之间传递价值的原子级操作。用户创建交易之后会将其发布到网络上,这些交易会在网络被广播,最终通过“矿工挖矿”确认之后被连接到区块链上,接收交易的人也会使用区块链来判断交易是否已经被确认。

但问题是,如今比特币交易数量越来越多,区块链上每分钟都有数百万交易“飞来飞去”,用户该如何快速识别、并区分这些交易呢?不仅如此,对于那些遍布在全球各地的链下用户来说,又该如何在不使用缓慢的全球注册系统(global registry system)条件下以相同的方式快速、准确地识别交易呢?答案其实也很简单,可以使用交易加密哈希(transaction cryptographic hash)作为标识符。

交易加密哈希是一种从任意文件中创造小的数字“指纹”的方法,与指纹一样,交易加密哈希是一种以较短的信息来保证文件唯一性的标识,这种标识与交易(或文件)内的每一个字节都相关,而且难以找到逆向规律。因此,当原有交易(或文件)发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

交易加密哈希允许仅使用数据本身来获取任何数据的“指纹”(听起来有点绕),这个“指纹”是唯一的,并且每次计算都不会发生变化。不过,如果交易数据发生了哪怕“1 bit”的变化,交易哈希就会完全改变,继而确保了交易的唯一性。

在比特币里,交易哈希被称为“TXID”,并且用作为交易的唯一通用标识符。

好了,说到这里,你可能会产生一个疑问,既然每笔比特币交易都是被唯一标识的,怎么会有所谓的“延展性”问题呢?

首先,让我们来看看什么是比特币交易“延展性”问题

比特币交易延展性,是指更改了某个比特币交易的唯一交易标识符(TXID),但却没有使原交易无效。事实上,根据加密货币的不同,有很多方法可以做到这一点,最常见的一种手段就是“签名延展性(signature malleability)”,而这也是本文要重点解释的:

比特币协议里面使用的是椭圆曲线签名算法(ECDSA),该算法在1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。与普通的离散对数问题(discrete logarithm problem  DLP)和大数分解问题(integer factorization problem  IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm problem  ECDLP)没有亚指数时间的解决方法,因此椭圆曲线密码的单位比特强度要高于其他公钥体制,而且计算参数更小,密钥更短,运算速度更快,签名也更加短小。

但是,椭圆曲线签名算法存在一个漏洞,就是在更改交易签名之后并不会立即使原交易失效。虽然该算法能够确保签名无法被伪造,但却允许攻击者改变包含相关签名的交易 TXID,而这可能会产生非常严重的后果。

比特币延展性攻击

为了更好地解释比特币延展性攻击,我们引入两个虚构的交易者“Bob”和“Alice”。

假设 Bob 准备通过一笔标识符为 “X” 的交易向 Alice 支付一些比特币,在这些比特币被挖掘之前,这个标识符被黑客控制并改成了一个新的标识符“Y”,这样一来的话,当 Alice 收到这笔比特币支付之后,Bob 并不会知道他发出的支付交易已经完成了。如果 Alice 是一个“坏人”,而且她知道 Bob 还不知道自己发出的比特币已经被她收下了,此时 Alice 就可以再次向 Bob 发送一笔请款交易,要求 Bob 重新付款,而且可以重复多次这么做,直到 Bob 最终意识到问题所在,但此时可能为时已晚。

事实上,这种延展性攻击已经在某些加密货币交易所身上发生了,如下图所示:

比特币分叉主因:ECDSA 算法漏洞引发的延展性攻击
 
在这种情况下,攻击者可以通过以下步骤实施攻击:

1、启动一批 Sybil 节点(上图中红色节点);

2、用这些节点包围交易所节点(上图中红色节点);

3、从交易所中发起一个取现交易;

4、假设这笔取现交易标识符是 “X”,一旦该交易离开了交易所,Sybil 节点就会将这个交易标识符改成“Y”;

5、这个交易标识符为“Y”的取现交易会被广播到比特币网络上的其余部分;

(注:Sybil节点指代那些被恶意操控进行协同攻击的虚假账户节点,即利用网络中少数节点控制多个虚假身份,从而利用这些身份控制或影响网络的大量正常节点。)

当交易标识符为“Y”的这笔取现交易被挖到下一个区块时,攻击者已经收到了这笔取现的金额,但此时交易所后台还没有收到这笔取现交易被确认的信息,因此这个交易所一直在等待交易标识符为“X”的交易确认。此时,攻击者会继续实施攻击:

6、攻击者会要求交易所重新发起取现交易,因为他们会谎称这笔取现交易在网络上“没有被通过”;

7、继续重复上述攻击手段。

注意:在上述第二个步骤里,攻击者其实并不需要完全包围交易所节点,他们只需要几个连接既可以执行攻击——尽管攻击的成功率可能比较低。通常来说,包围交易所节点的 Sybil 节点越多,攻击成功的概率就会越高。

此外,攻击者还会根据交易所的规模大小,采取两种不同的攻击策略:

1、第一种攻击手段是所谓的“寄生虫策略(parasite strategy)”,他们通常会选择一些不规律的小额交易来实施攻击,这样就能逃过一些交易监测工具的追踪,在最大化自己收益的条件下实施长期攻击;

2、第二种攻击手段是所谓的“吸血鬼策略(vampire strategy)”,即在系统管理员发现问题之前,通过高频率的大额取款交易来抽取交易所的资金。

无论攻击者实施哪种策略,对交易所来说都会遭受损失,因此加密行业需要通过一些可塑性方案来解决这个延展性攻击问题。
用隔离见证解决延展性攻击问题是比特币社区的分裂主因吗?

通过引入隔离见证(Segwit),比特币希望解决这种延展性攻击问题。

隔离见证能够把签名交易与 TXID 计算分开,并将 TXID 替换为对这个签名交易不可延展的加密哈希。这个加密哈希会用作只想该签名交易的指针,而该签名交易则是被存储在另一个数据结构之中的。

为了验证交易签名,比特币验证器会使用这个加密哈希在另一个数据结构(即存储该签名交易的数据结构)里查找对应的签名,然后执行椭圆曲线签名算法(ECDSA)验证。通过这种方法,延展性攻击将无法获得签名源,因为这个数据并没有和交易存储在同一个地方,在这种情况下,攻击者无法对指向签名的哈希指针进行篡改。当然,由于签名数据被存在其他数据结构里,因此隔离见证增加了对其他数据结构的依赖,比特币需要在这方面做一下权衡,毕竟这是非常重要的事情。

虽然隔离见证本身并不是个糟糕的想法,但实施隔离见证依然在比特币社区里造成了裂痕,也导致社区分裂成了比特币(BTC)和比特币现金(BCH)。不过需要说明的是,导致社区分裂的主要问题更多的是关于隔离见证如何被部署,而不是这个技术本身。

不管你是否喜欢隔离见证,比特币现金都已经从比特币区块链中分叉出去了。从技术角度来看,延展性攻击问题仍然存在于比特币现金里。(星球日报)

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

npw