Skip to content

Latest commit

 

History

History
164 lines (94 loc) · 12.8 KB

區塊鏈替代簽名方案優劣勢對比,Schnorr簽名最適合比特幣.md

File metadata and controls

164 lines (94 loc) · 12.8 KB

區塊鏈替代簽名方案優劣勢對比,Schnorr簽名最適合比特幣

來源:https://www.8btc.com/author/3708 灑脫喜 2019-02-13 12:23釋出在 技術指南  70532

作者:Leland Lee(獨立)和Dev Ozha(加州大學伯克利分校/前Tendermint)

p6|1160x768

(圖:有時我們需要多個簽名來完成工作)

具有諷刺意味的是,一些市值數十億美元的加密貨幣本身並不支援多重簽名。其中m-of-n的簽名者需授權一筆交易。我們不需要審判,因為也許我們只設計了一把私鑰[0]。但這不是我們想要生活的世界,因為誰都不想因為錯誤的智慧合約或丟失的私匙,而損失數百萬美元。

今天,我們將研究各種適用於UTXO和帳戶模型的交易簽名多重簽名方案。請注意,一些方案仍在被積極研究當中,並且會有多種具有不同屬性的構造。如果讀者因本文涉及太多的技術內容,而不想看這些枯燥的東西,您可直接跳至“權衡空間”部分,檢視各簽名方案的優劣勢。

在目前的情況下,現有的區塊鏈已採用了幾種不同的系統,讓多個所有者控制同一筆區塊鏈token,以太坊是基於智慧合約,而比特幣則基於指令碼(例如P2SH)。

  1. 基於智慧合約的例子:以太坊、Tezos、EOS、Vechain、ETC;
  2. 基於指令碼的例子:比特幣、萊特幣、Iota、 Cardano、Zcash[1]、NEO、DASH、Decred;
  3. 客戶端內建:恆星(Stellar)和瑞波(Ripple);
  4. 自定義密碼系統:GRIN[2]和門羅[3];

一、簽名是如何工作的

s1|1556x418

為了在任何區塊鏈上傳送有效的交易,必須採取幾個步驟:

  1. 構造一筆有效交易;
  2. 使用帳戶或UTXO的相應私鑰簽署交易;
  3. 將簽名的交易提交到網路;
  4. 礦工(或節點驗證者)核實交易和簽名;
  5. 交易被放置到一個區塊當中,並更新相關的區塊鏈狀態;

二、非密碼技術及其問題

智慧合約 :雖然基於智慧合約的多重簽名帳戶提供了很大的靈活性(無限定製),但從歷史上看,它們在程式碼、語言、虛擬機器和編譯器方面都存在缺陷。由於與人類有關的錯誤,數億美元的區塊鏈token被永久鎖定了。

指令碼 :與智慧合約平臺不同,比特幣具有更原始的指令碼語言。區別也很明顯:非圖靈完備、非編譯、沒有虛擬機器,也沒有“狀態”的概念。這是否會使加密貨幣變得不那麼有用,這一爭論將在其他地方展開。但更重要的是,其對多重簽名有特定的操作碼。在比特幣和比特幣相關分叉中,有一個特殊的指令碼被稱為支付到指令碼雜湊(Pay-to-Script-Hash),其被用於建立多重簽名帳戶。在這裡,讀者可找到一個深入的解釋。

比特幣的多重簽名地址和以太坊的多重簽名錢包都要求在傳送交易時提交所有相關簽名。我們今天將探討的一些方案,只需要提交一個簽名,從而節省了寶貴的鏈上空間,並可能使地址與單個私鑰地址無法區分(增加隱私性)。

三、各類加密簽名技術

在本文當中,我們會探索各種技術,將多重簽名新增到區塊鏈協議當中。注意,這些技術均不是什麼萬能藥,因為每種方案都會存在各種權衡,在確定哪種技術最適合特定情況之前,我們需要去徹底探索。

1、沙米爾祕密共享演算法(SSS)

s7|1600x704

注:這不是經典意義上的多重簽名,儘管這裡討論的是為其他形式的密碼多重簽名提供反例。

這裡使用一個私鑰來派生n個碎片,其中的m是重建私鑰所需的。此方案通常用於金鑰恢復,如果使用者丟失了私鑰,則可使用使用者分發給不同朋友的碎片重建原始金鑰。但是,它不適用於多重簽名,這是因為:

  1. 必須生成私鑰才能派生碎片;
  2. 在簽署交易之前,必須從碎片重新組裝私鑰;

