编程语言
首页 > 编程语言> > 基于RSA的实用门限签名算法

基于RSA的实用门限签名算法

作者:互联网

1 门限签名

门限签名是普通数字签名的一个重要分支,是门限秘密共享技术和数字签名的一种结合。1991年,Desmedt-Frankel首次提出了 (t,n)(t,n)(t,n)门限签名方案。 (t,n)(t,n)(t,n)门限签名方案是指由 nnn 个成员组成一个签名群体,该群体有一对公钥和私钥,群体内大于等于 ttt 个合法、诚实的成员组合可以代表群体用群私钥进行签名,任何人可利用该群体的公钥进行签名验证。这里 ttt 是门限值,只有大于等于 ttt 个合法成员才能代表群体进行签名,群体中任何t1t-1t−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算法的安全性是建立在大整数因子分解的困难性之上的。

2.1.2 RSA签名验签

选取整数n=pqn=pqn=pq,消息空间与签名空间均为整数空间,即M=A=ZnM=A=Z_nM=A=Zn​,定义秘钥集合K={(n,e),(p,q,d)n=pd,d×e1modϕ(n)}K=\{ (n,e),(p,q,d)|n=pd,d\times e \equiv 1mod \phi(n)\}K={(n,e),(p,q,d)∣n=pd,d×e≡1modϕ(n)}。

xMx \in Mx∈M,Bob要对xxx签名,取kKk \in Kk∈K,sigk(x)=xdmodn=ysig_k(x)=x^dmodn=ysigk​(x)=xdmodn=y,于是验证等式x=yemodnx=y^emodnx=yemodn是否成立。

2.2 系统初始化

系统中有lll个参与者,编号分别为1,...,l1,...,l1,...,l,有一个可信的dealer和一个敌手adversary。dealer选择两个长度(512bit)相等的素数ppp和qqq,设p=2p+1q=2q+1p=2p'+1,q=2q'+1p=2p′+1,q=2q′+1,其中p,qp',q'p′,q′也都是素数。RSA模n=pqn=pqn=pq,令m=pqm=p'q'm=p′q′,并选择公共一个素数指数ee>le,e>le,e>l。

此时,RSA公钥为PK=(n,e)PK=(n,e)PK=(n,e)。

2.3 密钥分享

接下来,dealer选择ddZd,d \in Zd,d∈Z,满足de1modmde\equiv 1modmde≡1modm,即ddd就是要分享的秘密值。设置a0=da_0=da0​=d,dealer随机的选择aiai0,...,m11ik1ka_i,a_i \in {0,...,m-1},1 \leq i \leq k-1,kai​,ai​∈0,...,m−1,1≤i≤k−1,k为门限值。即构成的关于k1k-1k−1次多项式为f(X)=i=0k1aiXif(X)=\sum_{i=0}^{k-1}{a_iX^i}f(X)=∑i=0k−1​ai​Xi。

对于1il1 \leq i \leq l1≤i≤l,计算分享的密钥值sisi=f(i)modms_i:s_i=f(i)modmsi​:si​=f(i)modm。sis_isi​就是对于参与者iii的私钥SKiSK_iSKi​。

接下来,计算 verification keys,用于验证签名的是否有效。dealer选择一个随机值vQnv \in Q_nv∈Qn​,并计算vi=vsiQn1ilv_i = v^{s_i} \in Q_n,1 \leq i \leq lvi​=vsi​∈Qn​,1≤i≤l,令VK=v,VKi=viVK=v,VK_i=v_iVK=v,VKi​=vi​。

接下来,计算拉格朗日系数。令δ=l!\delta = l!δ=l!,对于集合大小为kkk的子集SSS,其中元素均属于0,...,l{0,...,l}0,...,l,对于任何i0,...,l\S,jSi \in {0,...,l \backslash S},j \in Si∈0,...,l\S,j∈S,定义:
λi,jS=δjS\j(ij)jS\j(jj)\lambda_{i,j}^S=\delta \frac{\prod_{j' \in {S \backslash{j}}}(i-j')} {\prod_{j' \in {S \backslash{j}}}(j-j')}λi,jS​=δ∏j′∈S\j​(j−j′)∏j′∈S\j​(i−j′)​

这些值是标准拉格朗日插值公式系数。从拉格朗日插值公式可得:
δf(i)jSλi,jSf(j)modm\delta \cdot f(i) \equiv \sum_{j \in S} \lambda_{i,j}^S f(j)modm δ⋅f(i)≡j∈S∑​λi,jS​f(j)modm

2.4 生成门限签名份额

下面,计算一个关于消息MMM的一个签名份额:令x=H(M)x=H(M)x=H(M),对于参与者iii计算xi=x2δsiQnx_i=x^{2\delta s_i} \in Q_nxi​=x2δsi​∈Qn​,xix_ixi​是一个参与者iii的签名份额。

每个签名份额对于有一个正确性的证明,这个正确性证明仅对于基x~=x4δ\tilde{x}=x^{4\delta}x~=x4δ的x2x^2x2离散对数与对于基vvv的viv_ivi​离散对数相似。

下面,计算每个签名份额的正确性证明以及如何验证这个签名份额:L(n)L(n)L(n)是nnn的比特长度,HH'H′是一个hash函数,函数输出一个L1L_1L1​bit的整数,此处L1=128L_1 = 128L1​=128是第二个安全参数。为了生成正确性证明,参与者选择随机数r{0,...,2L(n)+2L11}r \in \{ 0,...,2^{L(n)+2L_1} -1 \}r∈{0,...,2L(n)+2L1​−1},计算:
v=vr,x=x~r,c=H(v,x~,vi,xi2,v,x),z=si+rv'=v^r,x'=\tilde{x}^r,c=H'(v,\tilde{x},v_i,x_i^2,v',x'),z=s_i+rv′=vr,x′=x~r,c=H′(v,x~,vi​,xi2​,v′,x′),z=si​+r

此时,正确性证明就变成(z,c)(z,c)(z,c)。为了验证这个证明,只需要检查下面等式是否成立:
c=H(v,x~,vi,xi2,vzvic,x~zxi2c)c=H'(v,\tilde{x},v_i,x_i^2,v^zv_i^{-c},\tilde{x}^zx_i^{-2c})c=H′(v,x~,vi​,xi2​,vzvi−c​,x~zxi−2c​)

此处,计算的是xi2x_i^2xi2​,而不是xix_ixi​,原作者是这样解释的:Although xix_ixi​ is supposed to be a square, this is not easily verified. This way, we are sure to be working in QnQ_nQn​, where we need to be working to ensure soundness.

2.5 组合签名份额

在组合所有签名份额之前,先要验证每一个签名份额,并且要满足有效的签名份额个数不能小于门限kkk。

假设此处有一组有效的签名份额集合SSS,S={i1,...ik}{1,...,l}S=\{i_1,...i_k\} \subset \{1,...,l\}S={i1​,...ik​}⊂{1,...,l}。令x=H(M)Znx=H(M) \in Z_n^\astx=H(M)∈Zn∗​,且假设xij2=x4δsijx_{i_j}^2=x^{4 \delta s_{i_j}}xij​2​=x4δsij​​。然后组合签名份额,计算:
w=xi12λ0,i1S...xik2λ0,ikSw=x_{i_1}^{2 \lambda_{0,i_1}^S} ... x_{i_k}^{2 \lambda_{0,i_k}^S}w=xi1​2λ0,i1​S​​...xik​2λ0,ik​S​​

此处的λ\lambdaλ就是2.3节中的λi,jS\lambda_{i,j}^Sλi,jS​。根据δf(i)jSλi,jSf(j)modm\delta \cdot f(i) \equiv \sum_{j \in S} \lambda_{i,j}^S f(j)modmδ⋅f(i)≡∑j∈S​λi,jS​f(j)modm,可得we=xew^e=x^{e'}we=xe′,此处e=4δ2{e'=4 \delta^2}e′=4δ2。

因为gcd(e,e)=1gcd(e',e)=1gcd(e′,e)=1,通过算法:y=waxby=w^ax^by=waxb,即为组合后的签名结果。此处aaa和bbb均为整数,且满足ea+eb=1e'a+eb=1e′a+eb=1,可以从ee'e′和eee上的扩展欧几里德算法得到,这样就很容易计算出满足aaa和bbb。

2.6 签名验证

验证签名与RSA签名验证逻辑一样:计算ψ=yemodn\psi = y^emodnψ=yemodn,此处yyy即为2.5节中组合后的签名结果。验证者,只需要验证x==ψx == \psix==ψ是否成立。

3 参考资料

[1]http://www.iacr.org/archive/eurocrypt2000/1807/18070209-new.pdf

本文首发公众号VenusBlockChain,VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们,欢迎关注。
在这里插入图片描述

标签:...,验证,门限,RSA,算法,签名,delta
来源: https://blog.csdn.net/jingzi123456789/article/details/105688273