比特幣 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。

 

一、比特幣 ECDSA 簽名算法

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

 

(一)橢圓曲線 secp256k1

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

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

圖 1:橢圓曲線圖示

 

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

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

 

(二) ECDSA 簽名算法

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

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

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

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

 

二、Schnorr 簽名算法

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

 

(一)主要特點

Schnorr 簽名算法與 ECDSA 簽名算法使用同樣的橢圓曲線 secp256k1 和哈希函數 SHA256,所以在這個層面它們具有同樣的安全性。Schnorr 簽名算法主要有以下優點。

第一,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 針對的問題。

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

最後,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 升級

 

三、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 1、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".

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章