Skip to content

Latest commit

 

History

History
81 lines (42 loc) · 7.3 KB

Schnorr簽名的威力:強化比特幣可擴充套件性和隱私的簽名演算法.md

File metadata and controls

81 lines (42 loc) · 7.3 KB

Schnorr簽名的威力:強化比特幣可擴充套件性和隱私的簽名演算法

來源:https://www.8btc.com/author/14512 lwvwlcn 2016-08-05 14:28釋出在 比特幣  16532

隔離見證已經進入最後的測試階段,很快就會在比特幣網路中啟用。這是一個好訊息,因為它用一種創新的方式提升了比特幣的區塊容量,可以讓比特幣網路容納更多的交易,同時還解決了交易延展性問題。

the-power-of-schnorr-the-signature-algorithm-to-increase-bitcoin-s-scale-and-privacy|990x550

而且它還引入了指令碼版本控制——這是對比特幣協議的一個擴充套件,這為新類別的創新提供了條件。

其中一項創新在比特幣開發者的心願單頂端好長時間了,它就是:Schnorr簽名。

在即將到來的隔離見證實現後,Schnorr簽名將會緊隨其後到來,它將改善比特幣的可擴充套件性、效率和隱私,所有這些改善一氣呵成。

我們來看一下它所能實現的改善。

簽名

首先,我們先回顧一下:什麼是簽名?

比特幣有賴於一種名叫“公鑰加密學”的數學理論,這種密碼系統使用兩種金鑰:私鑰和公鑰。

一個私鑰對應一個公鑰,它們以數學方式相連。一個私鑰很容易推匯出對應的公鑰,但一個公鑰是不可能推匯出與之相對的私鑰。這是一個“單行道”。

為了能花掉某個地址中的比特幣,你必須證明這個地址對應私鑰的所有權歸你,為了在不曝露這個私鑰的情況下,證明這個私鑰的所有權,就需要使用密碼簽名。

使用這個交易資料和這個私鑰進行一種計算,這樣就產生了一個簽名。這時就能用到公鑰的神奇功能:知道公鑰,任何人都可以驗證建立這個簽名的私鑰是否是正確的那一個。不需要知道這個私鑰本身就可以完成這一步。

正因為如此,這個私鑰的擁有者就可以簽名一個交易花掉比特幣而不必擔心其它人知道這個私鑰並偷走比特幣了。這個私鑰永遠不會洩露,而且這個簽名只對這一個交易有效。

Schnorr簽名

那麼什麼是Schnorr簽名呢?

Schnorr來源於它的發明人的姓名Claus-Peter Schnorr,它是一種簽名策略:一系列連線私鑰、公鑰和簽名的數學規則。很多密碼學家認為Schnorr簽名在相關應用中是最好的,因為它有很高水平的正確性,沒有延展性問題,驗證速度相當快,最重要的是支援多重簽名:可以把多個簽名聚合成一個新的簽名。

然而,到目前為止,Schnorr簽名還不能在比特幣中使用,另外一種類型的簽名策略——橢圓曲線數字簽名演算法(ECDSA)整合在比特幣協議中,改變這些需要硬分叉。

隔離見證此時就發揮了作用。

隔離見證會把所有的簽名資料轉移到一個交易上的獨立空間中:見證資料(witness)將不會被嵌入“老的”比特幣協議中。多虧有了指令碼版本控制,所有見證中的規則都可以通過軟分叉來改變,包括這種簽名策略的類型。

這就為Schnorr敞開了大門。

容量

Schnorr對比特幣最大的好處是多重簽名聚合。

很多比特幣交易包含多個輸入,這些輸入記錄著這些比特幣的來源地址。(這相當於在實體世界中把零錢攢在一起支付一個大的交易一樣。)到目前,這些輸入都需要有各自的簽名,這意味著一個交易必須包含所有這些簽名,網路必須傳輸所有這些簽名,同時一個區塊必須包含所有這些簽名。

但是,使用Schnorr簽名,所有的這些輸入只需要一個合併簽名就可以替代所有這些不同的簽名。很明顯這將帶來資料上的優勢,因為,一個交易只需要一個簽名就行了,而且,網路只傳輸這一個簽名,一個區塊只包含這一個簽名。這意味著為交易騰出了更多的空間。

舉例來說:BitcoinCore給出隔離見證方案,可以讓所有的見證資料大小減少75%。因此1MB的見證資料可以壓縮到0.25MB,這就在原來的區塊多騰出了了0.75MB空間給交易資料。然後,聚合的Schnorr簽名又可以減少見證資料量,按照1MB可以減少0.5MB來算,那麼通過這兩次減小,見證資料可以壓縮到0.125MB,原來的區塊可以騰出的空間就上升到0.845MB。(相當於區塊容量提升大約17%)

能騰出多少空間取決於區塊中所包含的的交易的類型。比特幣Core開發者 Eric Lombrozo粗略的估算,Schnorr簽名最終會把總容量提高至少40個百分點——而且是在隔離見證增加60%到100%容量之後。

多重簽名

上面所描寫的容量提升只是針對一般交易,也就是包含多個輸入的交易。在多重簽名交易中,Schnorr的威力更加強大(多重簽名交易中,一個輸入需要多個簽名,通常這些簽名來自不同的人)。

就像正常的交易一樣,多重簽名交易將只需要單個簽名替代多個簽名,不管它本來需要多少簽名,也不管這個交易涉及的人有多少。

這為更為複雜的智慧合約架構打開了大門,這隻需要一點點的資料需求量。不管是多重簽名交易類型是2/3,還是3/15,或者100/100等,所有類型需要的簽名資料量是相同的,和單簽名交易類型所需量一樣。

隱私

Schnorr簽名帶來的第三大優勢是:刺激了隱私保護。

就像上文所說,一個交易可以包括多個輸入。通常情況下,與這些輸入相連的地址都屬於同一個人。(就像上文提到的零鈔和硬幣的例子)。

比特幣Core開發者Gregory Maxwell發明了一種隱私強化方法——CoinJoin,它可以讓不同的使用者把他們的交易組合進一個交易中。這個交易包含來自不同交易的多個輸入,然後把錢傳送的多個輸出中,傳送給不同的收款人。

這相當於一個組織的人,把各自的錢和硬幣放在一個籃子中,去不同的商店購物。每一個個體將會得到他付過錢的商品,不必每個個體自己去購買商品。

如進展順利,CoinJoin將成為在比特幣協議中加強隱私的一種方式,因為哪個輸入支付了哪個輸出變得不明確,更不要說哪個人支付了那個誰誰。

CoinJoin並不是一個新概念,但到目前CoinJoin的使用還存在困難,大部分的人視其為可有可無的功能,因為大部分人的這種不理會態度,那些想使用此功能的人就被認為別有目的;這首先給CoinJoin造成打擊。

然而Schnorr簽名可以為CoinJoin帶來新的優勢。它讓所有CoinJoin交易的參與者不僅可以組合他們的交易,而且可以組合他們的簽名。這意味著這個交易的體積比所有個體交易組合要小得多。同樣,這也意味著礦工打包這個交易所有的費用要小很多。

通過使用Schnorr簽名,CoinJoin不僅可以加強隱私,最重要的是可以降低每個人的交易費用。實際上,為了使用最優隱私選項,需要支付一個成本,這只是一個人人可以選擇的選項,它大大加強了比特幣的隱私保護。