无可信中心的群签名方法与流程

文档序号:16361723发布日期:2018-12-22 08:12阅读:327来源:国知局
无可信中心的群签名方法与流程

本发明属于密码技术领域,特别是涉及一种无可信中心的群签名方法。

背景技术

文献“goldfeders,gennaror,kalodnerh,etal.securingbitcoinwalletsviaanewdsa/ecdsathresholdsignaturescheme.2015.”中提出了一种适用于比特币钱包的ecdsa门限签名方法。该方法基于椭圆曲线密码体制,通过利用paillier提出的基于模幂运算的同态加密方法结合零知识证明技术实现了对比特币钱包的无可信中心群签名功能。在该方法中,t个人传递同态加密密文,之后每个人利用自己的份额对其进行计算,并构建零知识证明,随后生成一个对t个人签名的加密密文,最后t个人进行合作解出签名。该方法实现了对比特币钱包的分布式签名功能,即签名必须由t个人进行,如果少于t个人,则不能生成合法的签名,从而提高了比特币交易的安全性。但是,该方法计算步骤中存在零知识证明,零知识证明需要双方的交互,这是一个比较耗时的操作;并且该方法的主要运算为模幂运算。通过分析可知,该方法共有5t-4个模幂运算,而一个模幂运算的时间约为240tm,整个方法的运行时间约为(5t-4)*240tm+tz=(1200t-960)tm+tz,其中tm表示一个模乘运算所需要的时间,*表示乘法操作,tz表示零知识证明交互所需要的时间。可以看出,零知识证明和模幂运算的应用导致该方法的计算效率比较低。



技术实现要素:

为了克服现有群签名方法效率低的不足,本发明提供一种无可信中心的群签名方法。该方法在密钥生成阶段,t个人选取自己的子私钥,计算并公开自己的子公钥以及签名公钥。在签名阶段,t个人分别利用自己的子私钥计算自己的签名,然后将自己的签名发送给签名合成者去合成。签名合成者收到每个人生成的签名后,利用每个人的子公钥验证签名是否有效,如果每个人的签名都有效,则合成签名,如果有人的签名无效,则通知t个人签名失败并退出签名过程。本发明没有使用零知识证明这一比较耗时的操作,也没有使用同态加密方法,是基于椭圆曲线点乘进行设计的。一个椭圆曲线点乘运算的时间约为29tm,和模幂运算相比,椭圆曲线点乘效率是比较高的。因此,与背景技术方法相比,本发明采用椭圆曲线点乘运算并且没有零知识证明,效率得到很大的提升。本发明实现签名由多个人分布式计算生成,签名过程不需要合成私钥,防止私钥的泄露;本发明与比特币系统中的ecdsa签名是兼容的,能被比特币签名验证通过。

本发明解决其技术问题所采用的技术方案是:一种无可信中心的群签名方法,其特点是包括以下步骤:

步骤一、每一个签名参与者idi选取di∈{1,2,...,n-1}作为自己的子私钥,按照下式,计算自己的子公钥qi并对子公钥qi进行公开,i=1,2,...,t;

qi=dig

其中,idi表示第i个签名参与者,di表示第i个签名参与者idi的子私钥,qi表示第i个签名参与者idi的子公钥,t为正整数,表示签名参与者idi的数目,g表示椭圆曲线上一个阶为n的基点;

步骤二、按照下式,每一个签名参与者idi计算签名公钥q并对签名公钥q进行公开:

其中,q表示签名公钥,∑表示求和操作;

步骤三、每一个签名参与者idi选择秘密随机数ki,并把ki安全地广播给除自己之外的其他t-1个签名参与者idj,j=1,2,...,t,j≠i;

其中,ki表示第i个签名参与者idi选取的随机数;

步骤四、每一个签名参与者idi收到t-1个随机数后,计算签名随机数和验证参数r=(xr,yr)=kg;

其中,k表示t个签名参与者idi共同协商出的签名随机数,r表示验证参数,xr表示验证参数r的横坐标,yr表示验证参数r的纵坐标,n表示椭圆曲线基点g的阶,mod表示求模操作;

