比特币的可扩展性问题是其面临的主要问题之一,也是许多人努力的方向,比如说闪电网络。但是,要在比特币网络中实现闪电网络,条件似乎还不具备,因为比特币自身编程模型存在一些缺陷。另一个解决方案 “隔离见证(Segregated Witness)” 也致力于提高可扩展性,但它同时也解决了许多问题,包括闪电网络实现所需修补的一些缺陷。本文中我们会讲解隔离见证的优势及其工作原理。

一、交易延展性/可塑性

隔离见证(SegWit)是一个由多个 BIP(141、142、143、144 和 145)描述的软分叉,**其主要用意是优化比特币交易和区块的结构,将交易的签名从交易中移到一个独立的结构中。**它不仅允许降低比特币交易的数据量大小(因此能让一个区块塞下更多的交易),也能解决 “交易延展性(transaction malleability)” 问题(也就是我们开头提到阻碍闪电网络实现的缺陷),对支付通道和闪电网络这样基于比特币交易结构的技术来说极为关键。

1、交易延展性

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

在比特币系统中,也有一个类似的名词,“ Transaction Malleability ”。这个词通常翻译为“交易延展性”或“交易可锻性”。交易延展性源于比特币源代码中的一个错误。这个错误,可以在不改变交易输出或交易内容的情况下,更改交易ID。这个错误意味着,在交易被矿工写入区块之前,交易签名可以被更改。换句话说,也就是一笔未被确认的比特币交易,有可能被黑客造出两笔合法的交易。利用交易延展性而造成的攻击就叫交易延展性攻击。

2、交易延展性攻击

2014 年,有人利用比特币的这个漏洞大规模攻击比特币网络,内存池中充满了假交易,造成比特币网络堵塞,导致部分全节点宕机,导致比特币网络极其不稳定。曾经最大的比特币交易所——Mt.Gox宣布倒闭的部分原因,就是延展性攻击。

举个例子:小黑从交易平台发起提币,然后他提币这个交易就被广播出去了,在他这笔交易还没有被节点验证之前,小黑进行了延展性攻击,恰好攻击产生的新交易先被确认,而新交易照样会让他获得币(就像金子外观变了一样被认可),但是贪心的小黑却向交易平台申诉自己并没有收到币,交易平台一看,之前给小黑转币的那笔交易确实被拒绝了,因此又给小黑汇了一笔币,小黑心里美滋滋。贪心的小黑还不满足,他又以同样的攻击方式继续多次攻击,这样就导致了交易平台的资金大量流失。

2.1 两种攻击方式:

  1. 更改交易的签名 signature(r, s) 等价于 signature(r, -s(mod N)),BIP66 后规定签名算法必须是 DER-encoded ASN.1
  2. 更改解锁脚本 UnLock Script ,如增加一些无关指令(如 OP_DROP)不影响执行结果

Untitled

2.2 可能导致的后果: