基于匿名广播加密的可链接环签名方法与流程

文档序号:16685619发布日期:2019-01-22 18:17阅读:345来源:国知局
基于匿名广播加密的可链接环签名方法与流程

本发明属于信息安全技术领域,涉及一种环签名方法,具体涉及一种基于匿名广播加密的可链接环签名方法,可用于区块链下需要权限判断是否可链接的交易场景。



背景技术:

数字签名又称公钥数字签名,电子签章,是一种类似写在纸上的普通的物理签名,同时使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。这种方法也就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。群签名是数字签名的一种,它满足在一个群签名方案中,一个群体中的任意一个成员可以以匿名的方式代表整个群体对消息进行签名,签名可以公开验证的,而且可以只用单个群公钥来验证。环签名是简化的群签名,且它只有环成员没有管理者,不需要环成员间的合作即可做出合法的签名,并且环签名具有正确性、匿名性和不可伪造性等性质。

可链接环签名指的是如果环中的某个签名人产生了两个消息签名,存在有效算法使得签名验证者可以确定这两个消息是由环中同一个签名人产生的,但签名验证者不知道具体这个签名人的身份。可链接环签名由以下四个算法组成:密钥产生算法,签名产生算法,验证算法和签名链接算法。密钥产生算法采用一个概率多项式时间算法,通过安全参数k,生成公钥和私钥;签名产生算法采用一个概率多项式时间算法,通过消息m,n个环成员的公钥和其中一个成员的私钥,对消息m计算得到环签名r;验证算法采用一个概率多项式时间确定算法,通过消息m和环签名r,计算验证值,若为1,则环签名r为消息m的签名,否则环签名r不是消息m的签名;签名链接算法采用一个概率多项式时间算法,通过两个环签名,计算链接验证值,若为1,则这两个签名由同一个环成员产生,否则这两签名不是由同一个环成员产生的。随着近期区块链技术的发展,可链接环签名可以应用到电子货币中,例如,门罗币,火币等。

2018年carstenbaum,huanglin等人在期刊《iacrcryptologyeprintarchive》发表了题目为“towardspracticallattice-basedone-timelinkableringsignatures”的论文,公开了一种基于格的抗碰撞哈希函数构造的可链接环签名方法,该方法的步骤是:系统初始化,密钥生成,生成可链接签名,验证签名,判断可链接性。其中,判断可链接性是验证者收到签名后,得到未被加密的可链接标志,可以直接对几个签名进行可链接性判断。该方法的优点是基于格的困难性问题,能够确保在后量子时代依然是安全的,同时能够通过一次性密钥的方式,确保接收者的匿名。但该方法的中可链接性是所有验证者都可以进行验证的,不适用于需要权限判断是否可链接的场景,应用范围窄,且不能保证可链接验证者的匿名性,安全性不足。



技术实现要素:

本发明的目的在于克服上述现有技术存在的缺陷,提出了一种基于匿名广播加密的可链接环签名方法,旨在拓宽可链接环签名的应用范围,并提高可链接验证者的安全性。

为实现上述目的,本发明采取的技术方案包括如下步骤:

(1)设定环签名参数:

设定环成员的个数为n,n≥2,每个环成员的身份为idx,x是环成员的标号,x=[1,n];设定可信第三方向环成员发送的单向函数为f;

(2)环成员idx获取公共参数:

(2a)环成员idx采用概率多项式时间的群生成算法,通过环签名的安全参数生成环签名的群参数gkx:gkx=(g,q,g),其中,g是阶为素数q、生成元为g的群;

(2b)环成员idx采用非交互式零知识证明方法,通过环签名的群参数gkx,计算公共参考串crsx;

(2c)环成员idx采用知识签名方法,通过环签名的群参数gkx,计算知识签名公开值ppsokx;

(2d)环成员idx对自己的gkx、crsx和ppsokx进行级联,得到环签名公开值ppx:ppx:=(gkx,ppsokx,crsx);

(3)环成员idx生成密钥和可链接哈希值pkskx:

(3a)环成员idx随机产生签名密钥skx,并通过单向函数f产生验证密钥vkx:vkx=f(skx),同时采用elgamal公钥加密密钥产生算法,通过群参数gkx,计算自己的公钥pkx和私钥dkx,所有环成员的公钥组成环公钥集合r:r=(pk1,...,pkn);

(3b)环成员idx采用哈希函数pk,通过签名密钥skx,计算可链接哈希值pkskx=pk(skx);

(4)可信第三方获取广播加密参数:

可信第三方采用匿名广播加密的初始化方法,通过广播加密安全参数,计算广播加密公共参数params和主密钥msk;

(5)可信第三方计算环成员idx的广播加密私钥skidx并发送:

可信第三方采用匿名广播加密的密钥生成方法,通过主密钥msk和环成员身份idx,计算环成员idx的广播加密私钥skidx,并发送给环成员idx;

(6)签名者计算可链接标志tag和标志密文ct:

(6a)n个环成员中需要签名的签名者idu采用可链接标志产生方法,通过签名密钥sku,计算消息m的可链接标志tag,其中,u是签名者的标号,1≤u≤n;

(6b)签名者idu在剩余的n-1个环成员中,随机选取一个环成员a作为追责者,同时随机选取除idu和追责者a外的t个环成员身份,组成授权用户集合s,1≤t<n-1;

(6c)签名者idu采用匿名广播加密的加密方法,通过s和tag,计算标志密文ct;

(7)签名者idu获取自己对关于消息m的环签名σ:

(7a)签名者idu采用elgamal公钥加密的加密算法,并通过从整数群zq中随机选取的加密随机数r,以及签名者的验证密钥vku和追责者a的公钥pka,计算验证密钥密文c;

(7b)签名者idu采用知识签名方法,通过知识签名公开值ppsoku、追责者的公钥pka、环公钥集合r、验证密钥密文c、标志密文ct、签名者idu的签名密钥sku、加密随机数r和消息m,计算知识签名σsok;、

(7c)签名者idu对验证密钥密文c、标志密文ct和知识签名σsok进行级联,得到idu对关于消息m的环签名σ;

(8)验证者对环签名σ的正确性进行验证:

验证者采用知识签名方法,通过知识签名公开值ppsoku、追责者a的公钥pka、环公钥集合r、验证密钥密文c、标志密文ct、消息m和环签名σ中的知识签名σsok,计算知识签名验证值,若知识签名验证值为1,则σsok为正确,即环签名σ为正确,执行步骤(9),否则σsok为错误,即环签名σ为错误,并丢弃该环签名σ;

(9)判断验证者的身份:

若验证者有广播加密私钥且采用匿名广播加密的解密方法,通过广播加密私钥和标志密文ct,对标志密文ct进行解密,若能得到可链接标志tag,则该验证者是授权用户,并执行步骤(10),若验证者有私钥dkx,且采用elgamal公钥加密的解密算法,通过dkx和验证密钥密文c对c进行解密,若能解密得到签名者的验证密钥vku,则该验证者是追责者,并执行步骤(11);

(10)授权用户对环签名σ的可链接性进行验证:

授权用户采用可链接标志验证方法,通过消息m、可链接标志tag和可链接哈希值pkskx,计算n个环成员的可链接验证值,若n个可链接验证值存在一个值为1,则可链接标志tag为正确,即环签名σ是可链接签名,并记录环签名σ和可链接验证值为1对应的pkskx,否则可链接标志tag为错误,并丢弃环签名σ;

(11)追责者计算签名者信息证明ψ:

追责者a采用非交互零知识证明方法,通过公共参考串crsu、签名者的验证密钥vku、验证密钥密文c、追责者的公钥pka和私钥dka,计算签名者信息证明ψ并公开;

(12)追责者以外的其它用户对签名者信息证明ψ的正确性进行验证:

除追责者以外的其它环成员或可信第三方采用非交互零知识证明方法,通过公共参考串crsu、签名者的验证密钥vku、追责者的公钥pka和签名者信息证明ψ,计算非交互验证值,若非交互验证值是1,则ψ为正确,否则ψ为错误,并丢弃该ψ。

本发明与现有技术相比,具有以下优点:

第一,本发明在对环签名进行可链接验证的时候,由于采用了匿名广播加密方法对可链接标志tag进行了加密,所以只有授权的可链接验证者才能对可链接标志tag解密,解决自由指定可链接验证者的问题,增加可链接环签名的应用范围。

第二,本发明在计算标志密文ct的时候,通过哈希函数和随机数将授权用户集合s盲化在标志密文ct中,解决了可链接验证者匿名的问题,提高可链接验证者的安全性。

第三,本发明在解密标志密文ct的时候,解密计算时间与授权用户集合s的大小无关,解决由于授权用户的增加而引起的计算时间增加的问题,进一步的提高了指定多个授权用户时验证的效率。

附图说明

图1为本发明的实现流程图。

具体实施方式

以下结合附图和具体实施例,对本发明作进一步详细说明。

参照图1,一种基于匿名广播加密的可链接环签名方法,包括如下步骤:

步骤1)设定环签名参数:

设定环成员的个数为n,n≥2,本实施例中取n=5,每个环成员的身份为idx,x是环成员的标号,x=[1,5];设定可信第三方向环成员发送的单向函数为f;

步骤2)环成员idx获取公共参数:

步骤2a)环成员idx采用概率多项式时间的群生成算法,通过环签名的安全参数生成环签名的群参数gkx:gkx=(g,q,g),其中,g是阶为素数q、生成元为g的群;

本步骤中,所述的概率多项式时间的群生成算法使用java的基于对的密码学库jpbc中的群生成算法;

步骤2b)环成员idx采用非交互式零知识证明方法,通过环签名的群参数gkx,计算公共参考串crsx;

本步骤中,所述的非交互式零知识证明方法,通过环签名的群参数gkx,公共参考串生成算法产生一个多项式长度的公共参考串crsx;

步骤2c)环成员idx采用知识签名方法,通过环签名的群参数gkx,计算知识签名公开值ppsokx;

本步骤中,所述的知识签名方法,输入群参数gkx,通过一个概率多项式时间算法输出签名公开值ppsokx;

步骤2d)环成员idx对自己的gkx、crsx和ppsokx进行级联,得到环签名公开值ppx;

步骤3)环成员idx生成密钥和可链接哈希值pkskx:

步骤3a)环成员idx随机产生签名密钥skx,并通过单向函数f产生验证密钥vkx:vkx=f(skx),同时采用elgamal公钥加密密钥产生算法,通过群参数gkx,计算自己的公钥pkx和私钥dkx,所有环成员的公钥组成环公钥集合r:r=(pk1,...,pk5);

本步骤中,所述的公钥pkx和私钥dkx,其中,私钥dkx从整数群中随机选取的,公钥pkx的计算公式为:

其中,g表示群g的生成元;

步骤3b)环成员idx采用哈希函数pk,通过签名密钥skx,计算可链接哈希值pkskx=pk(skx);

本步骤中,可链接哈希值pkskx公开,但无法链接pkskx与环成员idx;

步骤4)可信第三方获取广播加密参数:

可信第三方采用匿名广播加密的初始化方法,通过广播加密安全参数,计算广播加密公共参数params和主密钥msk;

本步骤中,所述的计算广播加密公共参数params和主密钥msk,实现步骤为:

步骤4a)可信第三方采用双线性对生成算法,通过广播加密安全参数,生成双线性映射(p,q,qt,e),并从q中随机选取群生成元q,从整数群zp中随机选取广播加密随机数α,然后计算关于α的群元素q1=qα,最后对(p,q,qt,e)、q、zp、q1以及哈希函数h1:{0,1}*→q、h2:qt→{0,1}λ和h3:{0,1}*→zp进行级联,得到广播加密公共参数params,其中,q和qt是阶为素数p的循环群,e是双线性映射q×qt,双线性对生成算法可在java的基于对的密码学库jpbc中选取;

步骤4b)可信第三方对广播加密公共参数params进行哈希运算,并将计算结果与广播加密随机数α进行级联,得到主密钥msk;

步骤5)可信第三方计算环成员idx的广播加密私钥并发送:

可信第三方采用匿名广播加密的密钥生成方法,通过主密钥msk和环成员身份idx,计算环成员idx的广播加密私钥并发送给环成员idx;

本步骤中,所述的计算广播加密私钥实现步骤为:

步骤5a)可信第三方采用哈希函数h1:{0,1}*→q,通过环成员身份idx,计算前端广播私钥并采用基于身份的广播加密算法,通过主密钥msk和环成员身份idx,计算后端广播私钥

步骤5b)可信第三方对进行级联,得到环成员idx的广播加密私钥

步骤6)签名者计算可链接标志tag和标志密文ct:

步骤6a)5个环成员中需要签名的签名者idu采用可链接标志产生方法,通过签名密钥sku,计算消息m的可链接标志tag,其中,u是签名者的标号,1≤u≤5;

本步骤中,所述的计算消息m的可链接标志tag,实现步骤为:

5个环成员中需要签名的签名者idu采用了哈希函数pk,计算签名密钥sku和消息m的哈希值,并采用佩德森比特承诺的承诺方法对该哈希值进行承诺计算,得到消息m的可链接标志tag;

步骤6b)签名者idu在剩余的4个环成员中,随机选取一个环成员a作为追责者,同时随机选取除idu和追责者a外的t个环成员身份,本实施例中取t=2,组成授权用户集合s,1≤t<4;

本步骤中,所述的授权用户就是可链接验证者,其余的成员不可以打开可链接标志tag;

步骤6c)签名者idu采用匿名广播加密的加密方法,通过s和tag,计算标志密文ct;

本步骤中,所述的计算标志密文ct,实现步骤为:

步骤6c1)签名者idu采用基于身份的广播加密算法,通过授权用户集合s、可链接标志tag和广播加密公共参数params,计算主公钥svk和主私钥ssk;

步骤6c2)签名者idu通过从整数群zp中随机选取的广播加密秘密数δ,计算广播加密秘密值r':r'=h3(δ,tag),然后计算授权用户集合s中每个环成员idst对应的前端密文其中,h1:{0,1}*→q,h2:qt→{0,1}λ,h3:{0,1}*→zp,e是双线性映射q×qt,q1是关于广播加密随机数α的群元素,tag是可链接标志;

本步骤中,所述的前端密文通过公式盲化了环成员身份idst,确保了可链接验证者的匿名性;

步骤6c3)签名者idu采用基于身份的广播加密算法,通过广播加密公共参数params、授权用户集合s中每个环成员idst、主公钥svk和可链接标志tag,计算授权用户集合s中每个环成员idst对应的后端密文

步骤6c4)签名者idu对前端密文和后端密文进行级联,得到身份密文c1;

步骤6c5)签名者idu通过广播加密秘密值r'和群q的生成元q,计算部分密文t=qr',并采用基于身份的广播加密算法,通过主私钥ssk对t和c1进行签名,得到广播加密签名σ';

步骤6c6)签名者idu对主公钥svk、部分密文t、身份密文c1和广播加密签名σ'进行级联,得到标志密文ct;

步骤7)签名者idu获取自己对关于消息m的环签名σ:

步骤7a)签名者idu采用elgamal公钥加密的加密算法,并通过从整数群zq中随机选取的加密随机数r,以及签名者的验证密钥vku和追责者a的公钥pka,计算验证密钥密文c;

本步骤中,所述的计算验证密钥密文c,实现步骤为:

步骤7a1)签名者idu通过追责者a的公钥pka和从整数群zp中随机选取的公钥加密随机数r,计算前段密文k=pkar

步骤7a2)签名者idu通过群g的生成元g、验证密钥vku和公钥加密随机数r,计算后段密文l=grvku;

步骤7a3)签名者idu对前端密文k和后端密文l进行级联,得到c;

步骤7b)签名者idu采用知识签名方法,通过知识签名公开值ppsoku、追责者的公钥pka、环公钥集合r、验证密钥密文c、标志密文ct、签名者idu的签名密钥sku、加密随机数r和消息m,计算知识签名σsok;、

本步骤中,所述的知识签名方法,输入签名公开值ppsoku,知识签名陈述st包括追责者的公钥pka、环公钥集合r、验证密钥密文c和标志密文ct,消息m,知识签名证据wi包括签名密钥sku和加密随机数r,通过一个概率多项式时间算法输出知识签名σsok;

步骤7c)签名者idu对验证密钥密文c、标志密文ct和知识签名σsok进行级联,得到idu对关于消息m的环签名σ;

步骤8)验证者对环签名σ的正确性进行验证:

