什么是交易延展性攻击,又称交易可塑性攻击

 2023-09-21 21:46:16发布

交易延展性攻击,也叫交易可塑性攻击。交易延展性是指同样一个东西,它的本质和质量都没有改变,但是形状改变了,而这个延展性,会造成交易ID()不一致,从而导致用户找不到发送的交易。利用交易延展性而造成的攻击,就叫交易延展性攻击。

如何理解交易延展性

在现实生活中,我们把一块金子敲变形之后,虽然形状有所改变,但质量却没有发生变化,也就是说金子外观发生了变化但是仍然被认可,这种特性呢被称为“可锻性”。

在比特币系统中,也有一个类似的名词,“ Transaction Malleability ”,这个词通常翻译为“交易延展性”,也叫做“交易可锻性”。

交易延展性攻击

交易延展性攻击具体指的是比特币交易 A 发出之后,在还没有被确认之前,攻击者通过修改某些交易数据,使得一笔交易的唯一标识——交易哈希发生了改变,就形成了新的交易 B ,假如交易 B 先被记录到比特币账本中,那么交易 A 会因为双重支付问题,被验证为不合法,从而拒绝。

一个现实的例子就是:Bob从交易所发起提币,然后他提币这个交易就被广播出去了,在他这笔交易还没有被节点验证之前,Bob进行了延展性攻击,恰好攻击产生的新交易先被确认,而新交易照样会让他获得币(就像金子外观变了一样被认可)。

但是贪心的Bob却向交易所申诉自己并没有收到币,交易所看到之前给Bob转币的那笔交易确实被拒绝了,因此又给他汇了一笔币,之后Bob又以同样的攻击方式继续多次攻击,这样就导致了交易所的资金大量流失。

如何避免交易延展性攻击

比特币(BTC)通过引入隔离见证(Segwit)而“解决了”延展性。

隔离见证将签名与TXID计算隔离开来,并用对该签名的不可更改的哈希承诺来代替它。该散列用作指向签名的指针,该签名存储在另一个数据结构中。

为了验证交易签名,验证者使用哈希在其他数据结构中查找签名,然后执行常规的ECDSA验证。这消除了签名作为交易可延展性的来源,因为它们存储在交易之外,并且不能将指向签名的哈希指针进行延展。但是它引入了对包含签名的其他数据结构的依赖性。比特币的一个小折衷,但意义重大。

虽然Segwit本身并不是一个坏主意,但部署和由此产生的部署政治在比特币社区内部引起了分裂。这导致社区分为比特币(BTC)和比特币现金(BCH)。

尽管将隔离见证(Segwit)吹捧为主要原因,但潜在的问题更多是与隔离见证的部署有关,而不是技术问题。另外,“永远不要软叉,永远不要硬叉”的政策暗示着1MB块大小实际上是锁定的,这对于许多人来说是不可接受的。

反对隔离见证(Segwit)的技术论点更多地与它作为软叉的无用复杂性有关,而与它作为硬叉的健全性无关。作者认为,Segwit作为软叉是使比特币破裂的源头。然而作为硬叉的Segwit是技术上合理的延展性解决方案。

推荐阅读