這意味著存在一個可信生成和重新組裝的步驟,這是一個故障點。另外,個人碎片持有者沒有發言權,他們提供的只是碎片。可信硬體可減輕可信生成和簽名問題,但這會導致諸如側通道攻擊、可用性等問題。

儘管如此,應注意SSS的一些獨特特性,其可在不修改基礎金鑰/私鑰的情況下建立儘可能多的不同的共享集。因此,如果Alice最初擁有10個祕密,而非朋友關係的Bob是一個祕密持有者,那麼Alice可重新生成9個祕密,並將其交給其餘的受信任方(他們希望銷燬舊的持有部分,使Bob的祕密持有毫無用處)。

2、門限ECDSA

s7|1600x704

在門限ECDSA方案中,我們消除了沙米爾方案存在的一個漏洞。在這裡,我們描述了Steven Goldfeder在其ECDSA MPC論文中開創的一項最新建設,在金鑰生成和簽名效率方面,這項建設超過了以前的ECDSA工作。

使用分散式金鑰生成(DKG)方案,所有金鑰持有者都參與一個互動過程,該過程為自己生成一個私鑰,並生成一個公鑰。這樣可確保任何一方都不會知道真正的私鑰。在此構造金鑰生成之前,只能使用一個可信方,因為對於大於兩個的參與方來說,計算時間太長了。

據目前所知的是,Keep Network和Kzen Networks在運用這種閾值ECDSA方案。

3、門限ED25519

s7|1600x704

ECDSA的一個問題是,由於簽名演算法的複雜性,閾值簽名是很複雜的。然而,對於其他簽名方案,如EdDSA(Edwards曲線數字簽名演算法),尤其是曲線Edwards25519,其簽名方案ED25519具有相對更有效和更直接的閾值簽名。使用者生成自己的金鑰,然後有一個聚合步驟來建立單個公鑰,交易簽名有三輪互動協議。

Kzen Networks已經為ED25519門限簽名實現了一個參考庫,恆星(Stellar)[4]、Near Protocol以及Cosmos使用了相同的曲線,但不實現加密門限簽名。

4、Schnorr簽名

s7|1600x704

在比特幣中,Schnorr簽名是簽名聚合的一種形式。相比使用P2SH,其與金鑰數成線性增長關係,而簽名聚合允許使用恆定大小的簽名。驗證者不需要知道簽名者的個人公鑰,從而增加了隱私性。在這方面,Blockstream正大力推動將這種技術應用於比特幣。

在Schnorr簽名方案論文(第5.3節)中,有幾種方法可實現m-of-n多重簽名,並進行各種權衡,在某些方案中,使用者提供自己的金鑰,而在其他方案中,必須有一個DKG。一般來說,至少有一輪的金鑰生成和交易簽名通訊,交易簽名也不能很好地擴充套件到大的m或n。

5、BLS簽名方案

s7|1600x704

所謂BLS簽名,其全稱為(Bohen-Lynn-Shacham)簽名方案,這種方案在大簽名集的情況下來說是非常有效的。也就是說,我們可以有2-of-10或2-of-1000多重簽名方案,而在設定和簽名時間上和普通簽名方案几乎沒有任何區別。對於設定階段,唯一需要做的就是為每個私鑰生成成員金鑰,這隻需要一輪通訊因為使用者提供自己的私鑰,所以可以使用HD派生等技術來輕鬆管理多個金鑰。使用者離線簽署交易,單個聚合器彙總簽名並提交。

使用成員金鑰的這種特殊構造是相當新的,另一種方法是利用沙米爾祕密共享方案(dfnity和dash在用),但是需要一個可信方或DKG。BLS簽名方案的一個缺點在於,其簽名驗證會是緩慢的,它比ECDSA要慢上一個數量級。

四、權衡空間

當從遠處觀察這些技術時,我們可能會認為某些技術會優於其他技術。不幸的是,當我們潛入到權衡領域時,我們會發現,情況並非如此。一些技術對於較大的簽名者組而言更可取,一些技術則更適合於低頻寬環境。在這裡,我們探索一個非詳盡的屬性列表,以分析以上各類技術。