步骤五、按照下式,每一个签名参与者idi计算第一部分签名r,如果r=0,则返回步骤三,如果r≠0,则继续执行下面的步骤:

r=xrmodn

其中,r表示第一部分签名;

步骤六、每一个签名参与者idi计算消息m的哈希值h=hash(m),并按照数据类型转换规则,将h转化为一个整数e,之后计算自己的部分签名si=k-1(t-1e+rdi)modn。如果si=0,则返回步骤三,如果si≠0,则继续执行下面的步骤;

其中,m表示消息,h表示消息m的哈希值,hash表示密码哈希算法,e表示哈希值h转换后的整数值,si表示第i个签名参与者idi所计算的部分签名,k-1表示t个签名参与者idi共同协商出的签名随机数k在模n下的乘法逆元,t-1表示签名参与者idi的数目t在模n下的乘法逆元;

步骤七、每一个签名参与者idi通过安全信道将自己的签名(r,si)发送给签名合成者;

其中,(r,si)表示第i个签名参与者idi的签名,由第一部分签名r和第i个签名参与者idi所计算的部分签名si两部分构成;

步骤八、签名合成者收到每个签名(r,si)后,对每个签名(r,si)计算第一个签名验证参数ui1=t-1esi-1modn,计算第二个签名验证参数ui2=rsi-1modn和验证参数ri′=(xir′,yir′)=ui1g+ui2qi,并判断验证参数ri′是否为零点。如果ri′是零点,则签名(r,si)验证失败,通知每一个签名参与者idi签名失败并退出签名过程,如果ri′不是零点,则计算签名参数ri=xir′modn,并验证等式ri=r是否成立。如果等式成立,则签名(r,si)验证成功,如果等式不成立,则签名(r,si)验证失败,通知每一个签名参与者idi签名失败并退出签名过程。如果每个签名参与者idi的签名(r,si)均验证成功,则继续执行下面的步骤,如果有的签名参与者idi的签名验证失败,则通知每一个签名参与者idi签名失败并退出签名过程,其中i=1,2,...,t;

其中,ui1表示第i个签名(r,si)的第一个签名验证参数,ui2表示第i个签名(r,si)的第二个签名验证参数,ri′表示签名合成者计算的第i个签名(r,si)的验证参数,xir′表示签名合成者计算的第i个签名验证参数ri′的横坐标,yir′表示签名合成者计算的第i个签名验证参数ri′的纵坐标;ri表示签名合成者计算的第i个签名参与者idi的签名参数;

步骤九、按照下式,签名合成者计算第二部分签名s,合成签名(r,s)并退出签名过程:

其中,s表示签名合成者计算的第二部分签名,(r,s)表示签名合成者合成的签名。

本发明的有益效果是:该方法在密钥生成阶段,t个人选取自己的子私钥,计算并公开自己的子公钥以及签名公钥。在签名阶段,t个人分别利用自己的子私钥计算自己的签名,然后将自己的签名发送给签名合成者去合成。签名合成者收到每个人生成的签名后,利用每个人的子公钥验证签名是否有效,如果每个人的签名都有效,则合成签名,如果有人的签名无效,则通知t个人签名失败并退出签名过程。本发明没有使用零知识证明这一比较耗时的操作,也没有使用同态加密方法,是基于椭圆曲线点乘进行设计的。一个椭圆曲线点乘运算的时间约为29tm,和模幂运算相比,椭圆曲线点乘效率是比较高的。因此,与背景技术方法相比,本发明采用椭圆曲线点乘运算并且没有零知识证明,没有采用模幂运算。通过分析可知,本发明共有4t个椭圆曲线点乘运算,整个方法的运行时间约为4t*29tm=116ttm,其中,tm表示一个模乘运算所需要的时间,*表示乘法操作。而背景技术中整个方法的运行时间约为(1200t-960)tm+tz,其中,tz表示零知识证明交互所需要的时间。通过比较可以看出,本发明方法的效率得到很大的提升。本发明实现签名由多个人分布式计算生成,签名过程不需要合成私钥,防止私钥的泄露;本发明与比特币系统中的ecdsa签名是兼容的,能被比特币签名验证通过。

