比原鏈研究院 | 一種弱同步網絡假設下的門限簽名系統

近幾年門限密碼學在區塊鏈系統裏開始逐漸被應用,分爲門限加密和門限簽名,一般見於隨機預言機、防審查、減少通信複雜度(HotStuff)、共識網絡中防拜占庭(HoneyBadgerBFT 中用於 BA 環節的 common coin)以及作爲分佈式僞隨機數生成器(coin tossing)的重要原語,其優越的資產協同防盜特性也慢慢被新興數字資產託管機制所重視,今天我們主要討論公鑰密碼學(PKC)裏的門限簽名機制。一種理想的門限簽名系統是可以在異步的網絡環境裏做到容錯容災不可僞造(non-forgeability),並且擁有極度可靠安全的消息傳輸通道,簽名份額的生成和驗證是完全非交互式的,在初始密鑰階段具備可以防止拜占庭行爲的異步分佈式密鑰生成(DKG)機制。

與基礎簽名機制類似,門限簽名機制(Threshold Signature Schemes)也分爲兩部分:

門限密鑰生成(Thresh-Key-Gen):基於安全參數構造一種分佈式密鑰生成協議 DKG,協議運行輸出一個共同的公鑰 pk 和分屬不同參與方各自所有的私鑰份額 ski,聚集起滿足閾值數量的私鑰份額可以構建出真正的私鑰 sk。

門限簽名(Thresh-Sig):基於分佈式通信網絡,各參與方通過自己的私鑰份額 ski 完成對消息 m 的分佈式協作簽署並輸出最終的可驗證簽名 Sig(sk, m),這個簽名跟單獨用 sk 私鑰簽出的一模一樣,可以用所基於的基礎簽名機制裏的驗證函數進行本地驗證,無需走通信交互驗證

但是大多數情況下會通過使用一個可信的中心節點(dealer)來實現私鑰份額的生成和分發。沙米爾祕密分享(Shamir Secret Sharing)是最簡單的依賴中心 dealer 節點的門限密鑰生成方法,基本原理是拉格朗日插值,在 (t, n) 門限構造中,dealer 會選擇一個 (t-1) 次方的隨機多項式 f,令 f(0)=s,s 即爲要分享的祕密值,然後向每個節點分發該多項式曲線上的點 si=f(i) 作爲各自的祕密份額值,簡單來講,三個點確定一個二次方程曲線(Lagrange interpolation formula)。爲了解決中心作惡問題,人們又不斷探索了基於承諾(commitment)的可驗證祕密分享(VSS、PVSS),以及應用於異步網絡的 VSS(Cobalt BFT 在區塊鏈系統裏也嘗試了結合 PoW 准入機制的 AVSS)。有許多優秀成熟的 commitment scheme 可以借鑑應用,簡單來講承諾(commitment)算法 [C(M), D(M)]=Com(pk, M, r) 中 pk 是與承諾機制有關的公鑰,M 是要承諾的原始值,r 是一個隨機骰子,算法輸出的 C 便是 commitment,D 則是需要祕密保管的 decommitment 值,在正式公開 M 之前先公開 M 的承諾 C,即先對自己要公佈的消息做個上帝擔保,約束自己無法更換 M,而對於 M 的受衆或者接收者,它們可以通過之前公佈的承諾和驗證算法進行驗證唯一性。這裏我們主要關注非交互式的 VSS 實現。

此外,在過往的研究裏,簽名(Sig)的生成和驗證大多是交互式的,並且依賴一個同步通信網絡和廣播通道(broadcast channel),節點們在某種設定下接收到特定消息後便同時啓動簽名協議,並嚴格遵循超時機制。而在互聯網環境和區塊鏈網絡裏,對網絡假設的限定是有限的,所以門限系統要成功運作除了需要構造真正的 DKG 協議和非交互式簽名機制外,還需要具備商用級的網絡系統以及被驗證過的成熟代碼實現。這裏我們(Bytom)嘗試提出並構建一種弱同步網絡假設下的門限簽名分佈式系統,主要對網絡模型、DKG 構建、簽名機制進行一些創新結合和應用,探索在實際網絡環境裏最小可實用的門限簽名系統原型。

門限系統是一種(t, k, n)型 fault-tolerance 系統,t 代表網絡最大容錯,k 代表最小門限值,n 是節點數,一般設定 k>=t+1,但這種對網絡分區(network partition)是無能爲力的,所以在一個異步拜占庭網絡裏我們依然選用經典設定 k=n-t & t<n/3 去達成系統裏的一個大多數共識。

門限網絡或者通信模型是實現可實用門限系統需要認真考量的一個關鍵點。像 HoneyBadgerBFT 所構建的接近異步通信網絡在現實案例中是少見的,一般會增加消息複雜度和通信輪次,異步網絡模型主要依賴所接收到的消息類型和數量進行判斷,因爲時間因子(time-based)並不能區分誰是慢節點誰是惡意節點。但在這裏我們更傾向採用高效的弱同步網絡假設,即消息延遲和時鐘偏移有上限(實際可接受)但未知,延遲的漸進是合理的,保障 liveness(safety 可以採用妥協的方法處理);能夠對 crash、network failure、byzantine 等不同情況儘量做到分開處理,比如設置規定時間內可容忍的 crash 閾值,對於誠實節點發生 crash 後能夠從一個規定的狀態恢復等;並且假設網絡故障總能被修復、遭受的 DoS 攻擊總會停止;最後在構建通信通路上可以藉助 PKI 和外部 CA 構建 TLS 鏈接,以及藉助經典的 RBC 協議(reliable broadcast channel)。

DKG 是門限簽名最爲核心的環節也是第一階段,負責完成門限密鑰的生成和分發。VSS 是 DKG 的重要組成部分。上面提到 VSS 的基本原理是承諾機制,一般基於 Pedersen commitment,構造形如 C=mG+nH 的承諾(這裏我們省去了一些對橢圓曲線羣運算特徵定義和假設,可以簡單理解爲橢圓曲線計算),其中 m 來自密鑰構造多項式 f(x) 係數,而 n 來自 dealer 另外構造的一個隨機多項式 h(x) 的係數,承諾集合 {Ci, 0<i<t} 是一種公開可獲取的係數“證據”,用於證明 dealer 只承認一個合法的密鑰多項式。各個參與方在獲得 dealer 分發給自己的密鑰份額 f(i) 和祕密值份額 h(i) 後,計算 f(i)G+h(i)H,如果與對應的承諾值(多項式計算)相等,則認爲合法,如果不一致,則認爲 dealer 出現作惡行爲,開始向網絡提交自己的抗議 complaint,其他人可以進行驗證,如果發現事實如此,則立即停止協議,如果其他人驗證後發現該 complaint 不合法,則發起 complaint 的節點會被標記不可信。VSS 過程簡單來講包括中心初始化密鑰分發、構建承諾和重建密鑰三部分內容,整個網絡交互存在兩輪(synchronous)全網廣播(all-to-all)達成一致,最終將密鑰份額和承諾傳遞給每個參與節點,這裏我們會定義三種消息類型用於標記多輪消息序列並攜帶足夠的信息用於計算門限密鑰。

真正的 DKG 是需要去掉 VSS 裏的那個中心,在分佈式協作下生成祕密,避免單點泄漏風險,其原理也很簡單,相當於 n 個節點同時各自選擇祕密值並運行自己的 VSS,每個節點收集來自其他節點的祕密份額完成組裝,組裝後的結果便是真正私鑰的份額,而各個合法節點各自分發的祕密值聚合起來便是最終的構造私鑰,最後在進行承諾驗證。這似乎很像一個 Multi-valued Validated Byzantine Agreement (MVBA) protocol (一種被廣泛研究的可以對多種提案高效率達成共識的一致性協議算法,存在多個變種,比如異步公共子集 Common Subset)。

