原創丨BLS算法的魔幻之處——祕鑰共享與閾值簽名

算法 數學 比特幣 共享財經 2019-04-27

摘要:在以太坊未來的 Casper 實現中,有非常多的驗證者都要對區塊簽名,加密貨幣簽名算法BLS 的脫穎而出自有它的道理。


原創丨BLS算法的魔幻之處——祕鑰共享與閾值簽名


加密貨幣簽名算法BLS (Boneh-Lynn-Sacham)是一種可以實現簽名聚合和密鑰聚合的算法(即可以將多個密鑰聚合成一把密鑰,將多個簽名聚合成一個簽名)。

在以太坊未來的 Casper 實現中,有非常多的驗證者都要對區塊簽名,要保證系統的安全性,同時節約存儲空間,就需要用到這類簽名聚合的算法。

此前,Stepan Snigirev寫過一篇關於BLS的文章,很好地解釋了BLS背後的基礎知識和數學。文章中Stepan還解釋了BLS的一些屬性(例如可聚合)和用例以及如何使用聚合簽名來實現簡單的閾值方案。

相比於其他簽名算法(如ECDSA),BLS可以說是純粹的魔法!

BLS擁有著獨一無二的屬性。此外,本文還將著重介紹一種分佈式密鑰共享方案和一個基於BLS的閾值簽名方案。

提出的方案在鏈上產生單個公鑰和簽名,並且在發送到m-of-n地址或稍後交易輸出時,不需要存儲關於公鑰共享或簽名者的元信息。

事實上,它與任何普通的1對1地址或消費沒有什麼區別,但由於附加作用,它改善了隱私性。

BLS的一些特質

在眾多簽名算法中,BLS具有一些非常獨特的屬性。如果沒有這些(屬性),後來提出的祕鑰共享方案也是不存在的。

換句話說,如果BLS沒有這些屬性,我們甚至不會知道其將如何運作。

聚合性

此前,我們對BLS聚合的特點做了詳細的闡述,在此我們要著重關注的是,使用BLS,可以聚合所有類型的基元(密匙、公鑰、簽名),而結果總是另一個有效的基元。

例如,如果聚合兩個密鑰,結果則是一個新的有效密鑰。如果聚合密鑰的兩個對應的公鑰,結果則將是一個新的公鑰,且該公鑰與之前聚合的密鑰的公鑰相匹配。

如果使用之前聚合的兩個密鑰和相同的哈希來創建的兩個簽名,那麼新簽名也將針對聚合的公鑰進行驗證。已經聚合的基元還可以進一步聚合,獨立於聚合的順序之外。

我們甚至可以這樣概括。對於任何一組給定的密鑰、公鑰和簽名元組,在其中一個基元上執行的任何操作,都可以在其他基元上重複相同的操作,並獲得一個相互關聯的新元組。

此外,如果操作嵌套更加複雜,其會更加適用。在這個方面,ECDSA算法就不可能做到。例如,多項式求值和插值可以與任何BLS原語一起使用,包括簽名(非常難實現且受ECDSA限制),該特性將會允許一些很有趣的事情發生,之後我們會具體說明。

獨特性和確定性

BLS簽名是惟一且和確定的。這意味著,對於任何給定的公鑰和消息對,都只存在一個有效的簽名。不可能存在兩個不同的簽名去驗證相同的公鑰和消息的情況。

與ECDSA相比,這是非常不同的,在ECDSA中,使用簽名的隨機性可能會導致相同公鑰和消息對應的簽名數量不可計數。

當涉及到包含BLS簽名的其他消息時,其會產生積極的影響。比如“交易比特幣”這種消息總是會產生相同的哈希值,並且不可能修改簽名,消息是仍然有效的,但結果(哈希值)卻不同。

如果將BLS用於加密貨幣,該特性將具有重大意義。它將一次性地修復交易延展性,而不需要特定的延展性修復。與ECDSA相比,BLS已經具有許多優勢,而可塑性修復只是其中一種“免費”附加的功能。

此外,在BLS原語執行的每個操作都是確定的。這意味著,使用相同的輸入可以重複一個操作。

例如,從一對密鑰和哈希消息中創建簽名,則生產的簽名始終相同。這在一定程度上與BLS的唯一性有關,但也有一些其他含義。

確定性甚至適用於操作嵌套複雜的情況,其將允許非常有趣的用例和模式存在,其中最有趣的模式可能就是基於共享密鑰的閾值簽名。

Shamir的祕密共享與BLS

BLS描述的屬性已經足夠吸引人,但真正的魔力才剛剛開始。

Shamir(著名密碼學專家)的祕密共享(Secret Sharing)是一種閾值方案,它已經為人所知很長一段時間,如果操作正確,它被證明是安全的。

Secret Sharing允許獲取一個祕密並從中創建一組“祕密共享”。共享的祕密不會洩漏關於原始祕密的任何信息,因此它本身是無用的。只有收集到足夠的信息(m-of-n),才有可能從其中恢復原始祕密。

如果一個人只知道其中的一部分m-1,他仍舊會毫無頭緒。祕密可以是任何由整數表示的東西,包括任意二進制或文本數據,或者更重要:祕鑰。

簡單來說,Shamir的Secret Sharing就是使用多項式求值去創建祕密共享,然後使用多項式插值來恢復原始祕密(具體概念可以在網絡上搜索),在這裡我們就不多做解釋。

利用Secret Sharing已經開發出一些應用程序,然而,將其應用於加密公共祕鑰,尤其是ECDSA,則仍存在一些問題。

從m-of-n組密鑰共享中恢復密鑰的人將獲得原始密鑰,使用ECDSA無法避免這種情況,因為要創建簽名,需要擁有完整的密鑰。

如果你是唯一的參與者,並且使用此方案將您的密匙劃分為多個密匙共享,並希望將其存儲在不同的位置,那麼這在一定程度上是可以實現的。但當您的計算機在恢復時受到某種程度的危害,密鑰就會處於危險之中,就會出現問題。

然而,對於BLS,情況就不同了。創建密鑰共享與使用ECDSA的方法相同。不同之處在於,生成的密鑰共享也是有效密鑰,其可用於簽署消息並創建有效的簽名。這些簽名只是“簽名”共享,並且僅針對密鑰共享的公鑰進行驗證。所以,光靠這些是沒用的,沒有人能用它們做任何事情。

神奇之處在於,如果你在m-of-n中採用簽名共享,並執行與通常處理祕密共享相同的多項式插值,你將恢復一個新簽名,該簽名與使用原始密鑰時創建的簽名可能相同。但如果使用ECDSA,這將無法實現,因為你不能對簽名執行任何有意義的操作。

這意味著,原始的密鑰再也不會被觀測到,你可以將密鑰共享保留在原來的位置,而不必為了簽署一條消息又一次臨時複製它們。相反,你可以在不同的計算機、硬件錢包或其他設備上對消息進行多次簽名,然後在一臺計算機上收集簽名共享,以便恢復最終簽名。

下篇我們將對BLS算法如何應用於加密貨幣以及其表現情況做著重闡述。

翻譯:共享財經Lam 責任編輯:Alian

(本文系共享財經原創翻譯,轉載請註明出處及作者)

相關推薦

推薦中...