比特幣 ECDSA 與 Schnorr 簽名算法,及 Taproot 的升級

本文做者爲萬向區塊鏈、PlatON首席經濟學家鄒傳偉。算法

2020 年 1 月,由比特幣核心開發人員 Pieter Wuille 於去年 5 月提出的 Taproot/Schnorr 軟分叉升級提案已正式做爲比特幣改進提案(BIPs)發佈,相關提案序號爲 BIP 340-342。Taproot/Schnorr 升級若是得到社區支持,將是比特幣自閃電網絡上線後最大的技術拓展。本文查詢了 BIP 340-342 相關文檔 ,對 Taproot/Schnorr 升級作一個簡單介紹。本文分三部分,第一部分簡單介紹比特幣目前的 ECDSA 簽名算法,第二部分詳細介紹 Schnorr 簽名算法,第三部分介紹 Taproot。安全

 

1、比特幣 ECDSA 簽名算法

比特幣目前使用的 ECDSA 簽名算法與建議的 Schnorr 簽名算法,都屬於橢圓曲線數字簽名算法,它們使用的橢圓曲線都是 secp256k1。這一部分先介紹橢圓曲線 secp256k1,再介紹 ECDSA 簽名算法。網絡

 

(一)橢圓曲線 secp256k1

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

圖 1:橢圓曲線圖示dom

 

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

(二) ECDSA 簽名算法

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

注: G 座標爲
(79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8),
階等於 
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141,
均採用 16 進製表達。函數

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

2、Schnorr 簽名算法

這一部分先介紹 Schnorr 簽名算法主要特色,再分步驟介紹 Schnorr 簽名算法及批驗證,最後介紹基於 Schnorr 簽名的多重簽名算法。區塊鏈

 

(一)主要特色

Schnorr 簽名算法與 ECDSA 簽名算法使用一樣的橢圓曲線 secp256k1 和哈希函數 SHA256,因此在這個層面它們具備一樣的安全性。Schnorr 簽名算法主要有如下優勢。ui

第一,Schnorr 簽名算法有可證實安全性。在假設橢圓曲線離散對數問題難度的隨機寓言(Random Oracle)模型,以及假設原像抗性(Preimage Resistance)和次原像抗性(Second Preimage Resistance)的通用羣模型下,Schnorr 簽名算法具有選擇消息攻擊下的強不可僞造性(Strong Unforgeability under Chosen Message Attack,SUF-CMA)。換言之,若是不知道 Schnorr 簽名的私鑰,即便有針對任意消息的有效 Schnorr 簽名,也無法推導出其餘有效 Schnorr 簽名。而 ECDSA 簽名算法的可證實安全性則依賴於更強的假設。加密

第二,Schnorr 簽名算法具備不可延展性(Non-malleability)。簽名延展性的含義是,第三方在不知道私鑰的狀況下,能將針對某一公鑰和消息的有效簽名,改形成針對該公鑰和信息的另外一個有效簽名。ECDSA 簽名算法則有內在的可延展性,這是 BIP 62 和 BIP 146 針對的問題。spa

第三,Schnorr 簽名算法是線性的,使得多個合做方能生成對他們的公鑰之和也有效的簽名。這一特色對多重簽名、批驗證(Batch Verification)等應用很是重要,既能提升效率,也有助於保護隱私。而在 ECDSA 簽名算法下,如無額外的見證數據,批驗證相對逐個驗證並沒有效率提高。3d

最後,Schnorr 簽名算法由於使用一樣的橢圓曲線 secp256k1 和哈希函數 SHA256,能兼容目前的比特幣公私鑰生成機制。

 

(二) Schnorr 簽名算法

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

公私鑰生成

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

簽名生成

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

簽名驗證

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

批驗證

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

圖 2:逐個驗證簽名的時間 / 批驗證所需時間

 

(三) Schnorr 簽名算法與多重簽名

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

密鑰生成

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

簽名生成

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

簽名驗證

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

3、Taproot 升級

Taproot 升級能夠視爲默克抽象語言樹(Merkelized Abstract Syntax Tree,簡稱 MAST)的一個應用,而 MAST 又與支付到腳本哈希(Pay-to-Script-Hash,簡稱 P2SH)有關。所以,這部分依次介紹 P2SH、MAST 和 Taproot。

 

(一) P2SH

P2SH 是 2012 年推出的一類新型交易,使複雜腳本的使用與直接向比特幣地址支付同樣簡單。在 P2SH 中,複雜的鎖定腳本被其哈希值所取代,稱爲兌換腳本(Redeem Script)。當隨後出現的一筆交易試圖花費這個 UTXO 時,必須包含與哈希值匹配的腳本,同時解鎖腳本。P2SH 的主要優勢包括:一是在交易輸出中,複雜腳本由哈希值取代,使得交易代碼變短。二是將構建腳本的負擔轉移至接收方,而非發送方。三是隱私保護性更好。理論上,除了接收方,任何其餘方均可以不知道兌換腳本中包含的支出條件。好比,在多重交易中,發送方能夠不知道與多重簽名地址有關的公鑰;只在接收方支出資金時,才披露公鑰。但 P2SH 也存在不足:一是全部可能的支出條件最終都必須被披露,包括那些實際上沒有被觸發的支出條件。二是在有多個可能的支出條件時,P2SH 將變得繁複,會增長計算和驗證的工做量。

 

(二) MAST

MAST 使用默克樹來加密複雜的鎖定腳本(圖 3),其葉子是一系列相互不重疊的腳本(好比,多重簽名或時間鎖)。要支出時,只需披露相關腳本以及從該腳本通向默克樹根的路徑。好比,在圖 3 中,要使用 script 1,只需披露 script 一、script 2 以及 hash 3 便可。

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

圖 3:MAST,來源: https://medium.com/@listedreserve/schnorr-and-taproot-cc4fa1edc828

 

MAST 的主要優勢包括:一是支持複雜的支出條件。二是不用披露未被執行的腳本或未被觸發的支出條件,提供更好的隱私保護。三是壓縮交易大小。隨着腳本數量的增長,非 MAST 交易大小是線性增加,而 MAST 交易大小是對數增加(圖 4)。

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

圖 4:腳本數量與交易大小,來源:https://bitcointechtalk.com/what-is-a-bitcoin-merklized-abstract-syntax-tree-mast-33fdf2da5e2f

 

(三) Taproot

但 P2SH 與常見的支付到公鑰哈希(Pay-to-Public-Key-Hash,P2PKH)在表現上不同,仍然有隱私保護問題。有沒有可能讓 P2SH 和 P2PKH 在鏈上看起來同樣?這就是 Taproot 要解決的問題。

涉及有限數量簽名者的腳本,能夠分解成兩部分:第一部分是多重簽名,全部簽名者都贊成某一支出結果,稱爲「協做式支出」;第二部分稱爲「非協做式支出」,能夠有很是複雜的腳本結構。這兩部分是「或」的關係。好比,在圖 3 中,Script 3 是一個 2-of-2 型多重簽名,須要 Alice 和 Bob 兩人都簽名纔有效,是「協做式支出」;Script 1 和 2 是「非協做式支出」。

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

圖 5:Taproot,來源:https://medium.com/@listedreserve/schnorr-and-taproot-cc4fa1edc828

 

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

鄒傳偉:讀懂比特幣  ECDSA 與 Schnorr 簽名算法,及 Taproot 升級

 

參考文獻

1 Maxwell, Gregory, Andrew Poelstra, Yannick Seurin, and Pieter Wuille, 2018, "Simple Schnorr Multi-Signatures with Applications to Bitcoin".

相關文章
相關標籤/搜索