作者:Cassandra Heart, Arash Afshar

數字簽名是區塊鍊和加密貨幣的一個基本概念。現代區塊鏈使用數字簽名來確保數十億美元的價值。數字簽名使用所謂的密鑰對,即一對看似隨機的值,其中一個密鑰是“私鑰”,另一個密鑰是“公鑰”。通過數字簽名,任何擁有“私鑰”的人都可以“簽署”交易並使用數字貨幣。因此,保護好“私鑰”是至關重要的。一些精通技術的區塊鏈用戶選擇自己保護這把鑰匙,並接受被盜或丟失鑰匙的風險(因此損失他們的資金)。相反,其他區塊鏈用戶信任在線錢包或交易所,並保護他們的密鑰。當然,這個決定也伴隨著基於第三方能力的一系列風險。

在這兩種選擇中,用戶將所有信任都放在一個實體中,這可能並不理想。輸入閾值數字簽名:一種需要至少兩個合作參與者的“閾值”來產生簽名的解決方案,它消除了信任單個實體的問題。在本文中,我們:

提供閾值簽名及其應用的直觀描述,深入挖掘並研究各種閾值簽名方案,以及將閾值簽名與其他技術(例如Mulitsig 錢包)進行比較。

閾值簽名

作為閾值密碼學領域的開發者,看到這些創新成為主流話題真的很令人興奮,但不熟悉密碼學或其背後數學的讀者在遇到“Paillier密碼系統”、“同態加密”或“ Galois域”等短語時,很快就會遇到障礙。當你討論它背後的所有活動部分以協調溝通時,它就變得更加複雜了,因此,很少有組織願意研究它的潛力。但這並不可怕;最後,數學歸結起來無非就是乘法和加法。那麼讓我們來看看:閾值簽名到底是什麼?

從比喻的角度來說,簽名就類似於在一根看不見的繩子上放風箏。風箏本身就是公鑰——每個人都能在天空中看到它。放風箏的人通過操縱看不見的繩子——即私鑰來移動風箏。它在空中飛行時所走的路就是它的標誌。每個人都看到風箏在那條路上飛過天空,只有使用那條看不見的線,才有可能實現那條飛行路徑。與基礎數學相比,這感覺真的很簡單,但最終這個比喻對於展示“閾值簽名成為可能”而所需的協調和工作很有用。

輸入閾值密碼學。閾值的前提就在其名稱中:必須滿足某個數值才能使操作成功。通常,這些進程使用短語“t (n)”來定義,其中n是可能的參與者總數,t是必須滿足的閾值。 Shamir的秘密共享方案是一種已經使用了相當長時間的通用閾值加密方案。對於那些不熟悉的人來說,這個過程使用了一種叫做拉格朗日插值的數學技術,將分裂的值重新組合成一個秘密值。在比喻的世界裡,它是把看不見的線,並把它分成許多人可以抓住的單獨的線,為了放風箏,必須有一定數量的人聚集在一起,把他們的線重新組合成線。

這一過程運行良好,全世界的服務都使用它來保護秘密數據。缺點是,當分解和重組秘密時,每個人都必須在一個安全的地方進行這個過程。在加密世界中,這也意味著,一旦私鑰被重新組合併用於簽名,它應該被認為是暴露的,並且該密鑰持有的所有資金都應該被轉移,如果任何幫助重新組合密鑰的參與者走開了,他們不能做任何有意義的事情了。這是昂貴的,更不用說,需要很多人的協調。如果我們能利用密碼學背後強大的數學原理並加以改進,讓所有人都不必在安全的地方見面呢?

好消息是我們可以!大量文獻一夜之間湧現出來,提出了對現有密碼系統改進的新方法,以及完全開創性的密碼協議。探索這一領域需要大量的時間和專業知識,但在Coinbase,我們已經發現並實施了使我們能夠利用這些方法的策略,並在新方法被發現和同行評審時支持它們。在這個過程中涉及到很多東西,所以讓我們回到這個比喻。

讓我們狂熱的風箏愛好者們準備好風箏的過程最終是一個獨特的轉折,使整個過程得以進行:每個參與者都遵循同樣的規則:他們帶著自己看不見的線,和自己的風箏。每個參與者都事先與其他人商定如何飛行,然後他們都帶著自己的風箏以商定的速度、角度和時間繼續奔跑。如果有人偏離了約定的飛行計劃,整團亂成一團的風箏就會墜落到地面,但如果每個人都按照約定進行,風箏就會騰空成一體,能夠按計劃飛行。當飛行結束時,這些部件在空中分解,每個人都帶著他們的風箏和線回家。在任何情況下,都不會有一個人拿著整個風箏或線,每個人都提前看到飛行計劃,知道沒有人會嘗試一些瘋狂的滑稽動作,讓他們帶著風箏逃跑。

深入地研究閾值簽名