下面结合附图和具体实施方式对本发明作详细说明。

附图说明

图1是本发明无可信中心的群签名方法的流程图。

具体实施方式

名词解释:

t:椭圆曲线secp256k1的参数;

p:生成有限域fp的大素数,其值为fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f=2256-232-29-28-27-26-24-1;

a,b:椭圆方程的参数,a=0,b=7;

g:椭圆曲线上一个阶为n的一个基点,其值为0479be667ef9dcbbac5

5a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8;

n:椭圆曲线基点g的阶,其值为fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141;

h:余因数,控制选取点的密度,其值为01;

idi:第i个签名参与者,i=1,2,...,t;

t:正整数,表示签名参与者idi的数目;

t-1:签名参与者idi的数目t在模n下的乘法逆元;

di:第i个签名参与者idi的子私钥,i=1,2,...,t;

qi:第i个签名参与者idi的子公钥,i=1,2,...,t;

q:签名公钥;

σ:求和操作,例如

ki:第i个签名参与者idi选取的随机数,i=1,2,...,t;

k:t个签名参与者idi共同协商出的签名随机数;

k-1:t个签名参与者idi共同协商出的签名随机数k在模n下的乘法逆元;

hash:密码哈希算法;

r:验证参数;

ri′:签名合成者计算的第i个签名(r,si)的验证参数,i=1,2,...,t;

xr:验证参数r的横坐标;

yr:验证参数r的纵坐标;

xir′:签名合成者计算的第i个签名验证参数ri′的横坐标,i=1,2,...,t;

yir′:签名合成者计算的第i个签名验证参数ri′的纵坐标,i=1,2,...,t;

mod:求模操作,例如7mod4=3;

r:第一部分签名;

ri:签名合成者计算的第i个签名参与者idi的签名参数,i=1,2,...,t;

v:签名验证者计算的第一部分签名;

m:消息;

h:消息m的哈希值;

e:哈希值h转换后的整数值;

si:第i个签名参与者idi所计算的部分签名,i=1,2,...,t;

s:签名合成者计算的第二部分签名;

(r,si):第i个签名参与者idi的签名,i=1,2,...,t;

(r,s):签名合成者合成的签名;

ui1:第i个签名(r,si)的第一个签名验证参数,i=1,2,...,t;

u1:签名(r,s)的第一个签名验证参数;

ui2:第i个签名(r,si)的第二个签名验证参数,i=1,2,...,t;

u2:签名(r,s)的第二个签名验证参数;

tm:一个模乘运算所需要的时间;

*:乘法操作;

tz:零知识证明交互所需要的时间。

本发明无可信中心的群签名方法具体步骤如下:

系统确定系统参数:这是具体实施之前的准备工作。

选取椭圆曲线secp256k1,确定参数t=(p,a,b,g,n,h),其中,t表示椭圆曲线secp256k1的参数,p表示生成有限域fp的大素数,p=fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f=2256-232-29-28-27-26-24-1,a,b表示椭圆方程的参数,a=0,b=7,g表示椭圆曲线上一个阶为n的基点,g=0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8,n表示椭圆曲线基点g的阶,n=fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,h表示余因数,控制选取点的密度,h=01。

步骤一、每一个签名参与者idi选取di∈{1,2,...,n-1}作为自己的子私钥,按照下式,计算自己的子公钥qi并对子公钥qi进行公开,i=1,2,...,t;

qi=dig

其中,idi表示第i个签名参与者,di表示第i个签名参与者idi的子私钥,qi表示第i个签名参与者idi的子公钥,t为正整数,表示签名参与者idi的数目,g表示椭圆曲线上一个阶为n的基点;

步骤二、按照下式,每一个签名参与者idi计算签名公钥q并对签名公钥q进行公开:

其中,q表示签名公钥,σ表示求和操作;

步骤三、每一个签名参与者idi选择秘密随机数ki,并把ki安全地广播给除自己之外的其他t-1个签名参与者idj,j=1,2,...,t,j≠i;

其中,ki表示第i个签名参与者idi选取的随机数;

