你的位置:首页 > 公告动态

sigma协议OR Proof&签名基于Sigma协议的身份验证和签名

2021/6/3 11:00:54      点击:
OR证明(OR-proof)


以指数运算为例(参数同上一篇),假设P知晓y 
1

 =g 
1

1

 

  , y 
2

 =g 
2

2

 

 (mod p已省略) 等式中任意一个指数秘密,x 
1

 或x 
2

 者, P如何向V证明他知道其中一个但又不泄露具体哪一个呢?


前提:

1

 ,g 
2

 ,g 
3

 已公开


假设P知晓的是x 
1

 ,P流程:
1)随机选择v 
1

 ,v 
2

 .w, 计算 t 
1

 =g 
1

1

 

 ,t 
2

 =y 
2
w

 g 
2

2

 

 ,


2)令c = Hash(g 
1

 ,g 
2

 ,y 
1

 ,y 
2

 ,t 
1

 ,t 
2

 )


3)令c 
1

 =w,c 
2

 =c−c 
1

 (mod q)


4)r 
1

 =v 
1

 −c 
1

 x 
1

 ,r 
2

 =v 
2

 (mod q)


V流程:
5) V计算t 
1


 =y 
1

1

 

 g 
1

1

 

  , t 
2


 =y 
2

1

 

 g 
2

2

 

 检验t 
1


 =?=t 
1

 ,t 
2


 =t 
2

 


6) 计算 c 
1

 +c 
2

 =?=Hash(g 
1

 ,g 
2

 ,y 
1

 ,y 
2

 ,t 
1


 ,t 
2


 )(mod q)


检验过程可自行推导!


基于Sigma协议的身份验证和签名


通过模仿Schnorr的构造,可以将任意的Sigma协议转换成身份认证方案和签名方案。假设(P,V)是构建在关系 R⊂(X∗Y)上的Sigma协议。需要添加:


一个概率性(随机性)的密钥生成算法并且具有one-way特性,生成pk,sk,且(sk,pk)∈R
安全的hash函数,作为随机Oracle,是Fiat-Shamir变换的核心
好了,完整构建的Fiat-Shamir签名方案流程如下:


密钥生成算法G生成公钥(x,y)∈R
P(Prover 部分)生成承诺t, t∈T
P计算挑战 c = H(m, t),m是待签名消息
P生成挑战的response z∈Z
P根据挑战z生成签名:s = (t,z)∈T∗Z
V(Verifier 部分)使用公钥y,验证(t,z)∈T∗Z ,且 c = H(m, t),否则拒绝!
小结


到这里就很有意思了, 再回首看看前面介绍的签名机制(RSA,ECDSA,Schnorr,EdDSA等),可以发现本文介绍的几乎是这些签名机制的抽象版本,他们都是具体实例化!


那么到这里签名机制就已经形成一个小的闭环,知其然知其所以然!
我们一直认为碎片化的知识没有力量,系统化的体系才能行稳致远!