Wallet SSS Architecture 份额丢失
D 设备丢失
这里用户丢失了 D 设备,使用 A 和 B 进行恢复和重新共享,这样新共享就和 D 无关了,就是 D 被人家捡到了,因为新的多项式与 D 无关,即使旧 D share 拿到了新的 A share 也用不了?

是的,你的理解是正确的。根据你提供的图片和描述,以下是详细的解释:
背景和问题描述
用户丢失了设备 D,该设备持有共享。为了确保安全性并使得设备 D 上的共享无效,用户希望重新生成新的共享并使设备 D 上的旧共享无效。
恢复和重新共享的过程
-
重新构建密钥:
- 用户首先在设备 A 上重新构建他们的密钥。这是通过使用现有的其他共享(如和)来完成的。
-
生成新的多项式和共享:
- 用户生成一个新的 2/3 门限的秘密共享多项式,并生成新的共享。
- 这些新的共享将被加密,并存储在存储层中。
-
加密新的共享:
- 使用公钥加密方案(例如 ECIES),用户将新的共享加密,生成密文。
- 这些密文将存储在存储层中,用于其他设备的检索。
-
存储新的共享:
- 设备 A 将新的共享存储在存储层中。
- 设备 B 将新的共享存储在存储层中。
- 节点将新的共享存储在存储层中。
-
使旧共享无效:
- 因为新的多项式与旧的多项式无关,设备 D 上的旧共享即使被获取,也无法用于重建新的密钥。
- 这确保了即使设备 D 被他人捡到,旧的共享也无法用于重建用户的密钥,从而保证了安全性。
具体步骤示例
假设用户使用设备 A 和设备 B 来恢复和重新共享:
-
在设备 A 上重新构建密钥:
- 使用现有的共享和来重建用户的密钥。
-
生成新的多项式和共享:
- 生成新的 2/3 门限的秘密共享多项式。
- 生成新的共享。
-
加密和存储新的共享:
const newShares = [s1, s2, s3]; // 新的共享
const commitments = [g ^ a, g ^ b, g ^ c]; // 旧的共享承诺
for (let i = 0; i < newShares.length; i++) {
const encryptedShare = ECIESEncrypt(newShares[i], commitments[i]);
storeOnStorageLayer(encryptedShare); // 存储加密后的共享
} -
在设备 B 上检索新的共享:
- 设备 B 登录时,检索新的共享。
- 使用解密新的,并使用新的和重建密钥。
总结
通过重新生成新的多项式和共享,并使旧的共享无效,用户可以确保即使丢失的设备 D 被他人捡到,旧的共享也无法用于重建新的密钥。这种方法提高了系统的安全性,并允许用户灵活地管理和恢复他们的密钥。