能增強隱私的多籤和潛在複雜腳本擴展性,是比特幣下一次分叉的核心改進。

撰文:潘致雄

一次比特幣協議的升級,可能會預示着未來 3 至 5 年的趨勢,雖然大家並不關心比特幣的技術迭代,更關注安全和主流人羣接受度,但最終所有人都會受益於這次升級。

那個被你們認定爲技術上不思進取的比特幣協議,終於引來了一次值得關注的技術升級。比特幣協議中具有里程碑意義的技術升級 Schnorr Signature(施諾爾簽名) 和 Taproot(樹的主根) 已集成到剛剛發佈的 Bitcoin Core 0.21.0 版本中——這絕對值得關注,因爲該升級有可能會影響未來 3 至 5 年的比特幣生態,特別是針對機構級用戶和多籤的各種應用場景。

當然,對於比特幣協議目前重要的關鍵詞是「穩健」和「安全」,所以哪怕這些技術上線之後,社區和生態通常都會相當謹慎,就算不集成支持其實也沒什麼問題,不然還可能會引入不必要的風險和漏洞。

由於這次的升級是需要經過軟分叉才能激活的,所以後續還需要看礦池和礦工對於該提案的支持程度,至少目前來看,礦池和礦工相當積極,大於 90% 的算力已經宣佈會支持該升級。

Schnorr Signature 是以德國數學家和密碼學家 Claus-Peter Schnorr 命名的數字簽名算法,由於在 2008 年之前處於專利保護的狀態,所以中本聰在設計比特幣協議時並未使用該簽名算法,而是選用了當時更適合且開源的橢圓曲線數字簽名算法(ECDSA) 。

但是比特幣核心開發者在將近十多年後卻認爲,Schnorr Signature 纔是比特幣的未來,因爲它在密碼學特性上的優勢,可以在幾乎同等 (甚至更好) 安全的基礎上,更方便和「低調」地構建多簽名交易,也能爲寸土寸金的區塊節省不少空間。

比特幣協議中除了簽名算法之外,還設計了一套腳本語言定義如何使用比特幣。Taproot 就是一套可以在 Schnorr Signature 的特性之下,讓比特幣更強大的全新腳本語言體系,並且,還設計了 Tapscript 腳本語言,對花費比特幣的方式進行了微調——具體的技術細節,這裏就不繼續展開。

在這些技術的組合下,比特幣多籤類地址可以不用暴露出自己的「多籤」身份,也可以支持數量衆多的多籤場景,同時在經濟層面上也有些許優勢,可以降低鏈上的交易費用,特別是對於需要高頻操作的地址而言,可以節省不少的成本

比特幣協議是如何升級的?

在介紹 Schnorr Signature 和 Taproot 之前,有必要先回顧一下比特幣協議升級的流程步驟,畢竟這是一件相比其他區塊鏈網絡升級低頻許多的事件,甚至許多區塊鏈從業人員也不甚瞭解。

粗略來說,比特幣協議的升級分爲六個階段

  • 第一階段:所有的一切都誕生於一個點子或一個創新的想法,然後比特幣的核心開發者們會在郵件中進行初步的闡述和討論。
  • 第二階段:提交 BIP(比特幣改進提案) 的草案,這個階段可能會通過 GitHub 進行歸檔。
  • 第三階段:核心開發者們在郵件中針對提案進行詳細的討論,涉及所有的技術細節或可能的問題、挑戰。
  • 第四階段:進入正式的開發階段,以及後續的測試,並將功能加入比特幣核心客戶端。
  • 第五階段:進行投票,然後等待網絡逐步激活,也就是最終的上線。
  • 第六階段:第三方應用集成支持。

如果我們回顧此前比特幣比較重要的協議升級,會發現其實新功能的採用率並不高,而且通常是 3 年之後也僅僅是極低的採用率。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

比如,約三年前的隔離見證(SegWit) 升級,爲區塊提供了些許的擴容,使用隔離見證的地址可以降低一些轉賬成本。而根據 txstats.com 的數據,目前儲存在隔離見證地址中的比特幣數量不到 8%。 (數據來源

出現這樣的情況,一方面的原因是很多 BTC 資產可能已經丟失,或者對於大型機構而言改造這套體系需要付出太多成本,同時也會引入一些不必要的風險,畢竟安全更重要。不過從積極的方面來看,網絡中接近一半 的新交易都採用了隔離見證。 (數據來源

閃電網絡協議也是比特幣自 2018 年以來持續迭代更新的 Lay er 2 擴容支付通道技術,目前這個網絡的容量還處於一個非常小的規模 (約 1000 個 BTC) ,僅佔 BTC 總量不到萬分之一。

所以對於 Schnorr Signature 和 Taproot 而言,雖然在最新客戶端中已經植入了該功能,但是功能是否會激活啓用,以及後續的生態如何支持,還需要看之後三至五年的發展了。錢包、託管商、交易所、大型機構都會按照自己的用戶需求、安全需求、功能需求綜合考慮,逐步引入。

三年多的佈局,由 Blockstream 主導

當我們整理比特幣核心開發者針對 Schnorr Signature 和 Taproot 進行討論和研究的時間線時,發現這個方案從提出到集成已經超過了 3 年的時間。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

雖然 Schnorr Signature 是 Taproot 得以實現的基礎,但是最早被提出的其實是 Taproot——這是一套可以豐富比特幣腳本的方案,最初由 Blockstream 聯合創始人 Gregory Maxwell 在比特幣核心開發者郵件組中提出。

半年後,Blockstream 另一位聯合創始人 Pieter Wuille 則提出 Schnorr Signature 替代比特幣現有的橢圓曲線簽名 (ECDSA) ,通過其特有的「線性」特點,實現密鑰的聚合、提升區塊驗證速度。

在此之後,這兩個技術也就被組合起來作爲一個大的方案,共同推進,最後在去年初形成了三個正式版 BIP,進入開發階段:

  • BIP-340: 在 secp256k1 曲線上實現 Schnorr Signature (注:此前比特幣使用的橢圓曲線簽名也是採用的 secp256k1 這一條)
  • BIP-341: Taproot:隔離見證 V1 版本的花費規則 (注:此前在 2017 年底推出隔離見證升級中,使用的是 V0 版本規則)
  • BIP-342: Taproot 腳本的驗證方式 (注:該文檔描述了修改部分比特幣操作碼)

雖然 Gregory Maxwell 和 Pieter Wuille 先後離開了 Blockstream,但是 Schnorr Signature 和 Taproot 的大多數核心參與者都來自於 Blockstream,只有 Anthony Towns 一人除外——他之前是 Xapo 的工程師,後來加入了投資機構 Paradigm。

Schnorr Signature 有什麼用?

在比特幣協議中,判斷用戶是否有權限使用一筆資產時,除了需要經典的「數字簽名」算法這個密碼學組件之外,還構建了一種基於「鎖定腳本」和「解鎖腳本」的概念。

在此之前,中本聰在設計比特幣協議時,需要考慮到簽名算法的簽名長度、是否開源、是否有專利、是否經過足夠長時間的安全驗證、性能等多種條件,最終選擇了橢圓曲線數字簽名算法(ECDSA) ,還在其他專家的建議下選擇了一條特殊的橢圓曲線 secp256k1。

但是能滿足上述這些條件的數字簽名算法不止有 ECDSA,特別是有 Schnorr Signature 這個從各個方面都不亞於 ECDSA 的數字簽名算法。而此前中本聰沒有采用的理由可能是因爲在比特幣白皮書誕生的那一年,Schnorr Signature 的專利才失效。

沒錯,德國數學家和密碼學家 Claus-Peter Schnorr 在 1990 年提交了相關專利申請並獲批,而對於開源社區來說,在專利失效前是無法採用這套技術的,不然中本聰還真有可能在初版比特幣協議實現中採用這套簽名算法機制。

相比較 ECDSA,Schnorr Signature 更像是比特幣簽名算法應該有的樣子。性能提升和簽名長短的優勢就不提了,更重要的是它的「線性」特點,可以很方便的進行密鑰聚合,而不是通過其他特殊技巧實現多籤。

這個「線性」也很好理解,各個密鑰的參與方可以通過簡單的機制處理就可以聚合生成一個新的密鑰。而這個聚合的機制可以通過很多種方式進行,比如 Blockstream 就提出了 MuSig 和後面的更新版 MuSig2。在 MuSig2 的方案中,多個簽名可以從他們各自的私鑰中創建一個聚合公鑰,然後共同爲該公鑰創建一個有效簽名,並且從原來的三輪交互(MuSig) 優化爲只需要兩輪的交互即可。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

所以以一個 2-3 的多籤交易來看,原來的傳統方式是需要三個公鑰加上兩個簽名纔可以發起交易。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

在 Schnorr Signature 場景中,鏈上交易只需要一個聚合的公鑰和一個簽名即可,同時也就能降低很多的交易字節數,也就是降低了轉賬成本

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

所以,這也就又能帶來兩個額外的優勢:私密性超級多籤

由於只需要暴露一個簽名和公鑰,所以對於使用 Schnorr Signature 的地址,很難判斷這是否是一個多籤的地址,那也就無法得知多籤的組成是什麼樣的,對於外部觀察者而言,這就是一個普通的地址。

而對於之前的比特幣腳本,在交易時是需要暴露出部分多籤細節的,所以這也是爲什麼可以知道地址的多籤構成。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級BitInfoCharts 的比特幣富豪榜,後面這個小標記標註了多籤地址以及多籤規則

此前,因爲腳本的限制而無法支持很大數量的多籤,也因 Schnorr Signature 得以實現,這可能會打開很多此前無法想象的應用場景,比如開啓一個幾百個地址規模的多籤地址,實現更去中心化或更多樣化的資產託管等。但可能會提升鏈下交互的複雜度,只能寄希望於 MuSig2 這些機制可以更快的研發和迭代。

Taproot 是什麼?

Taproot 是一套全新的比特幣腳本結構,定義瞭如何使用和收取 Taproot 類交易的地址。它最早的概念來自於比特幣開發者提出的 MAST(默克爾抽象語法樹) ,所以 Taproot 可以算是 MAST 的一種特殊實現。

相比之前的比特幣腳本邏輯,MAST 概念中最主要的優勢是可以以更私密的方式,實現更多樣化的邏輯。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

在構建一個 MAST 結構時,可以支持數量很多的腳本,如果這裏以兩個爲例,用戶可以提前準備一個主要的支付腳本和一個備用的支付腳本,最終生成一個遞歸上去的 MAST 根的哈希值。在使用這筆資產時,用戶可以解鎖主要的支付腳本,且不暴露備用的支付腳本細節,而是用它的哈希值。

這也就意味着,對於一個無論多複雜包含多少解鎖方案的的 MAST 根,用戶在解鎖這筆資產時,只需要暴露其中的一個腳本即可,其他更多的邏輯都可以用哈希值體現,而不暴露任何其他細節。

說回到 Taproot,其本質也是類似的。而且這其中需要簽名算法的「線性」特性,所以 Taproot 才需要和 Schnorr Signature 綁定在一起。

Taproot 也是隔離見證的延續

在比特幣協議中,「鎖定腳本」 (輸出腳本) 定義瞭如何收取比特幣 (UTXO) 的規則,「解鎖腳本」 (輸入腳本) 定義瞭如何使用比特幣 (UTXO) 的規則,如果說前者是創造一個鎖,那後者就是一把鑰匙。

在三年前的隔離見證 (Segwit) 升級時,比特幣的腳本規則進行了一次大規模的升級,提出了兩種全新的腳本規則 P2WPKH(Pay to Witness Public Key Hash) 和 P2WSH(Pay to Witness Script Hash) ,也就是現在那些以 bc1 開頭的地址,都是採用了上述的腳本規則之一。P2WPKH 通常用在普通的地址上,P2WSH 通常用在多籤地址中。

另外在隔離見證的升級中,腳本中還預留了一個版本號的概念,所有之前的 Segwit 腳本規則都採用了 V0 作爲版本號,所以也可以稱爲 Segwit V0。而 Taproot 則是在 Segwit 的框架上進行了升級,版本號升級爲 V1,這也就是 BIP 341 標題中 Segwit V1 的由來,或者這套腳本規則也可以稱爲 P2TR (Pay to Taproot) ,以對應 P2WPKH 和 P2WSH 的名字。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級比如在某一筆交易中,輸出腳本中 Segwit 版本號是 V0

甚至可以構建多樣化的多籤體系

在 Schnorr Signature 和 Taproot 的組合下,構建多籤的方式也是多種多樣的,比如比特幣佈道者 Steve Lee 就 介紹 過兩種方法,分別是門限簽名和 Musig 樹 (Musig Keytree) 。

比如對於一個交易所的熱錢包而言,可能是通過三個私鑰進行 2-3 的多籤,分別是「交易所私鑰」、「可信第三方私鑰」、「冷錢包備份私鑰」。

在門限簽名中,多個簽名者需要利用 MuSig 機制預先構建收款地址;使用時將兩個簽名進行聚合,即可實現交易。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

而在樹狀結構 (Musig Keytree) 中構建多籤,就可以充分利用 Taproot 和 MAST 的優勢了。同樣是三種可以花費 BTC 的情況,將一種花費方式放在 MAST 的外部,而另外兩種方式儲存在 MAST 的兩個節點中,以此構建收款地址。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

如果擁有交易所密鑰和第三方密鑰的簽名,就可以繞過 MAST 樹狀結構,直接生成一個聚合的 Taproot 簽名,以花費這筆交易。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

或者用戶可以通過解鎖「第三方密鑰+冷錢包密鑰」的腳本,加上 MAST 樹另一邊腳本的哈希,就可以構建出 Taproot 簽名,以花費這筆交易。當然,用戶還有第三種方式花費,也是一樣的邏輯。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

兼容性:問題不大

Schnorr Signature 和 Taproot 需要通過軟分叉的形式升級,也就是舊版本協議和客戶端可以繼續運行,無需做其他調整。

但是未升級的節點是無法驗證 Segwit V1 版本的 Taproot 類腳本的,會把他們當作是任何人都可以花費的腳本 (anyone-can-spend scripts) 。而對於那些未升級的錢包,可以繼續接受和發送 SegWit V0 版本隔離見證地址,或者更早的傳統地址類型 (P2PKH) 。對於部分實施了 BIP 173(Bech32 地址) 邏輯的錢包而言,可能是可以支持將 BTC 發送給 Taproot (Segwit V1) 地址。

不過,核心開發者依舊是鼓勵大家升級,以便支持驗證這些新型的交易。

礦工算力支持度已超過 90%

軟分叉一般可以通過多種方式激活,之前多次軟分叉是使用 BIP 9 的規則激活的,需要依據大量的算力發出支持的信號,而 BIP 8 也是類似的規則。

所以最終這套方案的上線還是需要礦工和礦池來投票和激活的。根據幣印礦池整理的這份 Taproot 軟分叉升級算力支持度來看,目前支持度已經超過 90%。而選擇哪個具體的激活規則,很多礦池還未公開確認。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級來源:https://taprootactivation.com

激活提案的種類還是挺多的,不過從目前已經投票的情況來看,很多都傾向於 BIP8(false,1y) 的這個方式,也就是這個軟分叉並不會強制激活,有 1 年的投票區間,如果投票通過閾值,就會激活。

讀懂比特幣協議重要里程碑:Schnorr 簽名和 Taproot 軟分叉升級

但 Taproot 生態發展速度可能更慢

在 Taproot 激活後,接下去的事情就交給下游生態了,不過這應該是一個相比 Segwit 更漫長的普及之路。

由於 Schnorr Signature 和 Taproot 改進的更多是多籤相關的場景,所以可以預料到第三方錢包、交易所都會比較謹慎,畢竟這不是一個立竿見影的技術升級。而對於那些有更復雜多籤需求的專業用戶、專業機構、甚至是依賴於多籤的項目 (比如跨鏈方案) ,更可能是第一批喫螃蟹的人。

無論如何,哪怕這不是一個用戶感知度很高的技術升級,它最終也會因爲各種基礎設施的集成,實現更多樣化的多籤、私密性更強的地址類型、潛在的複雜邏輯支持、降低交易成本等各個方面,最終影響到生態內所有的用戶。