V神提出新型金鑰分享方案,可用於腦錢包和社交恢復設計應用

買賣虛擬貨幣

注:原文作者是以太坊聯合創始人Vitalik Buterin,在這篇文章中,他描述了一種新型的M-of-N金鑰分享方案,並提出了腦錢包和社交恢復設計的兩種應用案例。

假設你希望生成一個秘密 s,而s可透過將N個金鑰分享中的M個放在一起來恢復,其中所有N個金鑰分享是預先知道的。那麼這種方案有兩個用例:

一種腦錢包,其中N個金鑰分享是N個安全問題的答案,並且你希望僅透過M個安全問題的答案就可以恢復資金(單獨的安全問題會很糟糕,但如果你將20個安全問題組合起來,你可以獲得相當多的熵);

一種社交恢復設計,其中你希望使用閾值解密而不是智慧合約錢包,因為你正在嘗試恢復訪問私人資料,而不是加密貨幣,並且你希望你的恢復合作伙伴能夠使用他們已經擁有的金鑰(以減少有丟失這些金鑰的風險);

普通的 M-of-N 金鑰分享方案不適用於這些用例中的任何一個,因為它只允許預先選擇 M 個金鑰分享,剩餘的 (N-M) 個金鑰分享必須使用一種確定性演算法從原始的M箇中產生,並且看起來像隨機資料(在腦錢包的情況下,它們不適合作為安全問題的答案,在社交恢復的情況下,需要使用者使用特殊軟體來儲存它們,而不是從現有的HD錢包中衍生出來)。

所以這就是我們要去改進的,我們制定了一個 N-of-(2N-M) 閾值方案,從原N個金鑰分享生成( N-M) 個附加金鑰分享。然後我們在區塊鏈上釋出所有N-M 個附加金鑰分享。如果需要,在社會恢復案例中,人們可以簡單地給每個參與者一份所有附加金鑰分享的副本。這會導致附加金鑰分享變成有效的公共資訊:它們丟失的風險可以忽略不計,但任何攻擊者都會擁有它們。而結果是,在未釋出的 N個金鑰分享中,只要有M個金鑰分享與 N-M 個附加金鑰分享結合並揭示資料,我們就有了一個M-of-N方案,這正是我們想要的。

2021年7月18日更新:社交恢復用例的替代機制

在社交恢復用例中,我們希望設定過程儘可能簡單,因為使用者是懶惰傾向的,如果設定困難,他們將不可避免地選擇不安全的小型恢復夥伴集。這意味著以去中心化方式生成金鑰分享所需的分散式金鑰生成 (DKG) 可能是一個壞主意,因為它需要 2 輪通訊(這意味著額外的區塊鏈交易或每個人同時線上並擁有同步通訊通道)。

相反,我們可以利用賬戶持有人自己擁有他們的私鑰這一事實。他們可以簡單地向每個恢復夥伴詢問他們的公鑰(例如,透過 pk = G * hash(ecdsa_sign(msk, nonce)),其中 msk 是恢復夥伴的主要金鑰),然後在鏈上釋出一筆包含 nonce 的交易,併為每個 i 加密(share_i, pk_i) (注:其中 share_i 是第 i 個金鑰分享,pk_i 是第 i 個參與者的公鑰)。

如果我們避免重複使用nonce隨機數,從而不重用金鑰(例如,設定nonce = hash(secret, maddr_1 ... maddr_n),其中secret是放入恢復的值,maddr_i是第i個恢復夥伴的地址,應該就足夠了),我們可以使用基礎的Diffie-Hellman加密演算法進行加密,這意味著僅具有 32 * (n+1) 個位元組calldata資料的單筆交易,就足以儲存恢復資訊。

對此方案,ethresear.ch 論壇成員kelvin評論稱:

“這很有趣!我猜在社交恢復設計中,N個參與者會給他們的私鑰附加一些公共鹽(salt,指透過在密碼任意固定位置插入特定的字串),然後將其雜湊生成N個預先知道的金鑰分享?

否則他們將不願意洩露自己的金鑰分享,以讓N−M個附加金鑰分享被計算,並且他們還必須透露 M 個金鑰才能恢復秘密。

此外,你認為人們會用這種方式來分發哪些型別的私人資料呢?”

而Vitalik則回覆稱:

“1、實際上,他們會使用 hash(ecdsa_sign(key, salt))作為雜湊函式來生成子金鑰,因為 ecdsa_sign方法在 web3 API 中公開並且具有標準化的確定性輸出。但這是一個實現細節, 效果是一樣的。

2、我只是在考慮‘以太坊電子郵件’以及像Status這樣的去中心化訊息傳遞應用的加密金鑰。另一個用例當然是其他區塊鏈的私鑰。”。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读