基于RSA的实用门限签名算法
作者:互联网
1 门限签名
门限签名是普通数字签名的一个重要分支,是门限秘密共享技术和数字签名的一种结合。1991年,Desmedt-Frankel首次提出了 (t,n)门限签名方案。 (t,n)门限签名方案是指由 n 个成员组成一个签名群体,该群体有一对公钥和私钥,群体内大于等于 t 个合法、诚实的成员组合可以代表群体用群私钥进行签名,任何人可利用该群体的公钥进行签名验证。这里 t 是门限值,只有大于等于 t 个合法成员才能代表群体进行签名,群体中任何t−1个或更少的成员不能代表该群体进行签名,同时任何成员不能假冒其他成员进行签名。采用门限签名方式可以实现权力分配,避免滥用职权。
2 基于RSA的门限签名
本算法[1]由IBM实验室提出,算法有以下特点:
1. it is unforgeable and robust in the random oracle model, assuming the RSA problem is hard;
2. signature share generation and verification is completely non-inter-active;
3. the size of an individual signature share is bounded by a constant times the size of the RSA modulus.
算法整个流程:
2.1 RSA算法
2.1.1 RSA加解密
首先,RSA算法的安全性是建立在大整数因子分解的困难性之上的。
- 秘钥生成:选择两个互异的大素数p和q,二者保密。计算n=pq,公开n。ϕ(n)=(p−1)(q−1),ϕ(n)保密,选择一个公开的随机数e(0<e<ϕ(n)),满足gcd(e,ϕ(n))=1,计算d=e−1modϕ(n),d保密。此时,公钥为(e,n),私钥为(d,n)或(d,p,q)。
- 加密:加密结果C=Memodn,已知条件M<n,公钥(e,n)。
- 解密:解密结果M=Cdmodn,已知条件C,私钥(d,n)。
2.1.2 RSA签名验签
选取整数n=pq,消息空间与签名空间均为整数空间,即M=A=Zn,定义秘钥集合K={(n,e),(p,q,d)∣n=pd,d×e≡1modϕ(n)}。
对x∈M,Bob要对x签名,取k∈K,sigk(x)=xdmodn=y,于是验证等式x=yemodn是否成立。
2.2 系统初始化
系统中有l个参与者,编号分别为1,...,l,有一个可信的dealer和一个敌手adversary。dealer选择两个长度(512bit)相等的素数p和q,设p=2p′+1,q=2q′+1,其中p′,q′也都是素数。RSA模n=pq,令m=p′q′,并选择公共一个素数指数e,e>l。
此时,RSA公钥为PK=(n,e)。
2.3 密钥分享
接下来,dealer选择d,d∈Z,满足de≡1modm,即d就是要分享的秘密值。设置a0=d,dealer随机的选择ai,ai∈0,...,m−1,1≤i≤k−1,k为门限值。即构成的关于k−1次多项式为f(X)=∑i=0k−1aiXi。
对于1≤i≤l,计算分享的密钥值si:si=f(i)modm。si就是对于参与者i的私钥SKi。
接下来,计算 verification keys,用于验证签名的是否有效。dealer选择一个随机值v∈Qn,并计算vi=vsi∈Qn,1≤i≤l,令VK=v,VKi=vi。
接下来,计算拉格朗日系数。令δ=l!,对于集合大小为k的子集S,其中元素均属于0,...,l,对于任何i∈0,...,l\S,j∈S,定义:
λi,jS=δ∏j′∈S\j(j−j′)∏j′∈S\j(i−j′)
这些值是标准拉格朗日插值公式系数。从拉格朗日插值公式可得:
δ⋅f(i)≡j∈S∑λi,jSf(j)modm
2.4 生成门限签名份额
下面,计算一个关于消息M的一个签名份额:令x=H(M),对于参与者i计算xi=x2δsi∈Qn,xi是一个参与者i的签名份额。
每个签名份额对于有一个正确性的证明,这个正确性证明仅对于基x~=x4δ的x2离散对数与对于基v的vi离散对数相似。
下面,计算每个签名份额的正确性证明以及如何验证这个签名份额:L(n)是n的比特长度,H′是一个hash函数,函数输出一个L1bit的整数,此处L1=128是第二个安全参数。为了生成正确性证明,参与者选择随机数r∈{0,...,2L(n)+2L1−1},计算:
v′=vr,x′=x~r,c=H′(v,x~,vi,xi2,v′,x′),z=si+r
此时,正确性证明就变成(z,c)。为了验证这个证明,只需要检查下面等式是否成立:
c=H′(v,x~,vi,xi2,vzvi−c,x~zxi−2c)
此处,计算的是xi2,而不是xi,原作者是这样解释的:Although xi is supposed to be a square, this is not easily verified. This way, we are sure to be working in Qn, where we need to be working to ensure soundness.
2.5 组合签名份额
在组合所有签名份额之前,先要验证每一个签名份额,并且要满足有效的签名份额个数不能小于门限k。
假设此处有一组有效的签名份额集合S,S={i1,...ik}⊂{1,...,l}。令x=H(M)∈Zn∗,且假设xij2=x4δsij。然后组合签名份额,计算:
w=xi12λ0,i1S...xik2λ0,ikS
此处的λ就是2.3节中的λi,jS。根据δ⋅f(i)≡∑j∈Sλi,jSf(j)modm,可得we=xe′,此处e′=4δ2。
因为gcd(e′,e)=1,通过算法:y=waxb,即为组合后的签名结果。此处a和b均为整数,且满足e′a+eb=1,可以从e′和e上的扩展欧几里德算法得到,这样就很容易计算出满足a和b。
2.6 签名验证
验证签名与RSA签名验证逻辑一样:计算ψ=yemodn,此处y即为2.5节中组合后的签名结果。验证者,只需要验证x==ψ是否成立。
3 参考资料
[1]http://www.iacr.org/archive/eurocrypt2000/1807/18070209-new.pdf
本文首发公众号VenusBlockChain,VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们,欢迎关注。
标签:...,验证,门限,RSA,算法,签名,delta 来源: https://blog.csdn.net/jingzi123456789/article/details/105688273