4

V神提出新型密钥分享方案,可用于脑钱包和社交恢复设计应用

 3 years ago
source link: https://www.8btc.com/article/6663029
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
2021-07-20 02:45

V神提出新型密钥分享方案,可用于脑钱包和社交恢复设计应用

注:原文作者是以太坊联合创始人Vitalik Buterin,在这篇文章中,他描述了一种新型的M-of-N密钥分享方案,并提出了脑钱包和社交恢复设计的两种应用案例。

FnWFlSuIPwoAnok5iSD-bHno1XO4.jpg

假设你希望生成一个秘密 s,而s可通过将N个密钥分享中的M个放在一起来恢复,其中所有N个密钥分享是预先知道的。那么这种方案有两个用例:

  1. 一种脑钱包,其中N个密钥分享是N个安全问题的答案,并且你希望仅通过M个安全问题的答案就可以恢复资金(单独的安全问题会很糟糕,但如果你将20个安全问题组合起来,你可以获得相当多的熵);
  2. 一种社交恢复设计,其中你希望使用阈值解密而不是智能合约钱包,因为你正在尝试恢复访问私人数据,而不是加密货币,并且你希望你的恢复合作伙伴能够使用他们已经拥有的密钥(以减少有丢失这些密钥的风险);

普通的 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评论称:

Fl65ypi3MeIgrbWo0LFtkYk-1cYG.jpg

“这很有趣! 我猜在社交恢复设计中,N个参与者会给他们的私钥附加一些公共盐(salt,指通过在密码任意固定位置插入特定的字符串),然后将其哈希生成N个预先知道的密钥分享?
否则他们将不愿意泄露自己的密钥分享,以让N−M个附加密钥分享被计算,并且他们还必须透露 M 个密钥才能恢复秘密。
此外,你认为人们会用这种方式来分发哪些类型的私人数据呢?

而Vitalik则回复称:

FpiG1EYme52i6SP0v7CEU1lhYZRE.jpg

“1、实际上,他们会使用 hash(ecdsa_sign(key, salt))作为哈希函数来生成子密钥,因为 ecdsa_sign 方法在 web3 API 中公开并且具有标准化的确定性输出。 但这是一个实现细节, 效果是一样的。
2、我只是在考虑‘以太坊电子邮件’以及像Status这样的去中心化消息传递应用的加密密钥。另一个用例当然是其他区块链的私钥。
”。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK