Schoenmakers的PVSS方案:

目录

初始化:

参与者:

分发者:

秘密分发:

公开可验证:

验证任意一个加密的秘密碎片的有效性:

参与者还原秘密碎片:

秘密重构:

参与者

其他人

秘密重构:


引用链接:密码协议学习笔记(8.1):秘密分享 秘密分享的背景与概念

注意,该方案分发的秘密只能是循环群(如椭圆曲线)上的随机元素

初始化:

设参与者数量为h,门限值为t,

设p为大素数,G为p阶循环群,在其上计算离散对数问题是困难的,因此,对于随机选择的两个生成元g,ℎ,任何人都难以计算离散对数log_{g}h

选定哈希函数H:{\{0,1\}}^{*}\rightarrow [0,p-1]

参与者

P_{i}选择x_{i}\epsilon [0,p-1],要求gcd(x_{i},\phi (p))=1,计算z_{i}=x_{i}^{-1}\:mod\:\phi (p).

将(x_{i},z_{i})作为P_{i}自己的私钥。将y_{i}=h^{x_{i}}作为公钥广播出去。

分发者:

分发者Deliver选取随机数s\epsilon [0,p-1],计算S=h^{s},作为要分发的秘密

秘密分发:

分发者Deliver执行如下操作以构造,并以加密的秘密碎片的形式分发秘密碎片:

1.选取函数

p(x)=\sum_{i=0}^{t-1}\alpha _{i}x^{i}

其中\alpha _{0}=s

2.将x=1,x=2,...,x=n分别代入,计算得p(1),p(2),...,p(n)

3.对所有i\epsilon [1,n],计算

s_{i}=h^{p(i)}

4.对所有i\epsilon [1,n],使用参与者的公钥y_{i}\:\:,计算并公开加密的秘密碎片Y_{i},其中

Y_{i}=y_{i}^{p(i)}

公开可验证:

为了达到加密的秘密碎片的公开可验证,Deliver需要进行以下操作:

1.对所有i\epsilon [0,t-1],计算并公开多项式p(x)的每个系数\alpha _{i}分别对应的公共承诺C_{i},其中

C_{j}=g^{\alpha _{j}}

2.对所有i\epsilon [1,n],通过公共承诺计算出对每个成员P_{i}私人承诺X_{i}。其中

X_{i}=\prod_{j=0}^{t-1}(C_{j})^{i^{j}}

       =\prod_{j=0}^{t-1}(g^{\alpha _{j}})^{i^{j}}

   =g^{\sum_{j=0}^{t-1}\alpha _{j}\cdot i^{j}}

=g^{p(i)}       

但私人承诺可以不必直接公开,实际上,公共承诺与私人承诺是等价的,因为任何人都可以通过公开的公共承诺,计算对某个成员的私人承诺.

3.对所有i\epsilon [1,n],选取随机数w_{i} \epsilon [0,p-1]

4.对所有i\epsilon [1,n],计算

a_{i}=g^{w_{i}}

5.对所有i\epsilon [1,n],计算

b_{i}=y_{i}^{w_{i}}

6.计算公共质询值

c=H(X_{1},X_{2},...\:,X_{n},Y_{1},Y_{2},...\:,Y_{n},a_{1},a_{2},...\:,a_{n},b_{1},b_{2},...\:,b_{n})

7.对所有i\epsilon [1,n],计算对成员P_{i}应答

r_{i}=w_{i}-p(i)c

8.PROOF_{D}=(c,r_{1},r_{2},...,r_{n})作为知识证据公开

验证任意一个加密的秘密碎片Y_{i}的有效性:

1.使用公共承诺自行计算出所有的私人承诺

X_{i}=\prod_{j=0}^{t-1}(C_{j})^{i^{j}}=g^{p(i)}

2.观察X_{i}=g^{p(i)},Y_{i}=y_{i}^{p(i)},因为的X_{i},Y_{i}底数g,y_{i}均是已知的,只需要比较它们的指数是否相同,但由于离散对数问题的难解性,进行这样的比较需要借助知识证据PROOF_{D},并且绕几个弯:

        1.计算所有的

