一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值- 鏈聞ChainNews


跨鏈橋頻繁遭攻擊,從技術核心中的隨機數k 和R 值理解攻擊事件發生的原因和應對之策。

撰文:李尼、Demmon

隨著大部分DeFi 項目逐漸開始從以太坊走向多鏈佈署,用戶在各條鏈之間轉移資產變成了一種剛需。而跨鏈的資產轉移從資產所有權這個技術維度上可以分為:託管型Custodial Service 和去中心化型Decentralization (或者叫非託管型Non-custodial)兩個大類。由此應運而生了眾多提供給用戶進行資產鏈間轉移的「橋」。很有意思的一個現像是繼前幾個月的DeFi 協議頻繁被黑客盯上之後,由於這些跨鏈「橋」上同樣儲存了大量的資產,其逐漸成為了黑客攻擊的一個熱點。近期我們就留意到業界幾次針對跨鏈橋的攻擊。如鍊聞報導的一則 新聞,跨鏈橋被⿊造成了協議和用戶價值數百萬美元等值的損失。一般來說,黑客都會選擇去中心化型的跨鏈橋作為目標,因為託管型的橋屬中心化方式控制資產,被攻破的難度較大;而去中心化的跨鏈橋,由於涉及比較精細的密碼學設計和計算機代碼的工程實現,往往容易在某處生產漏洞從而被黑客抓住利用進行攻擊。

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

本文將介紹分析用戶一般了解較少的跨鏈橋的核心:多方安全計算中的核心-隨機數「k」和由k 推導出的R 值的過程,科普一下這些攻擊事件到底是如何發生的以及一座可靠的去中心化跨鏈橋應該是怎麼實現。以饗讀者。

據鏈聞《賬戶私鑰被破解?拆解Anyswap 跨鏈橋被⿊細節》揭露,此次安全事故是由於鏈上出現了兩筆具有相同R 值數字簽名的交易,黑客通過兩個簽名值計算出了Anyswap 跨鏈橋MPC 控制的賬戶的私鑰,進而盜走了其中的資產。那麼私鑰究竟是如何通過簽名計算得到的呢?有什麼辦法去防範這一安全漏洞的產生呢?首先我們要了解一下這個R 值是什麼。

「R」值——賬戶安全的阿卡琉斯之踵

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

眾所周知,區塊鏈賬戶的權限是通過數字簽名實現的,即用戶用私鑰對交易數據簽名來完成賬戶資產的轉移。目前區塊鏈中廣泛使用的數字簽名算法是ECDSA,它屬於「非確定性」一類的數字簽名算法,即同一數據會有多個合法的簽名,這是由於ECDSA 在每次簽名過程中都會引入隨機數k,而R 值就是通過k 計算得到的。這就等於說:要想破解出來私鑰,必須要獲得同樣的R 值;獲得同樣的R 值,就等同於隨機數k 值暴露了或者發生碰撞(即兩個簽名具有相同的R)。所以隨機數k 的重要性等同於私鑰。

假設有兩筆交易的簽名過程使用了相同的隨機數k,那麼兩個簽名值的R 是相同的。不妨設兩個簽名為(R, s1) 和(R, s2),那麼根據ECDSA 的算法過程有以下代表這兩筆交易的兩個等式:

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

其中m1 和m2 是交易數據,而sk 是賬戶私鑰。

觀察上面兩個等式,其中s1、s2、R 是簽名數據,m1 和m2 是交易數據,都是公開透明所有人都知道的,而未知數只有兩個,即A)隨機數k 和B)賬戶私鑰sk。根據簡單的計算,兩個未知數,兩個方程,那就可以求解得到未知數的值,這就是中學數學中的「解方程」!所以可以自然地求解得到私鑰公式如下:

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

由於在Anyswap 攻擊事件中,黑客發現兩次交易過程中的簽名都使用了相同的隨機數k!所以黑客很容易的就計算出來控制跨鏈資產橋的私鑰sk 出來!然後就是拿著還原的私鑰把跨鏈鎖定合約裡的所有資產轉走!

那麼問題來了:這個這麼重要的隨機數k 值為什麼會重複出現?接下來就引入為什麼要用多方安全計算這樣一個方案來產生隨機數的原因。

真正採用MPC 賬戶簽名的話,k 值是不可能被洩露的!

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

相比普通賬戶簽名,多方安全計算MPC,Multi-party Computation (這裡要特別說明,多方安全計算不是多重簽名!)賬戶簽名過程無疑是非常複雜的。因為簽名參與者不再是單一控制人,而是N 多個控制人合作完成簽名過程,簡單點類比,就是多人協作的過程。在普通賬戶簽名過程,只需要在R 值生成過程中使用真隨機數發生器,基本可保證安全;而在MPC 賬戶簽名過程中,由於參與者不唯一,而且理論上認同可以存在惡意節點,因此R 值的生成不再可以依賴單一用戶生成,因為一旦該用戶是惡意的,他將能夠自己控制隨機數k,從而控制R,進而計算得到MPC 賬戶私鑰,竊取資產。因此在MPC 賬戶簽名過程中,R 的生成必須滿足以下3 大原則:

  • 非單一用戶生成
  • 任何人都無法獲得R 對應的k 值
  • 隨機數k 的生成要足夠的隨機,滿足無偏性和不可預測性

用一句通俗的話形容這個過程就是:既要一群人一起協作幹活,又不能讓你們知道你們在幹什麼!

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

典型的MPC 的設計實例:可驗證秘密分享- Wanchain MPC 賬戶R 值安全性的核心保證