原像 :是否有必須拆分的私鑰?

可信設定 :是否存在生成金鑰的單個實體,或者是否存在分散式金鑰生成方案?

檢測多重簽名 :區塊鏈的檢視者能否確定特定地址是否為多重簽名地址?

HD派生 :是否可以為相關的加密過程設定硬體確定性金鑰?

(使用者可以使用像bip32這樣的技術,這樣他們只需要記住自己的種子,而不需要記住一堆私鑰)

權重 :是否可以為特定的私鑰分配不同的權重?(例如:1-of-2 多重簽名,其中金鑰持有人A的權重為2,金鑰持有人B的權重為1,表示A不需要B簽名,但B始終需要A)。

能見度

  1. 簽名者的隱私 :區塊鏈的檢視者能否確定誰是交易的特定簽名者?
  2. 簽名大小:多重簽名交易是否需要更多的鏈上空間,空間大小是否隨簽名者的數量而變化?

時間

  1. 金鑰生成時間 :生成金鑰需要多長時間,金鑰生成時間是否根據參與方數量增加?
  2. 金鑰生成回合 :如果金鑰生成是互動的,參與者需要互動多少次?
  3. 驗證時間 :驗證簽名需要多長時間?
  4. 簽名時間 :簽署交易需要多長時間?

簽名

  1. 互動式 :簽署交易需要多少輪通訊?
  2. 曲線效率 :儘管其中一些技術適用於所有曲線,但有必要考慮曲線效率和輔助因子選擇等問題。

s7|1600x704

圖:以上方案的權衡考慮,注意每個方案都有幾個構造,導致會有不同的屬性。

五、未來發展

儘管有很多不同的技術可以為區塊鏈啟用多重簽名帳戶,但我們必須認識到協議中的設計注意事項。其中一些技術需要更改底層協議,而另一些則不需要。協議設計者應意識到在使用者體驗和未來的密碼技術進步校對中的隱含權衡。

有趣的事實:簽名比傳送交易有更多的用途。它們可用於權益證明系統中的區塊簽名、具有較小區塊鏈的聚合簽名以及交易壓縮。

六、有趣的問題

現在,您大概瞭解了一些關於加密多重簽名的知識,在決定實現協議時應選擇哪種簽名方案時,這裡有一些問題是值得探討的:

  1. 是否存在希望能夠區分多重簽名帳戶和鏈上單個簽名帳戶的用例;
  2. 門限密碼系統提供了一種屬性,在該屬性中,單個金鑰簽名者是未知的,這在哪裡有益或有害?
  3. 有沒有可能有一個允許選擇性公開的簽名方案,在某些交易公開簽名者,而在其他交易則不公開?
  4. 有沒有可能有一個只顯示簽名者的一個子集而非全部簽名者的簽名方案?
  5. 是否可能有一個方案,其中籤名方無法確定互動步驟中的其他簽名方是誰?
  6. 當無法使用HD錢包時,金鑰管理如何工作?
  7. 對於BLS方案,人們可使用HD金鑰,但是需要生成其他成員金鑰。當用戶丟失其成員金鑰時,協議應該是什麼樣的?
  8. 多重簽名應該完全位於加密領域,還是應該在智慧合約/指令碼和加密之間保持平衡?
  9. 是否存在簽名大小根本不重要的情況,因為簽名被丟棄,或者存在一種新的壓縮形式?

腳註

[0]從技術上講,假設存在加密簽名,所有區塊鏈都具有原生多重簽名的形式。然而,對於任意的簽名演算法,尋找一個有效的門限簽名方案是相當困難的。

[1]zcash目前使用P2SH,在即將到來的Blossom更新中,它將切換到自定義加密結構。

[2]GRIN是加密貨幣中唯一使用基於密碼學的多重簽名方案,類似於比特幣的保密交易。該方法的一個缺點是,其是按照他們的協議定製的,很難概括。

[3]門羅幣只支援n-of-n和(n-1-of-n)多重簽名方案,前者與Splitkey非常相似。

[4]恆星(Stellar)有多重簽名,但沒有在密碼學中實現,而是通過使用他們的指令碼語言來實現的。

[5]注意,對於UTXO模型,有一個一次性互動步驟來生成公鑰,這對於使用者想要花費的解鎖指令碼而言是必需的。