比特币的交易延展性

交易延展性是比特币系统中的一种特性,允许攻击者改变交易签名,导致交易ID变化而不影响资金流向。这主要存在于签名延展性和解锁脚本延展性两个方面。闪电网络等依赖未确认交易的应用会受其影响。2014年的交易延展性攻击甚至导致Mt.Gox交易所倒闭。隔离见证(SegWit)通过分离签名数据解决了这个问题,提高了交易安全性,并为闪电网络和其他应用铺平道路。
摘要由CSDN通过智能技术生成

比特币的交易延展性

什么是交易延展性?

接触过比特币的人都听说过交易延展性,甚至你还听说过它是“不好的”。那什么是交易延展性呢?

在比特币系统中,我们把交易的哈希值作为这个交易的ID。这个哈希值是根据交易的内容通过哈希算法计算出来的,如果交易本身有变化,那交易哈希或者交易ID就会变。

当交易被签名时,签名并没有覆盖交易中所有的数据 (比如位于 txin 中的 scriptSig,由于 scriptSig 中包含公钥和签名数据,不可能对自身自签名),而交易中所有的数据又会被用来生成交易的哈希值来作为该交易的唯一标识。如此,尽管不常见的,比特币网络中的一个节点能够改变你发送的交易 (通过改变 txin 中的签名),导致该交易的哈希值发生变化。注意,攻击者仅仅能够改变该哈希值,交易中的 txout 是无法进行改变的,因此比特币最终也许会转入你原本打算的地址中。然而,这确实意味着,例如,在任何情况下,接收一系列未确认交易的链是不安全的,因为未确认交易的哈希值可能会发生变化,而随后的交易中的 txin 会依赖于先前交易的哈希值。即使交易得到了一个确认,也是不安全的,因为区块链可能会被重新调整。此外,客户端必须一直扫描收到的交易,假定一个 txout 是存在的,因为先前创建该笔交易的客户端可能是不安全的 (可能会发两笔同样 txout 的交易)。

两种形式

1. 签名延展性 (Signature Malleability)

延展性的第一种形式就是签名本身。每一个签名恰好有一个 DER-encoded ASN.1 octet representation,但是 OpenSSL 并没有强制,只要一笔签名没有极度的改变,它就是可接受的。此外,对于每一个 ECDSA signature(r,s),这个 signature(r,-s(mod N)) 是相同消息的一个有效签名。

在 363742 区块高度处,BIP66 软分叉强制区块链中所有新交易遵循 DER-encoded ASN.1 标准。仍然需要进一步的努力来关闭 DER 签名其它可能的延展性问题。

签名仍然是可以被拥有相应私钥的人改变的。

2. 解锁脚本延展性 (scriptSig Malleability)

比特币中使用的签名算法没有签署 scriptSig 中的任何数据。因为对整个 scriptSig 签名是不可能的,scriptSig 包含签名本身。这意味着,附件的数据能被添加到 scriptSig 中,额外的数据会先于所需的签名和公钥压入栈中。类似的 OP_DROP 能被添加,使得最终栈的状态与 scriptPubKey 执行之前的状态相同。

阻止 scriptSig 延展性正在被考虑当中。目前,如果交易 txin 的 scriptSig 中若包含除了签名与公钥之外其它数据,则该交易被认为是不标准的,不会被节点转发。最终,这个规则会强制在 scriptPubKey 执行完之后,栈中只剩下一个元素。然而,要做到这样,需要比特币随后的扩展。

隔离验证 (segregated witness) 通过将 scriptSig 从交易的 txin 中分离出来,放入到一个新添加的 witness 字段中,来解决相关延展性问题,由于签名数据从交易中分离出来,使得交易结构尺寸变小,可以使得区块能容纳更多的交易,侧面达到了轻微扩容的目的,有关隔离验证的知识,请 goolge BIP 141-145。

交易延展性对闪电网络的影响

闪电网络是一个链下微支付网络,闪电网络通常被叫做 Layer 2 解决方案,因为它是运行在比特币之上的一层网络。交易延展性可以造成闪电网络工作异常。

闪电网络是基于双重签名的交易来工作的,也就是说交易需要有双方同时签名才能生效,每次进行一个新的微支付就会创建对应的交易并由双方共同签署这个交易。

创建一个闪电网络的通道就需要发起充值交易把一笔钱转入一个双重签名地址。闪电网络的工作原理决定了充值交易是不会被直接广播到网络并打包到区块中。后续发起的微支付交易会通过交易 ID 关联充值交易。当双方需要关闭交易通道的时候才需要广播交易。这样,如果在广播之前有人利用交易延展性修改了充值交易的 ID,那么后续的微支付交易也就失效了。也就是说,交易延展性会给建立交易通道带来风险。

虽然闪电网络也可以想办法避免交易延展性的影响,但是如果交易延展性被修复了,实现闪电网络就变得非常容易。

交易延展性的其他影响

交易延展性(transaction malleability)攻击,会给那些追求确认快速到账的交易所,造成巨大损失。
2014年,有人利用这个漏洞,大规模攻击比特币网络,内存池(MemPool)中充满了假交易,造成比特币网络堵塞,导致部分全节点宕机,导致比特币网络极其不稳定。曾经最大的比特币交易所——Mt.Gox宣布倒闭的部分原因,就是延展性攻击。

隔离见证是如何修复交易延展性的?

核心开发者彼得·沃尔(Pieter Wiulle)于 2015 年 12 月举办的扩充比特币会议(Scaling Bitcoin conference)中首次提出了隔离见证(Segregated Witness)的想法。即 SegWit(Segregated Witness 的缩写),它是改变数据存储方式的一种协议升级。它于 2017 年 5 月 10 日在莱特币网络上激活,并于 2017 年 8 月 23 日在比特币网络上激活。
隔离见证通过把签名从交易中取出的方式解决了交易延展性问题。使用隔离见证后生成区块头的交易哈希值,完全由交易信息决定。即使签名被改变,而交易的内容没有改变,交易的哈希仍然是相同的。

攻击者只有通过修改签名才能够修改交易 ID,也就是说,才能够利用交易延展性。实施了隔离见证之后,比特币的每个交易之中不再包含签名,这就意味着即使攻击者修改了签名,交易ID也会保持不变。交易的签名依然可以用来检查交易的有效性,只是在计算交易 ID 的时候不会涉及签名了。

所以,隔离见证解决了交易延展性。

参考

  1. 比特币中的交易延展性问题
  2. 比特币的交易延展性 - 知乎 - 王广忠
  3. 如何解决比特币交易延展性攻击的问题 - 周亮
  4. 什么是隔离见证 - CoinDesk中文
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值