LCS 采用隔离见证的机制,隔离见证是一个将在多方面产生影响的结构性调整可扩展性、安全性、经济刺激以及 LCS 的整体性能:
交易延展性
将见证移出交易后,用作标识符的交易哈希不再包含见证数据。因为见证数据是交易中唯一可被第三方修改的部分,移除它的同时也移除了交易延展性攻击的机会。通过隔离见证,交易变得对任何人(创建者本人除外)都不可变,这极大地提高了许多其它依赖于高级 BTC 交易架构的协议的可执行性。比如支付通道、跨连交易和闪电网络。
脚本版本管理
在引入隔离见证脚本后,类似于交易和区块都有其版本号,每一个锁定脚本前也都有了一个脚本版本号。脚本版本号的条件允许脚本语言用一种向后兼容的方式(也就是软分叉升级)升级,以引入新的脚本操作数、语法或语义。非破坏性升级脚本语言的能力将极大地加自由现金的创新速度。
网络和存储扩展
见证数据通常是交易总体积的重要贡献者。更复杂的脚本通常非常大,比如那些用于多重签名或支付通道的脚本。有时候这些脚本占据了一笔交易的大部分(超过 75%)空间。通过将见证数据移出交易,隔离见证提升了 LCS 的可扩展性。节点能够在验证签名后去除见证数据,或在作简单支付验证时整个忽略它。见证数据不需要被发送至所有节点,也不需要
被所有节点存储在硬盘中。
签名验证优化
隔离见证升级签名函数(CHECKSIG, CHECKMULTISIG, 等)减少了算法的计算复杂性。引入隔离见证前,用于生成签名的算法需要大量的哈希操作,这些操作与交易的大小成正比。在 O(n2) 中关于签名操作数量方面,数据哈希计算增加,在所有节点验证签名上引入了大量计算负担。引入隔离见证后,算法更改减少了 O(n2) 的复杂性。
离线签名改进
隔离见证签名包含了在被签名的哈希散列中,每个输入所引用的值(数量)。在此之前,9 个离线签名装置,比如硬件钱包,必须在签署交易前验证每一个输入的数量。这通常是通过大量的数据流来完成的,这些数据是关于以前的交易被引用作为输入的。由于该数量现在是已签名的承诺哈希散列的一部分,因此离线装置不需要以前的交易。如果数量不匹配(被一个折中的在线系统误报),则签名无效。
隔离见证工作机制
隔离见证修改了四个签名验证函数(CHECKSIG,CHECKSIGVERIFY, CHECKMULTISIG 和 CHECKMULTISIGVERIFY)的语义,改变了交易承诺散列的计算方式。加密数字货币交易中的签名应用于交易哈希,交易数据计算,锁定数据的特定部分,表明签名者对这些值的承诺。例如,在简单的 SIGHASH_ALL 类型签名中,承诺哈希包括所有的输入和输出。不幸的是,计算承诺哈希的方式引入了验证签名的节点可能被迫执行大量哈希计算的可能性。具体而言,散列运算相对于交易中的签名操作的数量增加 O(n^2)。
因此,攻击者可以通过大量的签名操作创建一个交易,导致整个加密货积分网络不得不执行数百或数千个哈希操作来验证交易。Segwit 代表了通过改变承诺散列计算方式来解决这个问题的机会。对于segwit 版本 0 见证程序,使用 BIP-143 中规定的改进的承诺哈希算法进 行签名验证。 新算法实现了两个重要目标。
首先,散列操作的数量比签名操作的数量增加了一个更加渐进的 O(n),减少了用过于复杂的交易创建拒绝服务攻击的机会。其次,承诺散列现在还包括作为承诺的一部分的每个输入的值(金额)。这意味着签名者可以提交特定的输入值,而不需要“获取”并检查输入引用的前一个交易。在离线设备(如硬件钱包)的情况下,这极大地简化了主机与硬件钱包之间的通信,消除了对以前的交易流进行验证的需要。硬件钱包可以接受不可信主机“输入”的输入值。由于签名是无效的,如果输入值不正确,硬件钱包在签名输入之前不需要验证该值。
网友评论