本发明属于计算机技术与信息安全技术领域,涉及一种利用布隆过滤器和基于身份的签名构造的可刺穿签名方法。
背景技术:
数字签名是一项重要的认证技术,签名者使用私钥对消息做签名,验证者使用公钥对签名做有效性验证。数字签名具有不可抵赖性质,即攻击者无法冒充私钥拥有者进行签名。数字签名目前广泛地应用于各类密码协议中,常见的数字签名标准如ecdsa等。
长期密钥泄露是目前认证协议安全性分析中经常考虑的一种攻击场景,这种考虑具有现实意义,即敌手可能在现阶段无法获取密钥,但经过一段时间敌手的攻击能力增强之后,这种攻击便成为可能。长期密钥即签名私钥泄漏后,敌手可以冒充签名者,传统签名方案将完全被攻破。在基于权益证明的区块链协议中,密钥泄露(通过敌手的贿赂等手段)带来的长距离攻击可以允许敌手篡改区块链历史,从而造成双花费攻击,是一种严重的安全威胁。
可刺穿签名考虑长期密钥泄漏对已有签名的安全性影响,提供对签名消息的刺穿功能,保证敌手即便获取私钥仍然无法伪造对已签名消息的签名。简单地说,刺穿功能对应密钥更新操作,以刺穿消息和当前密钥作为输入,输出的更新密钥将无法对包含刺穿消息的内容做签名。方案构造中,刺穿消息可以是签名消息的整体也可以是签名消息的任意指定字段。
可刺穿签名可以用于基于权益证明的区块链协议中抵抗密钥泄露带来的长距离攻击,即区块发布者在某一位置发布区块后,对该位置信息做刺穿操作,更新后的密钥无法在该位置做新的签名,使得敌手无法篡改区块链历史。除此之外,可刺穿签名还可以用于异步通信中,比如在线交易等。这类场景中,发送者向接收者(非交互地)发送签名的交易信息,但由于网络不同步以及接收者可能未在线,密钥泄露会造成发送者的签名受到篡改,交易的完整性得不到保证。刺穿签名可以通过在交易id处做刺穿,使得敌手无法篡改对应id的交易内容,从而实现对完整性的保证。随着异步网络的发展以及安全性需求的不断升级,刺穿签名将得到更加广泛的应用。
技术实现要素:
本发明的目的在于提供一种可刺穿的数字签名方法,本发明基于布隆过滤器和国产密码标准sm9(已被iso/iec14888-3收录成为国际标准),可应用到基于权益证明的区块链协议中,可以抵抗密钥泄露带来的长距离攻击,且运行效率高。
为实现上述目的,本发明采用如下技术方案:
一种可刺穿的数字签名方法,包括以下步骤:
步骤1:密钥初始化,利用sm9算法为每个位置身份i∈[l]分发对应的私钥ski;
步骤2:签名算法,选取位置身份
步骤3:刺穿算法,对字符串str做刺穿,完成对当前密钥的更新;
步骤4:签名验证算法,利用公钥vk,验证消息m的签名σ。
优选地,步骤1具体包括:
1)首先产生双线性映射的参数(p,e,ψ,g1,g2,gt,p1,p2),运行({hj}j∈[k],t)←gen(l,k)生成布隆过滤器bf=(bf.gen,bf.update,bf.check)实例,选取哈希函数
2)随机地选择
优选地,步骤2具体包括:
1)系统预设定消息的刺穿信息,包括位置信息和长度信息。
2)检测bf.check({hj}j∈[k],t,str)是否等于1,其中字符串str为消息m的刺穿字段,如果等于1,则签名失败,输出⊥。否则,挑选一个随机的
3)随机地选取
4)输出对消息m的签名
优选地,步骤3具体包括:
1)计算t′=update({hj}j∈[k],t,str),更新布隆过滤器状态位。
2)对于任意的i∈[l],更新私钥为
优选地,步骤4具体包括:
验证
一种可刺穿的数字签名系统,包括存储器和处理器,该存储器存储计算机程序,该程序被配置为由该处理器执行,该程序包括用于执行上述方法中各步骤的指令。
本发明基于布隆过滤器与sm9签名算法,提供对签名消息的刺穿功能,保证敌手即便获取私钥仍然无法伪造对已刺穿消息的签名,具体地包括以下两个重要的方面:
一、可刺穿签名方案的构造
本发明的可刺穿签名方案由系统建立setup、刺穿puncture、签名sign和验证verify四个算法组成,安全性基于τ-sdh困难假设。
该刺穿签名方案具备以下性质:1)可以实现对消息任意字段的刺穿功能;2)密钥更新过程中只需更新私钥,无需更新公钥,更符合实际应用场景;3)方案实际可用,所有操作均可实际部署;4)签名/验证算法能够保持底层基本签名/验证算法的效率;5)密钥更新操作高效,仅需常数代价。
二、将本发明应用到基于权益证明的区块链协议中
可刺穿签名可以用来在基于权益证明的区块链协议中发布区块,通过对区块消息中的时间字段做刺穿,能够抵抗密钥泄露带来的长距离攻击。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下面通过具体实施例,对本发明的技术方案做进一步说明。
一、符号说明
λ代表安全参数,[n]表示整数集合{1,...,n},
二、布隆过滤器
布隆过滤器(bloomfilter,bf)可以用来检索一个元素是否在一个集合s中,其中:s中的元素均属于集合u。简单来说,如果输入的元素s满足s∈s,则bf输出“1”,否则以较大的概率输出“0”。布隆过滤器由参数生成算法gen、更新算法update和检测算法check组成:
·gen(l,k):输入两个整数l和k,gen算法首先选取k个独立的哈希函数h1,...,hk,其中hj:u→[l](j∈[k])。定义h={hj}j∈[k],t=0l(t是一个l比特的数组,所有比特初始为0)。输出(h,t)。
·update(h,t,u):输入h={hi}i∈[k],t∈{0,1}l和u∈u,update算法首先设置更新后的状态t'为t'=t,之后对于任意的i∈[k]令t'[hi(u)]=1,并返回t'。
·check(h,t,u):输入h={hi}i∈[k],t∈{0,1}l和u∈u,check算法返回b=∩i∈[k]t[hi(u)]。
对于任意的元素集合s={s1,…,sn}∈un,首先运行(h,t0)←gen(l,k),然后对于i∈[n]运行ti=update(h,ti-1,si)。bf具有如下性质:(1)对于任意s∈s有pr[check(h,tn,s)=1]=1;(2)对于任意
三、双线性映射
g1,g2和gt是三个阶均为素数p的群,p1和p2分别是g1和g2的生成元,存在g2到g1的同态映射ψ:g2→g1使得ψ(p2)=p1。双线性映射e:g1×g2→gt满足如下条件:
·双线性性:对任意的(p,q)∈g1×g2和
·非退化性:e(p1,p2)≠1。
·可计算性:对任意的(p,q)∈g1×g2,存在有效的算法计算e(p,q)。
四、可刺穿签名方案
在本发明中,可刺穿签名方案基于bf和国产密码标准sm9(iso/iec14888-3国际标准)。方案描述过程中,假设消息的刺穿位置是系统预先设定的。
令参数(p,e,ψ,g1,g2,gt,p1,p2)选取满足双线性映射定义,bf=(bf.gen,bf.update,bf.check)为布隆过滤器。
·setup(1λ,l,k):首先运行({hj}j∈[k],t)←gen(l,k)生成bf实例,然后随机地选取
sk=(t,{ski}i∈[l]),vk=(ppub,g,{hj}j∈[k]),
其中
·puncture(sk,str):输入私钥sk=(t,{ski}i∈[l])和字符串str,其中
其中t′[i]代表数组t′的第i比特。最终,算法返回sk′=(t′,{ski′}i∈[l])。
·sign(sk,m):输入私钥sk=(t,{ski}i∈[l])和消息m,其中m的刺穿字段为字符串str。算法首先检查是否bf.check({hj}j∈[k],t,str)=1,如果是则输出⊥。否则,注意到bf.check({hj}j∈[k],t,str)=0意味着至少存在一个ij∈{i1,...,ik}满足
·verify(vk,m,σ):输入公钥vk=(ppub,g,{hj}j∈[k]),消息m和签名
其中sstr={hj(str):j∈[k]},如果“是”,则算法输出“1”(接受),否则输出“0”(拒绝)。
五、本发明在基于权益证明的区块链协议中的应用
在基于权益证明的区块链协议中,区块发布者在当前时间段slot处发布区块时,利用可刺穿签名对消息做签名,之后进入下一个时间段。待签名的消息包括当前时间段slot、交易信息和当前区块状态等信息,签名结束后对消息的slot部分执行刺穿操作得到更新后的密钥。根据可刺穿签名的性质,更新后的密钥将无法再对相同的slot做签名,从而保证了敌手无法更改区块链的历史。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,本发明的保护范围应以权利要求所述为准。