- SSS 由Shamir提出密钥共享及一个基于多项式插值的方案
- VSS 由Chor, Goldwasser, Micali, Awerbuch提出可验证密钥共享,并提出一个基于大数分解难题的常数轮交互方案
- 基于Goldreich, Micali和Wigderson的零知识证明系统,可以构造常数轮交互方案
- Benaloh基于可靠公共信标,构造出常数轮交互方案
5.feldman在本文提出了第一个非交互的方案,仅需要两轮通信。
- 通信的轮数
- 通信的数据大小
- dealer需要执行的计算量
-
初始化
- 椭圆曲线(如Secp256k1);
- 随机数生成器;
-
密钥分享(dealer)
- 输入{secret, k, n},secret在内部转换为
Secp256k1Scalar
; - 生成多项式函数的系数coefs = {a0,a1,a2,...,ak-1},表示一个k-1次多项式,
,a0 = secret,需要k个点的数据才能恢复; 3. 在多项式上取n个点,生成n个子密钥,{<1, a(1)>, <2,a(2)>, ..., },计算过程x值全部转化成`Secp256k1Scalar`; 4. 生成k个系数的commitments,
,其中g是椭圆曲线上的的generator
- 输入{secret, k, n},secret在内部转换为
-
密钥恢复(dealer)
- 任意k个点,使用Lagrange插值恢复出secret;
- 验证 c0 == g^secret
-
子密钥验证(players)
- 任何子密钥持有者执行以下校验,{<i, a(i)>, {c0,c1,c2,..ck-1}}
通过验证表明dealer分配的子密钥是正确的。