步骤四、每一个签名参与者idi收到t-1个随机数后,计算出签名随机数和验证参数r=(xr,yr)=kg;

其中,k表示t个签名参与者idi共同协商出的签名随机数,r表示验证参数,xr表示验证参数r的横坐标,yr表示验证参数r的纵坐标,n表示椭圆曲线基点g的阶,mod表示求模操作;

步骤五、按照下式,每一个签名参与者idi计算第一部分签名r,如果r=0,则返回步骤三,如果r≠0,则继续执行下面步骤:

r=xrmodn

其中,r表示第一部分签名;

步骤六、每一个签名参与者idi计算消息m的哈希值h=hash(m),并按照数据类型转换规则,将h转化为一个整数e,之后计算自己的部分签名si=k-1(t-1e+rdi)modn。如果si=0,则返回步骤三,如果si≠0,则继续执行下面步骤;

其中,m表示消息,h表示消息m的哈希值,hash表示密码哈希算法,e表示哈希值h转换后的整数值,si表示第i个签名参与者idi所计算的部分签名,k-1表示t个签名参与者idi共同协商出的签名随机数k在模n下的乘法逆元,t-1表示签名参与者idi的数目t在模n下的乘法逆元;

步骤七、每一个签名参与者idi通过安全信道将自己的签名(r,si)发送给签名合成者;

其中,(r,si)表示第i个签名参与者idi的签名,由第一部分签名r和第i个签名参与者idi所计算的部分签名si两部分构成,签名合成者不被包含在签名参与者idi之内;

步骤八、签名合成者收到每个签名(r,si)后,对每个签名(r,si)计算第一个签名验证参数ui1=t-1esi-1modn,计算第二个签名验证参数ui2=rsi-1modn和验证参数ri′=(xir′,yir′)=ui1g+ui2qi,并判断验证参数ri′是否为零点。如果ri′是零点,则签名(r,si)验证失败,通知每一个签名参与者idi签名失败并退出签名过程,如果ri′不是零点,则计算签名参数ri=xir′modn,并验证等式ri=r是否成立。如果等式成立,则签名(r,si)验证成功,如果等式不成立,则签名(r,si)验证失败,通知每一个签名参与者idi签名失败并退出签名过程。如果每个签名参与者idi的签名(r,si)均验证成功,则继续执行下面的步骤,如果有的签名参与者idi的签名验证失败,则通知每一个签名参与者idi签名失败并退出签名过程,其中i=1,2,...,t;

其中,ui1表示第i个签名(r,si)的第一个签名验证参数,ui2表示第i个签名(r,si)的第二个签名验证参数,ri′表示签名合成者计算的第i个签名(r,si)的验证参数,xir′表示签名合成者计算的第i个签名验证参数ri′的横坐标,yir′表示签名合成者计算的第i个签名验证参数ri′的纵坐标;ri表示签名合成者计算的第i个签名参与者idi的签名参数;

步骤九、按照下式,签名合成者计算第二部分签名s,合成签名(r,s)并退出签名过程:

其中,s表示签名合成者计算的第二部分签名,(r,s)表示签名合成者合成的签名。

具体实施已经叙述完毕,其签名验证过程与比特币的签名验证过程相同,这不是本发明的内容。但为保证实施的完整性,这里给出签名验证过程,如下所示:

签名验证成者收到签名(r,s)后,计算消息m的哈希值h=hash(m),并按照数据类型转换规则,将h转化为一个整数e。之后,计算第一个签名验证参数u1=esi-1modn,计算第二个签名验证参数u2=rs-1modn,计算验证参数r=(xr,yr)=u1g+u2q,并判断r是否为零点,如果r是零点,则签名无效并退出签名验证过程,如果r不是零点,则计算v=xrmodn,并验证等式v=r是否成立。如果等式成立,则签名有效并退出签名验证过程,如果等式不成立,则签名无效并退出签名验证过程;

其中,u1表示签名(r,s)的第一个签名验证参数,u2表示签名(r,s)的第二个签名验证参数,v表示签名验证者计算的第一部分签名。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1