什么是見證
在密碼學中,隔離見證用於形容加密難題的解決方案。在比特幣中,一個數字簽名就是一種見證(witness),可以用來形容滿足UTXO(unspent transaction output)中鎖定腳本的條件。隔離見證就是把交易輸入中的解鎖腳本移出至另一個伴隨交易的用來存放交易見證的數據結構,相應的鎖定腳本也要作出修改。
為什么使用隔離見證
一、交易延展性
將見證移除交易,交易中唯一一部分可以可以被第三方修改的數據不存在了,交易變得對任何人(交易生成者除外)不可修改,可以抵抗交易延展性攻擊。同時極大的提高了許多其他依賴於高級比特幣交易架構的協議的可執行性,比如支付通道、跨連交易和閃電網絡。
二、腳本管理
在引入隔離見證后,類似於交易和區塊都有版本號。每一個鎖定腳本前都有了腳本版本號。腳本版本號的條件允許腳本語言用一種向后兼容的方式升級,以引入新的腳本操作數、語法或語義。非破壞性升級腳本語言的能力將極大地加快比特幣的創新速度。
三、網絡和存儲擴展
見證數據占整筆交易很大一部分空間,移除見證數據可減小每一筆交易的大小,易於交易的存儲和在網絡中的傳輸。
四、簽名驗證優化
隔離見證升級簽名函數(CHECKSIG, CHECKMULTISIG, 等)減少了算法的計算復雜性。引入隔離見證前,用於生成簽名的算法需要大量的哈希操作,這些操作與交易的大小成正比。在O(n2)中關於簽名操作數量方面,數據哈希計算增加,在所有節點驗證簽名上引入了大量計算負擔。引入隔離見證后,算法更改減少了O(n2)的復雜性。
五、離線簽名改進
隔離見證簽名包含了在被簽名的哈希散列中,每個輸入所引用的值(數量)。在此之前,一個離線簽名裝置,比如硬件錢包,必須在簽署交易前驗證每一個輸入的數量。這通常是通過大量的數據流來完成的,這些數據是關於以前的交易被引用作為輸入的。由於該數量現在是已簽名的承諾哈希散列的一部分,因此離線裝置不需要以前的交易。如果數量不匹配(被一個折中的在線系統誤報),則簽名無效。
隔離見證輸出和交易實例
對於P2PKH
Alice創建了一筆交易用來支付咖啡的費用,這筆交易的鎖定腳本如下
OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
Bob想使用這筆錢需要提供如下解鎖腳本
<Cafe Signature> <Cafe Public Key>
將其升級為P2WPKH(Pay-2-Witness-Public-Key-Hash),交易的鎖定腳本變為
0 <Cafe Public Key Hash>
如果Bob想使用這筆前,他需要提供如下形式的解鎖腳本
<Bob's witness data>
隔離見證極大的減小了鎖定和解鎖腳本的大小