本发明涉及信息安全领域,特别是涉及盲可验证加密签名方法。
背景技术:
可验证加密签名(ves)最早由n.asokan等人提出,其主要应用在电子商务中的公平合同签署领域。在ves体制中,除了合同签署双方alice和bob之外,还有一个可信第三方(ttp),也就是仲裁者的角色。alice利用自己私钥以及仲裁者的公钥对消息进行操作生成可验证加密签名,bob可以验证此签名的有效性,但不能得出关于真实数字签名的任何信息。仲裁者可以从可验证加密签名中提取出真实的数字签名,在合同签署中发生纠纷时,比如alice不给bob发送自己的真实签名的情况下,bob则可以向仲裁者申述并得到alice的真实数字签名。此体制能有效保证电子合同的公平签署,特别是在电子商务愈发流行的今天,此体制得到了广泛的应用。
目前,ves体制的ttp大多是中心化的,这些ttp通常掌握有合同的一些敏感信息,如果这些敏感信息因为方方面面的原因而导致泄露的话,那系统的安全性将不复存在。因此,从总体看来,目前中心化的ttp具有较低的可靠性和可信性、较高的安全风险。现在随着区块链技术的迅速发展,且由于区块链本身的去中心化,信息不可篡改,开放性等特点,使得区块链可以有效充当一个无中心ttp的角色,但是区块链无中心ttp在设计安全协议时还存在隐私保护的问题,以普通可验证加密签名体制为例,中心化ttp在出现争端时可能会提取合同的真实数字签名,并转交给合同的参与者。采用无中心的区块链技术之后,如果不改变技术实现,每个区块链节点都有责任在出现争端时提取合同的真实数字签名。这意味着任何人都可以得知一份合同的真实数字签名,这显然是不合适的。而且,对于很多的电子合同签署,还要求不向区块链上的节点透露签名者的身份。因此,设计一种基于区块链的盲可验证加密签名方案是很必要的。
本发明在普通的可验证加密方案的基础上进行了改进,通过引入共享秘密因子参数来对签名者的公钥信息进行盲化。区块链上的节点能够对签名信息进行有效性检查,但无法获取真实的数字签名,同时,区块链上的节点也不能获取到签名者的公钥信息。
技术实现要素:
本发明的目的在于提供一种基于区块链的盲可验证加密签名方法。本发明通过对签名者公钥信息的盲化,使得区块链上的节点除了验证签名有效性之外无法获取到真实的数字签名以及签名者的公钥,达到了对签名者的隐私保护。
为实现上述目的,本发明给出如下方法:
该方法涉及签名者alice,签名提取者bob以及区块链验证者三个参与方,包括以下五个步骤:
s1.alice和bob协商待签署消息,根据系统参数生成各自密钥对;
s2.alice和bob生成签名标签;
s3.alice生成与签名标签相符的盲可验证加密签名;
s4.区块链验证者验证盲可验证加密签名的有效性;
s5.bob从盲可验证加密签名中提取出数字签名。
所述步骤s1(即alice和bob协商待签署消息,根据系统参数生成各自密钥对)包括以下子步骤:
s1a.alice和bob协商好要签署的内容m;
s1b.使用的系统参数包括一个双线性对运算e:g1×g1→g2,其中g1是一个循环加法群,p是该加法群的一个生成元,g2是一个循环乘法群,大素数q作为g1和g2群的阶;系统参数还包括两个哈希函数
s1c.alice生成自己的密钥对(xa,ya),其中
s1d.bob生成自己的临时密钥对(xb,yb),其中
所述步骤s2(即alice和bob生成签名标签)包括以下子步骤:
s2a.bob把自己的临时公钥yb发送给alice;
s2b.alice选择随机数
s2c.alice计算sya和sh(m),把(sya,sh(m))作为签名标签,并把签名标签、自己的公钥ya、αp三个元素发送给bob;
s2d.bob计算秘密因子
所述步骤s3(即alice生成与签名标签相符的盲可验证加密签名)包括以下子步骤:
s3a.alice用自己的私钥xa、bob的临时公钥yb以及秘密因子s生成盲可验证加密签名:
s3b.alice把δbves、签名标签(sya,sh(m))、以及bob的临时公钥yb通过交易发送到区块链上。
所述步骤s4(即区块链验证者验证盲可验证加密签名的有效性)包括以下子步骤:
s4a.区块链验证者从alice的交易内容中获取δbves、签名标签(sya,sh(m))、以及bob的临时公钥yb,验证等式e(sh(m)p+sya,δbves)=e(p,yb)是否成立,若成立,则此交易的该验证条件满足,否则该交易无效。
所述步骤s5(即bob从盲可验证加密签名中提取出数字签名)包括以下子步骤:
s5a.bob从区块链上的交易中根据签名标签(sya,sh(m))获取δbves,使用自己的临时私钥xb以及s',计算
本发明通过对签名者公钥信息的盲化,使得区块链上的节点除了验证签名有效性之外无法获取到真实的数字签名以及签名者的公钥,达到了对签名者的隐私保护。
附图说明
图1一种基于区块链的盲可验证加密签名方法
具体实施方式
该方法包括了签名者alice,签名提取者bob以及区块链验证者三个参与方。具体实施时包括以下步骤:alice和bob协商待签署消息,根据系统参数生成各自密钥对;alice和bob生成签名标签;alice生成与签名标签相符的盲可验证加密签名;区块链验证者验证盲可验证加密签名的有效性;bob从盲可验证加密签名中提取出数字签名。下面用一个实例来对本发明的签名算法进行具体的阐述。
实施例
假设张三和李四协商好了一个电子合同m,张三需要对此合同进行签名然后发布到区块链网络,区块链验证者获得此签名并对签名的有效性进行验证,验证通过后李四能从此签名中提取出张三对m的真实数字签名。本实例的参与者为:张三(alice),李四(bob)以及区块链验证者。
完成上述要求的实施过程如下:
1.张三和李四协商待签署消息,根据系统参数生成各自密钥对的步骤包括:
1)张三和李四协商好要进行签名的消息对象m;
2)系统参数通过使用jpbc库中的类型a参数来生成,包括一个双线性对运算e:g1×g1→g2,其中g1是一个循环加法群,p是该加法群的一个生成元,由于g1加法群的性质,所以可从g1群中随机产生一个元素作为生成元p,本实施例中
p=(1886838811700642753186919333233596045972984349474553475519189332436776640393278247059848269154718276952098681419906711522112384525083465106862369549654975,2596118791621429839318942489462468531693019253416672067948162368052511627177428704522724995928460727846519379424107311484133250144759044360882577217454304,0),g2是一个循环乘法群,大素数q=(730750818665451621361119245571504901405976559617),是g1和g2群的阶。类型a参数如下:
q:
8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791
h:
12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776
r:730750818665451621361119245571504901405976559617
exp2:159
exp1:107
sign1:1
sign0:1
系统参数还包括两个哈希函数
3)张三生成自己的密钥对(xa,ya),其中
xa=(262069118821017033017767894686634513369172338544),
ya=(5214242375212085202166532028022716995752911262003412221432853196817284055845577217878803986689188392513721378401746991421602251749441865184061977040956528,2382585105500975576447260474037736971591132086897619959210429496147797898346553062609292393011701852843859538559784313035887818686304463847917863348290175,0);
4)李四生成自己的临时密钥对(xb,yb),其中
xb=(282514111754882280128993250731183134054202832814),
yb=(1497100614253768531635448261585913465154055062453025419642336213088604194241748614141839478242207623490355642273575634201798588229669246292383010486517063,5806104483670682007648357313372088435399819445351143474963052390357920316446177364303736759638237238711006231462624990349307737215428466217763707560620676,0)。
2.张三和李四生成签名标签的步骤包括:
1)李四把自己的临时公钥yb发送给张三;
2)张三选择随机数
3)张三计算sya和sh(m),把(sya,sh(m))作为签名标签,并把签名标签、自己的公钥ya、αp三个元素发送给李四;
4)李四计算秘密因子
3.张三生成与签名标签相符的盲可验证加密签名的步骤包括:
1)张三用自己的私钥xa、李四的临时公钥yb以及秘密因子s生成盲可验证加密签名:
2)张三把δbves、签名标签(sya,sh(m))、以及李四的临时公钥yb通过交易发送到区块链上。
4.区块链验证者验证盲可验证加密签名的有效性的步骤包括:
1)区块链验证者从张三的交易内容中获取δbves、签名标签(sya,sh(m))、以及李四的临时公钥yb,验证等式e(sh(m)p+sya,δbves)=e(p,yb)是否成立,若成立,则此交易的该验证条件满足,否则该交易无效。
5.李四从盲可验证加密签名中提取出数字签名的步骤包括:
1).李四从区块链上的交易中根据签名标签(sya,sh(m))获取δbves,使用自己的临时私钥xb以及s',计算