在Wanchain 跨鏈橋機制中,跨鏈資產是由鎖定賬戶保管,而鎖定賬戶則是由25 個匿名(這個數值可以根據需要擴展或者減少) Storeman 節點通過多方計算(MPC)的方式共同管理。在鎖定賬戶簽名過程中,R 值是由25 個Storeman 節點通過可驗證秘密分享(PVSS)共同決定,保證不會發生兩筆交易簽名R 值相同的情況。具體步驟如下:

  • 第一步:各Storeman 節點在本地通過真隨機數發生器產生一個隨機數;
  • 第二步:各Storeman 節點將進行Shamir 秘密分享,並將秘密碎片通過安全信道傳輸給其他節點;
  • 第三步:收到其他節點傳輸的秘密碎片後,各Storeman 節點在本地進行累加,得到一個組秘密碎片,然後將該組秘密碎片與橢圓曲線基點相乘,並將結果廣播;
  • 第四步:各Storeman 節點對廣播的數據進行拉格朗日插值計算,得到一個橢圓曲線點,其橫坐標即為R 值。

雖然以上過程稍顯複雜,但是核心思想很簡單,那就是R 值是由25 個Storeman 節點共同確定的,每個Storeman 節點貢獻一部分加密的碎片,最終通過密碼運算合成了R 值。也就是實現了上面那句話描述的狀態:既要你們協作一起幹活,但是你們都不知道你們在幹什麼,其他人是誰。

可驗證秘密分享可以確保:

任何兩筆交易具有同樣的R 值是不可能發生的

首先,R 值是有25 個Storeman 節點共同確定的,而不是由單一節點確定,理論上只要25 個Storeman 節點中存在1 個誠實節點,那麼R 值就是隨機的;其次,各節點對R 值貢獻的部分是通過真隨機數發生器產生的,分佈足夠均勻。綜合兩點,兩筆交易具有同樣R 值的情況只有在25 個Storeman 節點在兩次簽名中選擇的隨機數加和相等的時候才會發生,這一概率是2-256,形像地說,比走在路上被隕石砸到腦袋的概率都小。

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

R 值對應的k 是完全保密的

在前文我們說過,k 一旦洩露,私鑰就可以計算得到。在Wanchain 鎖定賬戶簽名過程中,k 是由25 個Storeman 節點共同決定,但是由於秘密碎片是通過安全信道傳輸給各節點,因此沒有任何一個節點能夠恢復出完整的k 值。也就是說,k 值是僅僅是一種理論中的存在,能夠正常完成MPC 簽名過程,但是確實任何人都不可見的。

通過1 和2 兩點的分析,得出Wanchain 跨鏈橋的實例中鎖定賬戶安全性是極高的,不會出現私鑰洩露的情況。

一文說透跨鏈橋技術中的核心:隨機數「k」和「R」值

那什麼樣的情況會導致出現Anyswap 的兩筆交易出現相同的R 值?

我們沒有全部讀完Anyswap 項目的MPC 這部分代碼,只能通過上述的MPC 的理論和實現機制推導這樣的結論:1)要不是沒有採用真正MPC 的實現過程而只是掛了一個MPC 的名義,還是由單一個體產生隨機數k,從而造成k 重複出現的情況;或2)代碼在實現上出現了重大的代碼問題,而這種重大技術失誤在嚴謹的開發團隊看來是完全不應該出現的。

在另外一篇文章《理想中的跨鏈橋,是什麼樣?》 中關於MPC 跨鏈橋有一段這樣的表述:「Anyswap:用一句話來解釋「黑客發現了Anyswap 的代碼漏洞,從而拿到了公私鑰對,盜走了資產」,更像是各類項目都會出現的漏洞。 」 筆者並不太認同各類採用MPC 都會出現的漏洞這句話的論斷。業界我們交流的幾個實現了MPC 的同行都不認為這樣的漏洞或者錯誤是個都會出現的普遍現象,採用MPC 的精髓就是實現了多方的匿名安全計算,否則如果連這個都不能保證,何必採用MPC ,用個多簽,單籤的方案豈不更簡單,安全性更高? 「如果能夠使用足夠多節點的公鏈共識,則能很大程度上避免類似這次被攻擊的情況(MPC 不夠去中心化的選型)。」 這句話的結論同樣不敢苟同。不同交易簽名R 值是否重複並不取決於節點的個數,而是取決於簽名過程中隨機數的生成方式。如果簽名過程中隨機數是多個節點通過多方計算共同決定,那麼僅20 個節點也同樣能夠產生安全隨機數;反之,如果簽名過程中隨機數是並不是以安全的、分佈式的方式產生,那麼堆積再多的節點也是徒勞。該項目瀏覽器上顯示有超過20 多個節點參與MPC 計算,如果計算方式的確為MPC,那麼發生R 值碰撞的概率是忽略不計的。因此該項目將兩筆交易簽名R 值相同的原因歸結於參與MPC 節點數量不足,無疑是避重就輕,具有很強的誤導性。

在文章的最後,特別想和大家強調一下隨機數對於區塊鏈的重要性,它不僅僅用在賬戶簽名過程,而且也用在PoS 共識和分片Shard 算法等領域,直接決定整個系統的安全性,萬萬不可忽視。一個小小的隨機數生產,並不是那麼簡單,是整個數學界,密碼學界一直以來孜孜追求不斷優化的一個聖杯領域。一個區塊鏈團隊還是應該多在分佈式隨機數生成算法領域不斷積累,設計並不斷優化鏈上隨機數發生器,這樣才能夠為跨鍊和共識過程提供安全隨機數,為整個區塊鏈, DeFi 領域提供可靠、可用、可信的跨鏈橋。

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews 立場無關。文章內的信息、意見等均僅供參考,並非作為或被視為實際投資建議。

.



Source link