比特幣是通過數字簽名來解鎖UTXO中的未花費余額,從而完成交易的。www.emoneybtc.com
以下圖為例,在交易B中,Bob轉給Carol一個比特幣。Bob需要分兩步來完成這筆交易:
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。
性能:Schnoor的性能優勢顯而易見,它減少了一個多簽交易的驗證工作量,此外還有可能實現多個交易的批量驗證,也就是用一個區塊中所有交易的聚合簽名一次性驗證所有交易,從而提升比特幣的驗證速度。
體積:Schnorr使用的是聚合公鑰和聚合簽名,這會減少多重簽名的大小,通過將無關數據移出區塊鏈提高系統的可伸縮性,節點將擁有更多的帶寬同時還能減少存儲量。Andrew認為如果每個人都采用這種方法,等於變相將比特幣的容量增加了 10%至20%。
隱私:Schnoor的隱私優勢在於它在交易腳本中使用聚合公鑰和聚合簽名完成加鎖和解鎖操作,某個用戶的原公鑰和原簽名都不會暴露。外界只能看到10,而不能看到1、2、3、4,外界甚至無法知道這是一筆多簽交易還是一筆非多簽交易。
Schnoor簽名還有更多有趣的使用方式,比如它能夠在被調整後使用。人們可以把一個聚合公鑰乘以2作為新的聚合公鑰來上鎖,解鎖時只需要把聚合簽名也乘以2就能完成解鎖。這樣一來其他人就無法知道原聚合公鑰和原聚合簽名是什麼,他們也看不出公鑰或簽名是否被調整過。