a_{i}^{'}=g^{r_{i}}(X_{i}^{'})^{c}

 =g^{r_{i}}X_{i}^{c}

                   =g^{w_{i}-p(i)c}(g^{p(i)})^{c}

=g^{w_{i}}   

=a_{i}     

        2.然后计算

c^{'}=H(X_{1}^{'},X_{2}^{'},...\:,X_{n}^{'},Y_{1},Y_{2},...\:,Y_{n},a_{1}^{'},a_{2}^{'},...\:,a_{n}^{'},b_{1}^{'},b_{2}^{'},...\:,b_{n}^{'})

        若c^{'}=c,则接受deliver所有输出为有效。

        不考虑哈希碰撞,显然c^{'}=c当且仅当Deliver正确运行了协议.

参与者还原秘密碎片s_{i}:

收到加密的秘密碎片后,P_{i}分别需要使用自己的私钥z_{i}计算

s_{i}=Y_{i}^{z_{i}}

以还原秘密碎片,实际上

s_{i}=Y_{i}^{z_{i}}

            =(y_{i}^{p(i)})^{z_i}

                  =((h^{x_{i}})^{p(i)})^{z_{i}}

                   =h^{p(i)}\:\:mod\:p

秘密重构:

碎片有效性检查(零知识证明):

参与者

每个参与者P_{i}除了向其他的参与者提交自己的秘密碎片s_{i}以外,还需要公布一个知识证据PROOF_{P_{i}},在不透露x_{i}的前提下证明

y_{i}=h^{x_{i}},Y_{i}=s_{i}^{x_{i}}

的指数均是x_{i}.

为此,P_{i}进行如下操作:

  1. 选取一个随机数w_{p_{i}}\epsilon\: [0,p-1],
  2. 计算a_{p_{i}}=h^{w_{​{}_{p_{i}}}},\:b_{p_{i}}=s_{i}^{w_{​{}_{p_{i}}}}
  3. 计算c_{p_{i}}=H(y_{i},Y_{i},a_{P_{i}},b_{p_{i}})
  4. 计算r_{p_{i}}=w_{p_{i}}-x_{i}c
  5. 知识证据PROOF_{P_{i}}=(c_{p_{i}},r_{p_{i}})和秘密碎片s_{i}一同发送给其他参与秘密重构的成员
其他人

其他人收到后,按如下的方式进行验证:

        1.计算

a'_{p_{i}}=h^{r_{p_{i}}}y_{i}^{c_{p_{i}}}=h^{w_{p_{i}}-x_{i}c_{p_{i}}}(h^{x_{i}})^{c_{p_{i}}}=h^{w_{p_{i}}}

b'_{p_{i}}=s_{i}^{r_{p_{i}}}Y_{i}^{c_{p_{i}}}=s_{i}^{w_{p_{i}}-x_{i}c_{p_{i}}}(s_{i}^{x_{i}})^{c_{p_{i}}}=s_{i}^{w_{p_{i}}}

        2.计算

c'_{p_{i}}=H(y_{i},Y_{i},a'_{P_{i}},b'_{p_{i}})

        3.判断c'_{p_{i}}=c_{p_{i}}是否成立,若成立则接受,若不成立,则说明成员P_{i}试图拿着虚假的秘密碎片白嫖别人的秘密碎片,中止此次重构.

秘密重构:

在验证t份秘密碎片s_{i}均有效后,使用以下类似Lagrange插值的方法还原秘密:

\prod_{i=1}^{t}s_{i}^{\lambda _{i}}

其中\lambda _{i}=\prod _{0\leq j\leq t-1,j\neq i}(\frac{j}{j-i})

\prod_{i=1}^{t}s_{i}^{\lambda _{i}}=\prod_{i=1}^{t}(h^{p(i)})^{\lambda _{i}}=h^{\sum_{i=1}^{t}p(i)\cdot \lambda _{i}}

观察指数部分,实际上就是Lagrange插值公式在 x = 0 时的值,因此

\prod_{i=1}^{t}s_{i}^{\lambda _{i}}=h^{p(0)}=h^{s}

至此,重构出了秘密h^{s}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值