Skip to main content

Wallet SSS Architecture 份额丢失

D 设备丢失

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

alt text

是的,你的理解是正确的。根据你提供的图片和描述,以下是详细的解释:

背景和问题描述

用户丢失了设备 D,该设备持有共享sds_d。为了确保安全性并使得设备 D 上的共享无效,用户希望重新生成新的共享并使设备 D 上的旧共享无效。

恢复和重新共享的过程

  1. 重新构建密钥

    • 用户首先在设备 A 上重新构建他们的密钥。这是通过使用现有的其他共享(如sas_asbs_b)来完成的。
  2. 生成新的多项式和共享

    • 用户生成一个新的 2/3 门限的秘密共享多项式h(z)h(z),并生成新的共享s1,s2,s3s_1, s_2, s_3
    • 这些新的共享将被加密,并存储在存储层中。
  3. 加密新的共享

    • 使用公钥加密方案(例如 ECIES),用户将新的共享sis_i加密,生成密文cnvc_{nv}
    • 这些密文将存储在存储层中,用于其他设备的检索。
  4. 存储新的共享

    • 设备 A 将新的共享s1s_1存储在存储层中。
    • 设备 B 将新的共享s2s_2存储在存储层中。
    • 节点将新的共享s3s_3存储在存储层中。
  5. 使旧共享无效

    • 因为新的多项式h(z)h(z)与旧的多项式f(z)f(z)无关,设备 D 上的旧共享sds_d即使被获取,也无法用于重建新的密钥。
    • 这确保了即使设备 D 被他人捡到,旧的共享也无法用于重建用户的密钥,从而保证了安全性。

具体步骤示例

假设用户使用设备 A 和设备 B 来恢复和重新共享:

  1. 在设备 A 上重新构建密钥

    • 使用现有的共享sas_asbs_b来重建用户的密钥。
  2. 生成新的多项式和共享

    • 生成新的 2/3 门限的秘密共享多项式h(z)h(z)
    • 生成新的共享s1,s2,s3s_1, s_2, s_3
  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); // 存储加密后的共享
    }
  4. 在设备 B 上检索新的共享

    • 设备 B 登录时,检索新的共享s2s_2
    • 使用sbs_b解密新的s2s_2,并使用新的s1s_1s2s_2重建密钥。

总结

通过重新生成新的多项式和共享,并使旧的共享无效,用户可以确保即使丢失的设备 D 被他人捡到,旧的共享也无法用于重建新的密钥。这种方法提高了系统的安全性,并允许用户灵活地管理和恢复他们的密钥。