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

撰文:潘致雄

一次比特幣協議的升級,可能會預示著未來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 年之後也僅僅是極低的採用率。

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

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

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

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

三年多的佈局,由Blockstream 主導

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

雖然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)優化為只需要兩輪的交互即可。

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

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

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

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

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

BitInfoCharts 的比特幣富豪榜,後面這個小標記標註了多簽地址以及多簽規則

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

Taproot 是什麼?

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

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

在構建一個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 的名字。

比如在某一筆交易中,輸出腳本中Segwit 版本號是V0甚至可以構建多樣化的多簽體系在Schnorr Signature 和Taproot 的組合下,構建多籤的方式也是多種多樣的,比如比特幣佈道者Steve Lee 就介紹(https://www.youtube.com/watch?v=fDJRy6K_3yo)過兩種方法,分別是門限簽名和Musig 樹(Musig Keytree)。

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

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

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

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

或者用戶可以通過解鎖「第三方密鑰+冷錢包密鑰」的腳本,加上MAST 樹另一邊腳本的哈希,就可以構建出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%。而選擇哪個具體的激活規則,很多礦池還未公開確認。

來源:https://taprootactivation.com

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

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

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

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

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