原文最初發表於 2019 年 4 月,重讀此文有助於我們更好理解 Schnorr 以及比特幣升級的重要意義。

比特幣協議終於集成了重磅功能 Schnorr Signature 和 Taproot 的代碼,在兩者的組合下,有望進一步提升多籤地址的私密性併爲區塊騰出更多空間。目前礦池和礦工對於該軟分叉升級的算力支持度已經超過了 90%,至於以哪種方式激活和具體的上線時間,就看後續各個相關方如何協商合作了。而第三方應用和生態如何支持,就可能又是一個長達數年的緩慢進程。相比較而言,另一個好消息是,比特幣核心開發者終於在經過討論後,決定拋棄之前的版本號命名規則,將 0.x 版本調整爲 x.0 版本,下一個大版本將從「22.0」開始。

以下爲正文。

原文標題:《Schnorr 即將開啓的多籤時代意味着什麼》
撰文:李畫,幣信特約撰稿人

「Schnorr 簽名、Taproot 和帶有多籤的簽名聚合很可能作爲一個升級包被同時添加到比特幣中,這是一些非常令人期待的加密創新」, Andreas M. Antonopoulos 在今年年初提到比特幣的下一次升級時難掩興奮。

比特幣終於集成 Schnorr 與 Taproot 代碼,多籤時代到來?知名比特幣佈道者 Andreas M. Antonopoulos

Antonopoulos 是《精通比特幣》(Mastering Bitcoin)的作者,同時也是加密貨幣世界裏重要的技術專家和備受尊敬的人。他預測比特幣的升級將在 6 個月後以軟分叉的形式實現,包含 Schnorr 在內的升級將爲用戶帶來如今比特幣尚不擁有的在隱私方面的好處。

這次升級的 BIP 已經被創建,相關規範正在最終確定中。比特幣核心開發者 Pieter Wuille 和其他開發者編寫了實現代碼,第一個原型也已經被創建,以 Schnorr 爲核心的比特幣豪華升級包已在路上。

那麼,廣受比特幣開發者青睞的 Schnorr 究竟是什麼?它帶來的又是什麼?

Schnorr 簽名究竟是什麼

比特幣是通過數字簽名來解鎖 UTXO 中的未花費餘額,從而完成交易的。

以下圖爲例,在交易 B 中,Bob 轉給 Carol 一個比特幣。Bob 需要分兩步來完成這筆交易:

比特幣終於集成 Schnorr 與 Taproot 代碼,多籤時代到來?

1)證明自己擁有這一個比特幣

Bob 爲什麼擁有這一個比特幣,因爲 Alice 給了他這一個比特幣;Alice 在交易 A 的「加鎖」部分把給 Bob 的這一個比特幣用 Bob 的公鑰哈希鎖上,該公鑰哈希也是 Bob 的錢包地址。

Bob 在交易 B 的「解鎖」部分提供自己的公鑰以及用私鑰創建的簽名,就能證明這一個比特幣是自己的,從而完成解鎖,可以使用這一個比特幣。

2)把這一個比特幣給 Carol

Bob 在交易 B 的「加鎖」部分用 Carol 的公鑰哈希把這一個比特幣鎖上,即表明這個比特幣是屬於 Carol 的了。

當 Carol 要使用這個比特幣時,比如想轉給 Dave,Carol 就需創建一筆交易 C,先在「解鎖」部分用自己的公鑰及私鑰簽名解鎖這個比特幣,再在「加鎖」部分用 Dave 的公鑰哈希把這個比特幣鎖上。

不難發現,比特幣需要利用公鑰進行加鎖,利用私鑰簽名進行解鎖,從而實現加密貨幣的交易。公鑰、私鑰及其簽名如何產生?通過數字簽名算法。

Schnoor 即是一種數字簽名算法,它將在下一次升級中取代比特幣現在使用的簽名算法 ECDSA。Schnorr 由德國數學家、密碼學家 Claus Schnorr 提出,該算法可以與 ECDSA 使用同一個橢圓曲線:secp256k1,因此升級起來的變動不會很大。

Schnorr 最突出的特點在於它是「線性」的,也就是說,它可以把多個公鑰或多個私鑰簽名聚合成一個新的公鑰或一個新的簽名(也可以理解爲把多個需要同時解開的鎖變成一個鎖,把用於解鎖的一串鑰匙變成一把鑰匙),而且這個新的公鑰或簽名還滿足線性特徵。

做一個不是特別適合但能說明問題的比喻,在一筆使用 Schnorr 的多籤交易中,如果參與方 Alice 的公鑰或簽名是 1,Bob 的是 2,Carol 的是 3,Dave 的是 4,那麼這筆交易對外顯示的公鑰或簽名是 10 (1+2+3+4=10),而不是 1、2、3、4。

Schnoor 簽名算法的好處

Schnorr 開發者 Andrew Poelstra 認爲,人們之所以對 Schnoor 感興趣,是因爲它提高了比特幣的可伸縮性,並允許人們創建具有非常多參與者的多籤交易,這裏邊的參與者不僅指多個人,也可能是 Liquid 網絡、閃電網絡、智能合約等等。

