目录
引用链接:密码协议学习笔记(8.1):秘密分享 秘密分享的背景与概念
注意,该方案分发的秘密只能是循环群(如椭圆曲线)上的随机元素
初始化:
设参与者数量为h,门限值为t,
设p为大素数,G为p阶循环群,在其上计算离散对数问题是困难的,因此,对于随机选择的两个生成元g,ℎ,任何人都难以计算离散对数
选定哈希函数
参与者:
选择
,要求
,计算
.
将(,
)作为
自己的私钥。将
作为公钥广播出去。
分发者:
分发者Deliver选取随机数,计算
,作为要分发的秘密。
秘密分发:
分发者Deliver执行如下操作以构造,并以加密的秘密碎片的形式分发秘密碎片:
1.选取函数
其中
2.将x=1,x=2,...,x=n分别代入,计算得p(1),p(2),...,p(n)
3.对所有,计算
4.对所有,使用参与者的公钥
,计算并公开加密的秘密碎片
,其中
公开可验证:
为了达到加密的秘密碎片的公开可验证,Deliver需要进行以下操作:
1.对所有,计算并公开多项式p(x)的每个系数
分别对应的公共承诺
,其中
2.对所有,通过公共承诺计算出对每个成员
的私人承诺
。其中
但私人承诺可以不必直接公开,实际上,公共承诺与私人承诺是等价的,因为任何人都可以通过公开的公共承诺,计算对某个成员的私人承诺.
3.对所有,选取随机数
4.对所有,计算
5.对所有,计算
6.计算公共质询值
7.对所有,计算对成员
的应答
8.将作为知识证据公开
验证任意一个加密的秘密碎片
的有效性:
1.使用公共承诺自行计算出所有的私人承诺
2.观察,
,因为的
,
底数
,
均是已知的,只需要比较它们的指数是否相同,但由于离散对数问题的难解性,进行这样的比较需要借助知识证据
,并且绕几个弯:
1.计算所有的
2.然后计算
若,则接受deliver所有输出为有效。
不考虑哈希碰撞,显然当且仅当Deliver正确运行了协议.
参与者还原秘密碎片
:
收到加密的秘密碎片后,分别需要使用自己的私钥
计算
以还原秘密碎片,实际上
秘密重构:
碎片有效性检查(零知识证明):
参与者
每个参与者除了向其他的参与者提交自己的秘密碎片
以外,还需要公布一个知识证据
,在不透露
的前提下证明
,
的指数均是.
为此,进行如下操作:
- 选取一个随机数
,
- 计算
- 计算
- 计算
- 将知识证据
和秘密碎片
一同发送给其他参与秘密重构的成员
其他人
其他人收到后,按如下的方式进行验证:
1.计算
2.计算
3.判断是否成立,若成立则接受,若不成立,则说明成员
试图拿着虚假的秘密碎片白嫖别人的秘密碎片,中止此次重构.
秘密重构:
在验证t份秘密碎片均有效后,使用以下类似Lagrange插值的方法还原秘密:
其中
观察指数部分,实际上就是Lagrange插值公式在 x = 0 时的值,因此
至此,重构出了秘密