現在我們已經對閾值簽名有了直觀的理解,接下來讓我們深入了解一些概念和術語。閾值簽名方案是密碼學中安全多方計算(MPC)領域的一部分。 MPC的主要目標是實現對私有數據的計算,而不將它們透露給除私有數據所有者以外的任何人。例如,在風箏的比喻中,不可見的線程片段是私鑰的秘密部分,閾值簽名使用這些秘密部分重建私鑰,並在不暴露複合私鑰和秘密部分的情況下簽署交易。

閾值簽名的一個非常重要的組成部分是一種稱為橢圓曲線密碼學的數學構造。 、是給定" y = x·G ",其中" y "和" G "是公開值,在合理的時間範圍內很難甚至不可能找到" x "。有許多“曲線”提供這個屬性:

Secp256k1,用於比特幣,以太坊等Edwards25519,它被用於Cardano, Monero等BLS12-381,在以太坊2.0和其他一些鏈中使用

給定一個合適的橢圓曲線,實現閾值簽名的下一步是首先選擇一個標準(即單簽名人)數字簽名方案。目前流行的數字簽名方案如下:

ECDSA,基於比特幣使用的Secp256k1曲線Schnorr,基於Secp256k1曲線使用的Bitcoin Cash 和MinaEd25519,基於Cardano使用的Edwards25519曲線

最後,給定一個數字簽名,我們現在可以討論閾值簽名方案。閾值簽名方案從單簽名者方案開始,並在“n”參與者之間拆分私鑰。然後,在簽名階段,t-out- n的參與者可以運行簽名算法來獲取簽名。最後,任何單個(外部)方都可以使用驗證單個簽名者簽名的相同算法來驗證簽名。也就是說,閾值簽名和單簽名方案生成的簽名是可以互換的。換句話說,閾值簽名算法有三個階段。

生成公私鑰對。接下來,將私鑰分割為多個秘密份額,並在“n”方之間分發這些份額。這個階段可以在兩種模式下執行。可信經銷商模式:單個可信方生成私鑰,然後拆分和分發密鑰。這種方法的主要問題是,經銷商將以明文形式看到私鑰。分佈式密鑰生成(DKG):一個MPC協議在n個參與者之間運行,這樣在最後,參與者將獲得秘密份額,並且在過程的任何時刻都不會有人看到明文形式的私鑰。收集一個閾值" t "參與者,並運行MPC協議來簽署交易。使用標準簽名的驗證算法驗證簽名。

閾值簽名方案發展迅速。在撰寫本文時,安全且受歡迎的方案包括以下幾種。

FROST是一個閾值簽名和DKG協議,它提供最小的通信輪次,並且可以安全的並行運行。 FROST協議是Schnorr簽名方案的閾值版本。

DKLs18:二選一閾值簽名和DKG協議,為ECDSA簽名方案提供快速簽名計算。

閾值簽名和多重簽名

多重簽名方案提供了與閾值簽名相似的功能,但有一點不同:每個參與者都有自己的公鑰(而不是一個公共公鑰的秘密份額)。這個微小的差異對成本、速度和各種區塊鏈上的多重簽名的可用性有巨大的影響。

效率:在閾值簽名方案中,每個公鑰及其相應的私鑰份額永久屬於一個單一的、固定的簽名者組;在多重簽名中,每個參與者都有自己獨特的專用公鑰。後一種方案的好處是,每個這樣的參與者都可以重用其公私密鑰對,從而參與任意多個不同的簽名組。然而,使用多重簽名的代價是,表示任何特定此類組的“公鑰”(實際上是一個公鑰列表)的大小必須隨著該組成員的數量線性增長。類似地,多重簽名的驗證時間顯然必須與組的大小成線性增長,因為驗證者必須讀取代表組的整個公鑰列表。相比之下,在閾值方案中,只有一個公鑰代表整個組,而且密鑰大小和驗證時間都是不變的。可用性:為了確保滿足" t "的最小閾值,區塊鏈應該具有多重簽名的本地支持。在大多數情況下,這種支持以智能合約的形式存在。因此,並不是所有的區塊鏈都支持多重簽名錢包。相反,基於MPC的閾值簽名是獨立於區塊鏈的,只要區塊鏈使用的簽名方案有一個安全的閾值版本。

小結

閾值數字簽名使我們能夠做以前在加密貨幣中不可能做到的事情——多重簽名協議需要額外的成本來操作,但這可以在沒有智能合約的情況下發生。這意味著我們可以支持一個全新的錢包層:在傳統的託管錢包或自託管錢包選項之前,這個閾值ECDSA方法允許客戶積極參與這個簽字流程。在這種方式下,用戶持有一份私鑰,Coinbase持有另一份,只有雙方都同意飛行計劃,才能簽署交易。這提供了我們在Coinbase眾所周知的安全和信任,用戶仍然是控制的一方。

Source:https://blog.coinbase.com/threshold-digital-signatures-1d467054acd4