此外,Andrew 認爲 Schnorr 簽名在結合 Taproot 和 Scriptless Scripts 後,會讓所有比特幣交易看起來都一樣,無論這是一個普通交易還是一個複雜交易,這種方式將極大改善比特幣的隱私情況。

這些優勢源於在多籤的情況下,如果使用的是 ECDSA,用 N 個公鑰加鎖,就需要有與之對應的 N 個簽名來做驗證解鎖,驗證的工作也需要進行 N 次;如果使用的是 Schnorr,N 個公鑰可以聚合爲一個公鑰,驗證時也只需用一個聚合簽名做一次驗證。

這種「線性」的特質讓 Schnorr 在性能、體積、隱私等方面均優於 ECDSA。

性能:Schnorr 的性能優勢顯而易見,它減少了一個多籤交易的驗證工作量,此外還有可能實現多個交易的批量驗證,也就是用一個區塊中所有交易的聚合簽名一次性驗證所有交易,從而提升比特幣的驗證速度。

體積:Schnorr 使用的是聚合公鑰和聚合簽名,這會減少多重簽名的大小,通過將無關數據移出區塊鏈提高系統的可伸縮性,節點將擁有更多的帶寬同時還能減少存儲量。Andrew 認爲如果每個人都採用這種方法,等於變相將比特幣的容量增加了 10% 至 20%。

隱私:Schnorr 的隱私優勢在於它在交易腳本中使用聚合公鑰和聚合簽名完成加鎖和解鎖操作,某個用戶的原公鑰和原簽名都不會暴露。外界只能看到 10,而不能看到 1、2、3、4,外界甚至無法知道這是一筆多籤交易還是一筆非多籤交易。

Schnorr 簽名還有更多有趣的使用方式,比如它能夠在被調整後使用。人們可以把一個聚合公鑰乘以 2 作爲新的聚合公鑰來上鎖,解鎖時只需要把聚合簽名也乘以 2 就能完成解鎖。這樣一來其他人就無法知道原聚合公鑰和原聚合簽名是什麼,他們也看不出公鑰或簽名是否被調整過。

Schnorr 與 Taproot 的組合拳

幣印礦池創始人潘志彪同樣認爲這次升級意義重大,他在個人微博中寫到:「MAST、Schnorr、Taproot,組合起來,燃到爆」,Schnorr 如何與 Taproot 等技術手段組合起來使用?這套組合拳又能給比特幣帶來什麼好處?

先從瞭解它們是什麼開始。Schnorr 是簽名算法,它是這些技術中最基礎也是最核心的;MAST、Taproot、Graftroot、Scriptless scripts 等則都是腳本結構,它們可以通過利用 Schnorr 讓自己的功能淋漓盡致的發揮。

比特幣腳本是比特幣交易的載體:一筆比特幣交易是通過執行一段比特幣腳本來實現的,解鎖就是執行「輸入腳本」,加鎖就是執行「輸出腳本」。腳本結構是指比特幣腳本的數據結構。

比特幣終於集成 Schnorr 與 Taproot 代碼,多籤時代到來?

如前文所述,當人們使用自己的未花費餘額進行比特幣交易時,需要在輸入腳本部分提供自己的公鑰和私鑰簽名,以證明自己擁有這些餘額。

P2SH 是比特幣最基本的腳本結構,它向外展示整個腳本的內容,包括公鑰和私鑰簽名的信息,節點通過這些信息來驗證該筆交易。但同時,節點和任何人都可以獲取這筆交易的全部細節信息。

因此我們說比特幣是透明的。雖然它能夠把物理實體的個人與比特幣賬戶隔離,實現物理個體的匿名,但如果站在比特幣賬戶的角度,P2SH 是不爲賬戶提供隱私的,所有人都可以知道這筆資金是哪個 / 哪些賬戶以什麼方式使用的。

因爲 P2SH 的缺點,開發者提出了一種新的腳本結構 MAST,它是一種樹狀的結構,具體而言是一棵默克爾樹,即哈希樹,樹上的每一個節點存儲的都是哈希值。其結構如下圖所示。

比特幣終於集成 Schnorr 與 Taproot 代碼,多籤時代到來?樹狀結構

比特幣交易使用 MAST 結構是指在多籤情況下,把一筆資金不同的使用條件單獨進行哈希處理,生成一個哈希值儲存在這棵樹的葉子節點中;這些哈希值逐層向上遞歸,最終生成一個哈希值放在樹的最頂端的節點中,即默克爾根中。

這樣一來,當驗證某筆交易時就不需要暴露全部的腳本信息,只需要提供默克爾根和抵達某使用條件的默克爾路徑上的數據,其他信息仍然是哈希密文狀態。MAST 腳本結構不僅提供了隱私性,還增加了數據處理效率。

現在可以討論 Taproot 了。