验证者采用知识签名方法,通过知识签名公开值ppsoku、追责者a的公钥pka、环公钥集合r、验证密钥密文c、标志密文ct、消息m和环签名σ中的知识签名σsok,计算知识签名验证值,若知识签名验证值为1,则σsok为正确,即环签名σ为正确,执行步骤(9),否则σsok为错误,即环签名σ为错误,并丢弃该环签名σ;

本步骤中,所述的知识签名方法,输入知识签名公开值ppsoku,知识签名陈述st包括追责者的公钥pka、环公钥集合r、验证密钥密文c和标志密文ct,消息m和知识签名σsok,通过一个概率多项式时间算法输出1或者0;

步骤9)判断验证者的身份:

若验证者有广播加密私钥且采用匿名广播加密的解密方法,通过广播加密私钥和标志密文ct,对标志密文ct进行解密,若能得到可链接标志tag,则该验证者是授权用户,并执行步骤(10),若验证者有私钥dkx,且采用elgamal公钥加密的解密算法,通过dkx和验证密钥密文c对c进行解密,若能解密得到签名者的验证密钥vku,则该验证者是追责者,并执行步骤(11);

本步骤中,所述的匿名广播加密的解密方法,实现步骤为:

验证者通过部分密文t、身份密文c1和广播加密签名σ'计算出的签名验证值,对广播加密签名σ'的正确性进行验证,若签名验证值为1,则σ'为正确,采用基于身份的广播解密算法,对标志密文ct进行解密,得到可链接标志tag,否则σ'为错误,解密失败;

本步骤中,只有用授权用户使用自己的广播加密私钥才可以解密标志密文ct,也就能够实现自由指定可链接验证者;

本步骤中,所述的验证密钥vku,计算公式为:

其中,k为步骤(7a1)中的前段密文,l为步骤(7a2)中的后段密文,dka表示整数群zp的一个成员;

步骤10)授权用户对环签名σ的可链接性进行验证:

授权用户采用可链接标志验证方法,通过消息m、可链接标志tag和可链接哈希值pkskx,计算5个环成员的可链接验证值,若5个可链接验证值存在唯一一个值为1,则可链接标志tag为正确,即环签名σ是可链接签名,并记录环签名σ和可链接验证值为1对应的pkskx,否则可链接标志tag为错误,并丢弃环签名σ;

本步骤中,所述的记录环签名σ和可链接验证值为1对应的pkskx,授权用户当对多个环签名进行验证后,找到记录中使用相同的可链接哈希值pkskx验证成功的环签名,可以说这些签名是由同一个签名者签发的,这些签名具有可链接性;

本步骤中,所述的计算5个环成员的可链接验证值,实现步骤为:

步骤10a)授权用户采用佩德森比特承诺打开方法,通过随机承诺因子和可链接标志tag,计算承诺值;

步骤10b)授权用户采用非交互零知识证明方法,通过承诺值、消息m和可链接哈希值pkskx,计算5个环成员的可链接验证值;

步骤11)追责者计算签名者信息证明ψ:

追责者a采用非交互零知识证明方法,通过公共参考串crsu、签名者的验证密钥vku、验证密钥密文c、追责者的公钥pka和私钥dka,计算签名者信息证明ψ并公开;

本步骤中,所述的非交互零知识证明方法,由追责者a将非交互陈述ci,包括签名者的验证密钥vku、验证密钥密文c和追责者的公钥pka,相应的证据wit即私钥dka,和公共参考串crsu作为输入,生成证明ψ;

步骤12)追责者以外的其它用户对签名者信息证明ψ的正确性进行验证:

除追责者以外的其它环成员或可信第三方采用非交互零知识证明方法,通过公共参考串crsu、签名者的验证密钥vku、追责者的公钥pka和签名者信息证明ψ,计算非交互验证值,若非交互验证值是1,则ψ为正确,否则ψ为错误,并丢弃该ψ;

本步骤中,所述的非交互零知识证明方法,验证者验证三元组(ci,crsu,ψ)并输出接受或者拒绝,其中。具体的讲,追责者想要证明非交互陈述ci∈l,其中l是np语言,即在给定非交互陈述ci和图灵机算法ml,追责者通过证据wit想要向验证者证明陈述:ml(ci,wit)=1成立。

本步骤主要说明追责者外的验证者通过验证签名者信息证明ψ表明验证者接受或者拒绝追责者对签名者身份的证明。

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