不過我們儘量避免這種複雜的實現,一般通過選舉出 Leader 節點,統一協調處理這些 VSS 的完成情況和最終共識,定義序列,當大多數節點(n-t)完成各自的 VSS 階段並被其他所有誠實節點所確認後,Leader 將這些已完成的 VSS 信息進行收集並重組提案,再經過兩輪全網廣播後,每個節點便會確定下各自最終的祕密份額,因此保障 liveness 對於我們的系統是十分關鍵的。如果 DKG 協議裏任何一方出現惡意行爲,協議都會立即停止,即 DKG 需要確保所有參與方的誠實行爲。至此,一把公共的門限公鑰和分屬不同參與方的門限私鑰份額便構造完畢。

簽名階段簡單來講是基於上面得到的密鑰份額各自完成簽署自己的簽名份額,最後再完成統一組裝,得到最終門限簽名。Thresh-Sig 階段的具體實現與所基於的數字簽名算法有很大關係,例如 Schnorr 算法在計算簽名 s 值時所依賴的祕密值 k 在常數項,s=k-z(H(K||M)),所以可以簡單的將祕密值份額相組。而 ECDSA 中祕密值 k 是非線性的,即 s=(H(M)+zr)/k(其中 r 也是由 k 經過指數運算得來),存在兩個祕密值(k 和 z)的乘運算,所以各個節點不能僅通過擁有 k 祕密值份額來完成最終簽名值的組裝,需要對公式進行變形,重新定義組合祕密值 kz,並分佈式完成 kz 的祕密份額計算以及分發,甚至需要藉助安全多方計算(在不泄漏各自 k 和 z 份額的前提下,完成 kz 的結果計算並輸出 kz 的祕密份額給相應參與方)、同態加密機制以及零知識證明(range proof),因此多方的 ECDSA 門限簽名在實現和效率上會比較複雜,現階段以可實用的 2-2 方案研究居多。

不論是採用 ECDSA 還是 Schnorr 算法,最核心的問題依然是基於 DKG 和多方計算的原理去生成和分發簽名算法中需要的祕密值,每個參與方基於各自的密鑰份額和祕密值份額完成自己的簽名過程,最後通過整體的交互組裝獲得最終的合法簽名。同樣的,如果無法達到足夠門限閾值數量的合法簽名方,簽名協議也會立即停止。根據不同的應用場景需求,我們需要認真研究用於實現門限簽名機制的底層簽名算法,比如 ECDSA、EdDSA、Schnorr、BLS 等,不同的簽名算法對應的門限機制實現複雜度和效率是不同的。

此外,一個完整的門限系統可能會有成員變更的需求,原有的密鑰份額隨之需要新一輪變更,最直觀的做法是引入週期的概念,通過同步網絡和共識協議發起新一輪密鑰生成,產生新的主公鑰和私鑰份額,用超時機制防止阻塞。成員變更和 DKG 是一種比較精細(或脆弱)的系統,任何一個成員 fail 或者 fault 都會引發狀況外。在實現上我們用狀態機複製原理構建門限(DKG)節點,基於消息輸入更換自身狀態(例如 node_remove,leader_change,group_update)。

門限密碼學隨着結合應用場景的需求研究增多,不斷完善自身成熟度,尤其是隨着高度可靠的代碼實現增多,隨着複雜網絡環境裏的系統架構成熟,有希望在價值網絡裏扮演“門神”的重大作用,同時會促進對零知識證明、同態加密技術的進一步場景化應用,是當下區塊鏈新技術領域爲數不多值得深入研究和實戰的研究方向。現代密碼學與價值網絡相輔相成,前者給予後者“上帝保障”,後者給予前者“偉大戰場”。

比原鏈研究院 劉秋杉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章