Taproot 是一種特殊的 MAST,基於 Schnorr 簽名。它可以包含複雜的交易條件和資金使用細節,就像 MAST 一樣,再把所有這些內容作爲一個新的資金使用條件(新的鎖)提供給外界使用,這個新的使用條件和該使用條件下的解鎖方法(新的鑰匙)是通過 Schnorr 的線性特徵來支持的。

在最後的呈現上,Taproot 無需披露任何腳本信息,也無需暴露原公鑰、原簽名,它的輸出是一個聚合簽名加鎖,也只要用一個聚合簽名解鎖。

再次做一個不是特別適合但能說明問題的比喻。孫悟空可以把猴毛變成猴子,而 Taproot 做的是把猴子變成猴毛,也就是說,我們把普通交易看做一根猴毛,把 MAST 支持的複雜交易看做一隻功能強大的猴子,Taproot 可以把 MAST 這個猴子變成猴毛,即 Andrew 說的讓所有的比特幣交易看起來都一個樣,不管它本身是多麼複雜。

這對比特幣隱私,包括多籤交易下的賬戶隱私、智能合約隱私,以及 Liquid 網絡、閃電網絡等的隱私都是極大的改善。因爲智能合約、Liquid 網絡、閃電網絡,以及更多鏈外擴容的方案都是一種多籤,一種複雜交易。

組合拳開啓多籤大幕

在現實生活中,我們常常會提倡某種「生活方式」,在加密貨幣這個世界的生活中,或許我們該把多籤當作一種生活方式來倡導,讓多籤成爲加密貨幣的常識性和習慣性的資金使用方式。

以 Schnorr 和 Taproot 爲基礎的多籤對交易隱私的提升在前文已經闡述,它可以隱藏參與者的公鑰和私鑰簽名信息,也可以隱藏資金被使用的細節。

多籤的另一個好處是提高安全性。不管是加拿大 QuadrigaCX 交易所創始人離世,導致 1.6 億美元的加密貨幣被鎖事件,還是從 Mt.Gox 開始就一直持續不斷的交易所錢包被盜事件,都可以通過多簽得到改善。

多籤提供了一種加密貨幣的「尋回」方法,讓我們在無法通過某條路徑或某種方式解鎖比特幣時,還能有其他的解鎖方式。這就像在現實生活中,如果我們弄丟了儲蓄卡取不出錢的時候,還能用存摺本取錢。

(注:當然現在是補辦儲蓄卡,但補卡這種方式和多籤的方式是完全不同的。加密貨幣沒有補卡這種方式,因爲私鑰本身就是終極的唯一的憑證,不像銀行在賬戶憑證之上還有用戶身份這一層的憑證可用於補卡)。

多籤也可以提供嚴苛的加密貨幣「使用」條件,常規情況下只有這些條件同時被滿足時才能解鎖比特幣。這就像進入銀行的金庫,需要刷卡和刷視網膜打開金庫大門,需要密碼和鑰匙打開保險櫃。

這些都是多籤帶來的好處,而 Schnorr 和 Taproot 的組合進一步升級了這種好處,讓多籤能以更高效、更隱私的方式實現。

需要注意的是,即使是升級之後,一筆未使用多籤的普通交易也是無法得到 Schnorr 和 Taproot 帶來的好處的,其隱私級別與升級前是一樣的。

因此一方面需要提倡多籤,而另一方面,即使普通交易不使用多籤,多籤也在大量應用場景中被需要,比如通過智能合約使用比特幣,通過 Liquid 網絡、閃電網絡,以及更多鏈外擴容的方式使用比特幣。多籤本身的地位正在變得越來越重要。

而 Schnorr 和 Taproot 的組合 —— 後續該組合還可能包含 Graftroot 等更多多籤腳本結構 —— 將極大地加強多籤的性能,讓比特幣上的複雜交易成爲可能。

複雜交易在過去很容易就可以被識別出來,但升級後它們將和普通交易看起來一樣,交易將變得私密,比如當用戶打開或者關閉閃電網絡通道時,除了參與方之外沒有人知道發生了什麼,其他人看見的只是一個普通的加鎖公鑰。Wuille 稱 Schnorr 和 Taproot 是比特幣在隱私性上的巨大勝利。

Wuille 同時也認爲 Schnorr 和 Taproot 是比特幣智能合約的巨大勝利。它們將允許創建具有複雜使用條件的多籤交易,在 Schnorr 線性特徵的支持下,可能衍生出許多新的應用以及鏈下創新。

此外,在 Schnorr 和 Taproot 的支持下,複雜交易不僅有高的執行效率,還不需要佔用額外的比特幣區塊鏈空間。Schnorr 使用的是聚合公鑰和聚合簽名,只需一次驗證;Taproot 支持很大的腳本樹,但佔用的空間卻很小。

不難發現,雖然比特幣之前就支持多籤,但包含 Schnorr 和 Taproot 在內的比特幣升級包無疑會全面開啓多籤的大幕,而多籤帶來的,不僅是一個更安全、更具隱私、更有伸縮性的比特幣區塊鏈,還是一種支持智能合約、Liquid 網絡、閃電網絡,以及未來更多比特幣應用方式的基礎設施。

這是一個值得期待的、更好的未來。