62

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

 5 years ago
source link: https://36kr.com/p/5192932?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

编者按:本文来自36氪战略合作区块链媒体 “Odaily星球日报 ”(公众号ID:o-daily, APP下载

本文来自 Medium ,原文作者是 PascalCoin 基金会创始人兼首席执行官、PascalCoin核心开发人员、RandomHash(随机哈希)发明人 Herman Schoenfeld。

Odaily 星球日报译者 | Moni

IZNbmu6.jpg!web

如果你已经在加密行业里“混迹”多年,肯定听说过“比特币交易延展性(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 最终意识到问题所在,但此时可能为时已晚。

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

imqeyuv.jpg!web

在这种情况下,攻击者可以通过以下步骤实施攻击:

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

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

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

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

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

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

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

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

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

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

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

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

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

无论攻击者实施哪种策略,对交易所来说都会遭受损失,因此加密行业需要通过一些可塑性方案来解决这个延展性攻击问题。

用隔离见证解决延展性攻击问题是比特币社区的分裂主因吗?

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK