发明内容
本发明所要解决的技术问题在于克服上述现有技术的缺点,提供一种计算量小、可对密钥份额进行验证、可动态增加删除签名组用户的基于区块链的椭圆曲线门限签名方法。
解决上述技术问题所采用的技术方案由下述步骤组成:
A、系统初始化
密钥生成中心公布系统全局参数L:
U={I1,I2,…,In}
H:
其中p为大素数,E为p阶椭圆曲线,G为椭圆曲线E上的一个生成元,F
p为p阶有限域,
为p阶整数域,H为哈希函数,u为消息长度,U为签名组中所有用户的集合,I
i表示签名组中的一个用户,i∈{1,2,…,n},n是签名组用户的数量、n和u为有限的正整数,t是门限值、1<t≤n。
B、生成用户公私钥
(B1)用户Ii从有限域Fp中随机选取参数aiμ∈{ai0,ai1,…,ai(t-1)}确定t-1阶多项式fi(x):
fi(x)=ai0+ai1x1+…+ai(t-1)xt-1
其中Ii∈U。
(B2)用户Ii按下式确定密钥份额sij、拉格朗日插值系数χi,并将密钥份额sij发送给用户Ij:
sij=fi(IDj)
其中IDj是用户Ij的唯一身份标识,Ij∈U,j∈{1,2,…,n},IDi是用户Ii的唯一身份标识。
(B3)用户Ii按下式确定参数θiμ,并在签名组内将参数θiμ广播:
θiμ=aiμ×G
其中μ∈{0,1,…,t-1}。
(B4)用户Ij收到来自其他成员发来的密钥份额sij,按下式确定验证参数Vij和验证参数Cij,并验证密钥份额sij的有效性:
Vij=sij×G;
若Vij=Cij成立,则接受密钥份额sij作为用户Ij的密钥份额sij,否则要求用户Ii重新发送密钥份额sij。
(B5)用户Ij收到n份有效的密钥份额sij,按下式确定自己的私钥skj与公钥pkj:
pkj=skj×G
(B6)组内用户通过广播信息按下式确定签名公钥Q:
C、生成份额签名
(C1)用户Ii确定哈希值e:
e=H(m)
其中m是长度为u比特的消息。
(C2)用户I
i在有限域
中随机选取k
i,确定X
i:
Xi=ki×G
其中Xi是椭圆曲线上的点(xi,yi)。
(C3)用户Ii按下式确定部分份额签名ri:
ri=ximod p。
(C4)用户I
i在有限域
中随机选取α
i,按下式确定部分份额签名β
i、部分份额签名l
i:
βi=m-1(ki-αiri)
li=riαi+eχi×ski
(C5)用户Ii将部分份额签名ri、部分份额签名βi、部分份额签名li发送给门限签名合成者Ic,Ic∈U。
D、合成门限签名
(D1)门限签名合成者Ic确定哈希值e:
e=H(m)
(D2)门限签名合成者Ic收到来自用户Ii的部分份额签名ri、部分份额签名βi、部分份额签名li,按下式确定X′i:
X′i=(li+βim)×G-eχi×pki
其中Xi′是椭圆曲线上的点(x′i,y′i)。
(D3)门限签名合成者Ic确定验证参数vi并验证部分份额签名ri、部分份额签名βi、部分份额签名li的有效性:
vi=xi′mod p
如果ri=vi,认定部分份额签名ri、部分份额签名βi、部分份额签名li有效,否则认定其无效并要求用户Ii重发。
(D4)门限签名合成者Ic收到了t份有效的部分份额签名ri、部分份额签名βi、部分份额签名li,按下式确定部分门限签名r、部分门限签名β、部分门限签名l:
(D5)门限签名合成者Ic将部分签名r、部分签名β、部分签名l发送给签名验证者Iv。
E、验证门限签名
(E1)签名验证者Iv确定哈希值e:
e=H(m)
(E2)签名验证者Iv收到部分签名r、部分签名β、部分签名l,按下式确定X′:
X′=(l+βm)×G-eQ
其中X′是椭圆曲线上的点(x′,y′)。
(E3)签名验证者Iv确定验证参数v并验证部分签名r、部分签名β、部分签名l的有效性:
v=x′mod p
如果v=r,则签名验证成功,否则失败。
F、添加签名组用户
添加签名组用户时,应满足:①已有用户的私钥ski不会改变或泄露;②新用户加入不会改变签名公钥Q;③新用户可以获得自己的私钥skr并能与已有用户合作生成有效的签名;设定新用户Ir,Ir∈U的唯一身份标识为IDr,增加新用户Ir步骤如下:
(F1)用户Ii从有限域Fp中选取参数biμ∈{bi1,bi2,…,bi(t-1)}按下式确定t-1阶多项式fi′(x):
fi′(x)=bi0+bi1x1+…+bi(t-1)xt-1
(F2)用户Ii按下式确定临时密钥份额s′ij,并将临时密钥份额s′ij发送给用户Ij:
s′ij=fi′(IDj);
(F3)用户Ii按下式确定参数δiμ,并在签名组内将参数δiμ广播:
δiμ=biμ×G
(F4)用户Ij收到用户Ii发来的临时密钥份额s′ij,按下式确定验证参数V′ij和C′ij,并验证临时密钥份额s′ij的有效性:
V′ij=s′ij×G
若V′ij=C′ij成立,则接受临时密钥份额s′ij作为用户Ij的临时密钥份额,否则要求用户Ii重新发送临时密钥份额s′ij。
(F5)用户Ij收到n份有效的临时密钥份额,按下式确定临时私钥sk′j,并将临时私钥sk′j发送给新用户Ir:
(F6)用户Ij按下式确定参数εj,并在签名组内将参数εj广播:
εj=sk′j×G
(F7)新用户Ir收到用户Ij发来的临时私钥sk′j,按下式确定验证参数ηi,并验证临时私钥sk′j的有效性:
ηj=sk′j×G
若ηj=εj成立,则接受临时私钥sk′j作为用户Ij的临时私钥sk′j,否则要求用户Ij重新发送临时私钥sk′j。
(F8)新用户Ir收到t份有效的临时私钥sk′j,按下式确定自己的私钥skr并公布自己的公钥pkr:
pkr=skr×G
G、删除签名组用户
删除用户Iw时,应满足:①重构其他成员的私钥ski,并使得被删除用户的私钥skw失效;②用户被删除不会改变签名公钥Q;设定被删除用户Iw的唯一表示符为IDw,Iw∈U,删除用户Iw的步骤如下:
(G1)用户Ii从有限域Fp中选取参数ciμ∈{ci0,ci1,ci2,…,ci(t-1)},确定t-1阶多项式fi″(x):
fi″(x)=ci0+ci1x1+…+ci(t-1)xt-1
(G2)用户Ii按下式确定临时密钥份额s″ij,并将临时密钥份额s″ij发送给用户Ij:
s″ij=fi″(IDj)
(G3)用户Ii按下式确定参数γiμ,并在签名组内将参数γiμ广播:
γiμ=ciμ×G
(G4)用户Ij收到用户Ii发来的临时密钥份额s″ij,按下式确定验证参数V″ij和C″ij,并验证临时密钥份额s″ij的有效性:
V″ij=s″ij×G
若V″ij=C″ij成立,则接受临时密钥份额s″ij作为用户Ij的临时密钥份额,否则要求用户Ii重新发送临时密钥份额s″ij。
(G5)用户Ij收到n-1份有效的临时密钥份额s″ij,按下式更新新私钥sk″j并公布自己的公钥pk″j:
pk″j=sk″j×G。
在本发明的A系统初始化、B生成用户公私钥、C生成份额签名、F添加签名组用户、G删除签名组用户步骤中,n取值最佳为100。
本发明在椭圆曲线公钥密码体制下结合门限公钥密码体制和区块链签名技术,提出一种基于区块链的椭圆曲线门限签名方法,该方法在于采用门限密码体制解决传统区块链智能合约执行过程中费用过大的技术问题。在所有参与者不暴露秘密信息的情况下,验证秘钥份额的有效性,保障了参与者之间的诚实性问题;支持了用户的动态增减,在不改变签名公钥的情况下,可动态添加和删除签名组用户。本发明具有计算量小,实用性强等优点,可用于物联网、智能电网、供应链、版权保护等技术领域。
具体实施方式
下面结合附图和实施例对本发明进一步详细说明,但本发明不限于这些实施例。
实施例1
以密钥生成中心KGC选取的大素数p是2192-264-1例,本实施例的基于区块链的椭圆曲线门限签名方法由下述步骤组成(参见图1):
A、系统初始化
密钥生成中心公布系统全局参数L:
U={I1,I2,…,In}
H:
其中p为大素数,本实施例的p取值为2
192-2
64-1,E为p阶椭圆曲线,G为椭圆曲线E上的一个生成元,F
p为p阶有限域,
为p阶整数域,H为哈希函数,u为消息长度,U为签名组中所有用户的集合,I
i表示签名组中的一个用户,i∈{1,2,…,n},n是签名组用户的数量、n和u为有限的正整数,t是门限值、1<t≤n,本实施例的t取值为50,n取值为100。
B、生成用户公私钥
(B1)用户Ii从有限域Fp中随机选取参数aiμ∈{ai0,ai1,…,ai(t-1)}确定t-1阶多项式fi(x):
fi(x)=ai0+ai1x1+…+ai(t-1)xt-1
其中Ii∈U。
(B2)用户Ii按下式确定密钥份额sij、拉格朗日插值系数χi,并将密钥份额sij发送给用户Ij:
sij=fi(IDj)
其中IDj是用户Ij的唯一身份标识,Ij∈U,j∈{1,2,…,n},IDi是用户Ii的唯一身份标识。
(B3)用户Ii按下式确定参数θiμ,并在签名组内将参数θiμ广播:
θiμ=aiμ×G
其中μ∈{0,1,…,t-1}。
(B4)用户Ij收到来自其他成员发来的密钥份额sij,按下式确定验证参数Vij和验证参数Cij,并验证密钥份额sij的有效性:
Vij=sij×G;
若Vij=Cij成立,则接受密钥份额sij作为用户Ij的密钥份额sij,否则要求用户Ii重新发送密钥份额sij。
(B5)用户Ij收到n份有效的密钥份额sij,按下式确定自己的私钥skj与公钥pkj:
pkj=skj×G。
(B6)组内用户通过广播信息按下式确定签名公钥Q:
C、生成份额签名
(C1)用户Ii确定哈希值e:
e=H(m)
其中m是长度为u比特的消息。
Xi=ki×G
其中Xi是椭圆曲线上的点(xi,yi)。
(C3)用户Ii按下式确定部分份额签名ri:
ri=ximod p。
(C4)用户I
i在有限域
中随机选取α
i,按下式确定部分份额签名β
i、部分份额签名l
i:
βi=m-1(ki-αiri)
li=riαi+eχi×ski。
(C5)用户Ii将部分份额签名ri、部分份额签名βi、部分份额签名li发送给门限签名合成者Ic,Ic∈U。
D、合成门限签名
(D1)门限签名合成者Ic确定哈希值e:
e=H(m)。
(D2)门限签名合成者Ic收到来自用户Ii的部分份额签名ri、部分份额签名βi、部分份额签名li,按下式确定Xi′:
Xi′=(li+βim)×G-eχi×pki
其中Xi′是椭圆曲线上的点(xi′,yi′)。
(D3)门限签名合成者Ic确定验证参数vi并验证部分份额签名ri、部分份额签名βi、部分份额签名li的有效性:
vi=xi′mod p
如果ri=vi,认定部分份额签名ri、部分份额签名βi、部分份额签名li有效,否则认定其无效并要求用户Ii重发。
(D4)门限签名合成者Ic收到了t份有效的部分份额签名ri、部分份额签名βi、部分份额签名li,按下式确定部分门限签名r、部分门限签名β、部分门限签名l:
(D5)门限签名合成者Ic将部分签名r、部分签名β、部分签名l发送给签名验证者Iv。
E、验证门限签名
(E1)签名验证者Iv确定哈希值e:
e=H(m)。
(E2)签名验证者Iv收到部分签名r、部分签名β、部分签名l,按下式确定X′:
X′=(l+βm)×G-eQ
其中X′是椭圆曲线上的点(x′,y′)。
(E3)签名验证者Iv确定验证参数v并验证部分签名r、部分签名β、部分签名l的有效性:
v=x′mod p
如果v=r,则签名验证成功,否则失败。
在验证门限签名步骤中,所有参与者不暴露秘密信息的情况下,验证秘钥份额的有效性,保障了参与者之间的诚实性问题。
F、添加签名组用户
添加签名组用户时,应满足:①已有用户的私钥ski不会改变或泄露;②新用户加入不会改变签名公钥Q;③新用户可以获得自己的私钥skr并能与已有用户合作生成有效的签名;设定新用户Ir,Ir∈U的唯一身份标识为IDr,增加新用户Ir步骤如下:
(F1)用户Ii从有限域Fp中选取参数biμ∈{bi1,bi2,…,bi(t-1)}按下式确定t-1阶多项式fi′(x):
fi′(x)=bi0+bi1x1+…+bi(t-1)xt-1
(F2)用户Ii按下式确定临时密钥份额s′ij,并将临时密钥份额s′ij发送给用户Ij:
s′ij=fi′(IDj)。
(F3)用户Ii按下式确定参数δiμ,并在签名组内将参数δiμ广播:
δiμ=biμ×G。
(F4)用户Ij收到用户Ii发来的临时密钥份额s′ij,按下式确定验证参数V′ij和C′ij,并验证临时密钥份额s′ij的有效性:
V′ij=s′ij×G
若V′ij=C′ij成立,则接受临时密钥份额s′ij作为用户Ij的临时密钥份额,否则要求用户Ii重新发送临时密钥份额s′ij。
(F5)用户Ij收到n份有效的临时密钥份额,按下式确定临时私钥sk′j,并将临时私钥sk′j发送给新用户Ir:
(F6)用户Ij按下式确定参数εj,并在签名组内将参数εj广播:
εj=sk′j×G。
(F7)新用户Ir收到用户Ij发来的临时私钥sk′j,按下式确定验证参数ηi,并验证临时私钥sk′j的有效性:
ηj=sk′j×G
若ηj=εj成立,则接受临时私钥sk′j作为用户Ij的临时私钥sk′j,否则要求用户Ij重新发送临时私钥sk′j。
(F8)新用户Ir收到t份有效的临时私钥sk′j,按下式确定自己的私钥skr并公布自己的公钥pkr:
pkr=skr×G。
在添加签名组用户步骤中,可随时增加用户,支持了用户的动态增加,在不改变签名公钥的情况下,可动态添加签名组用户。
G、删除签名组用户
删除用户Iw时,应满足:①重构其他成员的私钥ski,并使得被删除用户的私钥skw失效;②用户被删除不会改变签名公钥Q;设定被删除用户Iw的唯一表示符为IDw,Iw∈U,删除用户Iw的步骤如下:
(G1)用户Ii从有限域Fp中选取参数ciμ∈{ci0,ci1,ci2,…,ci(t-1)},确定t-1阶多项式f″i(x):
fi″(x)=ci0+ci1x1+…+ci(t-1)xt-1
(G2)用户Ii按下式确定临时密钥份额s″ij,并将临时密钥份额s″ij发送给用户Ij:
s″ij=fi″(IDj)
(G3)用户Ii按下式确定参数γiμ,并在签名组内将参数γiμ广播:
γiμ=ciμ×G
(G4)用户Ij收到用户Ii发来的临时密钥份额s″ij,按下式确定验证参数V″ij和C″ij,并验证临时密钥份额s″ij的有效性:
V″ij=s″ij×G
若V″ij=C″ij成立,则接受临时密钥份额s″ij作为用户Ij的临时密钥份额,否则要求用户Ii重新发送临时密钥份额s″ij。
(G5)用户Ij收到n-1份有效的临时密钥份额s″ij,按下式更新新私钥sk″j并公布自己的公钥pk″j:
pk″j=sk″j×G。
在删除签名组用户步骤中,可随时增减用户,支持了用户的动态增减,在不改变签名公钥的情况下,可动态添加和删除签名组用户。
实施例2
以密钥生成中心KGC选取的大素数p是2192-264-1,本实施例的基于区块链的椭圆曲线门限签名方法由下述步骤组成:
在A系统初始化、B生成用户公私钥、C生成份额签名、D合成门限签名、F添加签名组用户、G删除签名组用户步骤中,i∈{1,2,…,n},n是签名组用户的数量、n和u为有限的正整数,t是门限值、1<t≤n,本实施例的t取值为2,n取值为100。
其它步骤与实施例1相同。
完成基于区块链的椭圆曲线门限签名方法。
实施例3
以密钥生成中心KGC选取的大素数p是2192-264-1,本实施例的基于区块链的椭圆曲线门限签名方法由下述步骤组成:
在A系统初始化、B生成用户公私钥、C生成份额签名、D合成门限签名、F添加签名组用户、G删除签名组用户步骤中,i∈{1,2,…,n},n是签名组用户的数量、n和u为有限的正整数,t是门限值、1<t≤n,本实施例的t取值为99,n取值为100。
A系统初始化、B生成用户公私钥、C生成份额签名、D合成门限签名、F添加签名组用户、G删除签名组用户步骤中的其它步骤与相应的实施例相同。
其它步骤与实施例1相同。完成基于区块链的椭圆曲线门限签名方法。
根据上述原理,还可以设计出另外一种具体的基于区块链的椭圆曲线门限签名方法,如大素数p的具体取值,t的具体取值,得到一种具体的基于区块链的椭圆曲线门限签名方法,但均在本发明的保护范围内。