Wallet SSS Architecture 加设备
流程图

方式 1: 计算--拉格朗日插值多项式计算
这里比较奇怪了,(但这种方式是最简单的)
-
在已有的设备生成 Share D,生成的时候,当前共享者,知道了新设备共享者的私钥份额 D, 这不符合 MPC-TSS
-
从这交互来看,很大可能在这个已有设备上进行了拉格朗日插值多项式计算,会导致整个私钥暴露(原因:常数项就是私钥)
方式 2: 计算--MPC 计算
如果是 MPC 的方式,需要所有共享者参与计算,这样用户操作不便,需要将所有参与者找出来与新设备交互
方式 3: 录入--user input
这种,用户直接将私钥份额手动录入了,也就直接可以用了,但是存在一个份额被多个设备共用的现象,这与 MPC-TSS 也有出入
可以不改变原有份额,增加新的份额 D?
在秘密共享方案(Secret Sharing Scheme, SSS)中,通常情况下,密钥被分割成多个份额(shares),并且需要一定数量的份额才能重建密钥。增加一个新的份额 D 而不改变原有份额的关键在于秘密共享方案的灵活性和数学特性。以下是为什么可以不改变原有份额而增加新的份额 D 的原因:
1. 基于多项式的秘密共享方案
秘密共享方案通常基于多项式插值(如 Shamir 的秘密共享方案)。在这种方案中,密钥被表示为一个多项式的常数项,份额是多项式在不同点的值。
-
多项式表示:
- 假设我们有一个秘密,它被表示为一个多项式 的常数项。
- 多项式 的形式为 ,其中 。
-
生成份额:
- 份额是多项式 在不同点的值,即 。
2. 增加新份额的灵活性
在基于多项式的秘密共享方案中,增加新的份额并不需要改变原有的多项式或原有的份额。只需要计算多项式在新的点的值即可。
- 增加新的份额:
- 假设我们已经有 个份额 。
- 🌈 我们可以通过计算多项式 在新的点 的值 来生成新的份额 🌈。
- 这种计算不会改变原有的多项式形式和原有的份额。
3. 操作流程中的具体实现
在你提供的流程图中,增加新的份额 D 的具体操作如下:
-
用户在新设备上触发登录:
- 用户在新设备上尝试登录,并检索加密密钥(encKey)和元数据。
-
验证和生成新份额:
- 通过验证用户的登录和两因素认证,现有设备生成新的份额 D。
- 新的份额 D 基于现有的多项式 计算得出,不会影响原有的份额。
-
存储和使用新份额:
- 新设备创建临时加密密钥并存储加密后的新份额 D。
- 新设备解密并存储新份额 D,从而可以用新的份额 D 来重建密钥。
结论
增加新的份额 D 而不改变原有份额的关键在于秘密共享方案的数学特性。通过基于多项式的秘密共享方案,可以在不改变原有多项式和份额的情况下,计算多项式在新的点的值,从而生成新的份额。这种方法确保了密钥管理的灵活性和安全性。
新份额如何计算
我们可以通过计算多项式 在新的点 的值 来生成新的份额 这个如何计算?
在基于多项式的秘密共享方案(如 Shamir 的秘密共享方案)中,计算多项式 在新的点 的值 是一个关键步骤。以下是详细的计算步骤和方法:
多项式表示
假设秘密 被表示为一个多项式 的常数项:
其中 , 是多项式的度数,通常等于所需的最小份额数减去 1(即 )。
已知份额
假设我们已经有 个份额 。
计算新的份额
为了计算多项式 在新的点 的值 ,我们可以使用拉格朗日插值法(Lagrange Interpolation)。
拉格朗日插值法
拉格朗日插值法用于通过已知的点来构建多项式。多项式 可以表示为:
其中 是拉格朗日基函数,定义为:
计算
为了计算 在新的点 的值 ,我们将 替换为 :
其中 是:
具体步骤
-
确定新的点 :
- 选择一个新的点 (通常是一个未使用过的整数)。
-
计算拉格朗日基函数 :
- 对于每个已知份额 ,计算 :
-
计算 :
- 使用已知的 和计算得到的 ,计算 :
示例
假设我们有两个已知份额 和 ,我们想计算新点 的值 :
-
计算拉格朗日基函数:
-
计算 :
所以,新的份额是 。
通过这种方法,我们可以在不改变原有份额的情况下,生成新的份额。
Share D 是 “新生成的” 还是 “复制的”
在“Device Request”场景中,确实涉及到从已存在的用户设备上获取份额,并将其传递给新设备。关于 Share D(新设备上的份额)的生成方式,有两种主要的可能性:
-
直接复制现有份额:
- 从现有设备上直接复制一个已经存在的份额,然后将该份额传递给新设备。
-
生成新的份额:
- 使用现有的份额信息,通过某种计算方式生成一个新的份额,然后将新生成的份额传递给新设备。
1. 直接复制现有份额
这种方式比较简单直接。现有设备上的某个份额被复制并传递给新设备。具体流程如下:
-
请求份额:
- 新设备向现有设备发送请求,要求获取一个份额。
-
响应请求:
- 现有设备验证请求的合法性,并选择一个已经存储的份额(例如,Share A)。
-
传递份额:
- 现有设备将选择的份额(例如,Share A)发送给新设备。
-
接收和存储:
- 新设备接收到份额后,将其存储起来。
在这种情况下,Share D 实际上是现有设备上的某个份额的复制品,而不是一个新生成的份额。
2. 生成新的份额
这种方式稍微复杂一些,但更灵活和安全。通过现有的份额信息,可以生成一个新的份额,然后传递给新设备。具体流程如下:
-
请求份额:
- 新设备向现有设备发送请求,要求生成并获取一个新的份额。
-
响应请求:
- 现有设备验证请求的合法性,并使用存储的份额信息(例如,Share A、Share B 等)来计算一个新的份额。
-
生成新的份额:
- 现有设备使用多项式计算或其他算法生成一个新的份额(Share D)。
-
传递份额:
- 现有设备将新生成的份额(Share D)发送给新设备。
-
接收和存储:
- 新设备接收到新的份额后,将其存储起来。
在这种情况下,Share D 是通过计算生成的一个新的份额,而不是现有份额的简单复制。
安全性和灵活性
- 直接复制现有份额:这种方法简单且快速,但如果份额数量有限,直接复制可能会导致份额重复,降低系统的安全性。
- 生成新的份额:这种方法更为安全和灵活,因为每个新设备上的份额都是独立生成的,不会与其他设备上的份额重复。