一种通用的数字签名方案的实现方法

文档序号:7645292阅读:255来源:国知局
专利名称:一种通用的数字签名方案的实现方法
技术领域
本发明涉及信息安全领域。特别的,本发明涉及一种基于任意具体数字签名方案的数字签名生成和验证系统。

背景技术
数字签名是一种基本的信息安全技术,在身份认证、数据完整性、不可否认性以及匿名性等方面有重要应用,特别是在网络安全通信中的密钥分配,认证以及电子商务、电子政务等系统中具有重要的作用。数字签名是实现认证的重要工具。
数字签名的生成和验证需要签名者的签名私钥和验证公钥。签名者的签名私钥是仅被签名者知晓的。签名者的验证公钥则是公开的。数字签名的生成需要使用签名者的签名私钥和被签名的数字内容。数字签名的验证则是使用验证公钥来确认签名者拥有对应的签名私钥。数字签名的安全性要求数字签名应是不可伪造的,即没有签名私钥的任何人或者设备都不能伪造一个数字签名。签名私钥具有唯一标志签名者身份的重要作用,数字签名不应泄漏签名私钥的有用信息。
目前存在多种公开的数字签名方案,例如RSA签名方案,Rabin签名方案,ElGamal签名方案,Schnorr签名方案,DSS签名方案,GOST签名方案等。其中部分的签名方案具有如下的一种良好性质以离线/在线方式完成数字签名。例如Schnorr签名方案,签名者可以在任意时间预先计算并存储一部分数据完成离线计算部分,然后在需要计算被签名的数字内容的签名时,使用存储的数据来快速生成数字签名,完成在线计算部分。因为签名方案通常涉及复杂耗时的指数运算,而这些运算通常可以放到离线计算部分,所以离线/在线方式完成数字签名可以显著减小签名方案的在线响应时间,提高签名的效率。遗憾的是,具有这种良好性质的数字签名方案通常具有特定的数学结构并基于特定的数学困难问题,它不适用于任意的数字签名方案。一旦某个要使用的数字签名方案受专利保护或者不具有这种性质时,那么应用就会被限制。
为了弥补这种缺憾,Even等在1989年提出了数字签名方案。一个数字签名方案首先是一种数字签名方案,可以生成和验证数字签名。然而更为重要的是一个数字签名方案可以使用任意具体数字签名方案,并且依旧具有离线/在线计算方式这一良好性质。Even等提出的数字签名方案实现方法计算量较大,其签名的长度是消息长度的非线性函数,不具备实用性。Shamir等在2001年使用变色龙函数,提出“杂凑-签名-转换”的方式来实现数字签名方案,意在提高数字签名方案的效率。然而Shamir等实现的数字签名方案具有密钥泄漏的问题。当签名者使用相同的变色龙函数生成值来对不同的被签名数字内容进行运算,获得不同的数字签名时,验证者就可以获得签名者的签名私钥。为了解决这一问题,签名者必须在离线阶段计算大量的变色龙函数生成值,并存储这些生成值和相应的具体签名方案的签名值。然而当具体签名方案的签名长度较长时,需要的额外存储空间急剧增加,例如使用RSA签名体制,模长为1024比特,那么存储1024个变色龙函数生成值,就需要额外的存储空间1M,这在智能卡、PDA、手机等瘦客户的信息安全应用环境中受到限制。除了存储空间的问题,Shamir等人的数字签名方案所需要的离线计算量较大,签名的长度较长,效率不高。
陈等人在2007年提出了一种解决密钥泄露的方法,其中使用了一种特殊的双陷门变色龙函数,并把具体签名方案的签名值作为用户的公开信息,减少了带宽和计算消耗,具有很好的效率。
门限数字签名是一种数字签名方案。该数字签名方案通常有n个签名者共同参与签名私钥和签名公钥的生成,其中n是自然数。一个给定消息的数字签名,需要t个具有签名私钥的签名者共同参与生成,其中t是自然数,小于n/2。数字签名的验证可以由任何拥有签名公钥的验证者验证。门限数字签名具有如下优点即使一小部分拥有签名私钥的签名者签名私钥泄露了,只要泄露私钥的签名者数量小于t,那么t个具有签名私钥的签名者共同参与生成的数字签名依旧是有效的。
门限数字签名可以通过离线/在线方式生成。Crutchfield等人给出了一种离线/在线方式门限数字签名方案。Crutchfield等人的方案基于Shamir等人实现的数字签名方案,因而具有密钥泄露问题。陈等人的数字签名方案在数字签名生成过程中使用了私钥的逆运算,很难实现门限数字签名方案。
由上述可知,现有技术中已公布数字签名方案并不理想。我们希望给出一种数字签名方案,使之可以扩展为门限数字签名方案,解决密钥泄露问题,并在存储空间、计算量、签名长度等技术指标上进一步优化。


发明内容
本发明的目的在于提供一种通用的数字签名方案的实现方法,解决背景技术中陈等人所提方案关于使用私钥逆运算的限制,减少计算量,并扩展为门限数字签名方案,解决密钥泄露问题,减小存储空间、计算量、签名长度。
为实现上述目的,本发明提供一种数字签名方案的实现方法设置公开的系统参数;设置所有签名者拥有的签名私钥和公开的验证公钥;所有签名者预先计算部分数据;所有签名者存储预先计算的部分数据;部分签名者实时计算给出的数字内容对应的数字签名;验证者使用验证公钥来验证数字签名的正确性。
1)公开的系统参数包括素数p,有限域Fp,有限域上的椭圆曲线E(Fp),素数q,椭圆曲线的一个阶为q的点P,由点P生成的子群G,密码学安全的杂凑函数fZq×G→Zq,双陷门变色龙函数H,具体签名方案(JG,JS,JV),密钥生成协议KG。
其中密码学安全的杂凑函数f是指该函数满足抗碰撞、输出序列与伪随机序列不可区分、单向等密码学特性。
其中双陷门变色龙函数H的构造方法为子群G中两个元素A、B进行点加操作,其中A或者B由子群G中另外两个群元素C、D的点加结果与Zq中元素E进行数乘操作获得。一种设置方法为输入(m∈Zq,K∈G,Y∈G,r∈Zq)时,输出f(m,K)·(K+Y)+rP。
2)所有签名者的数量为n,n为自然数,其中签名者j(j∈{1…n})的签名私钥(SKj,xj,kj*)和所述公开的验证公钥(VK,Y,h,σ)按照如下的步骤生成 (1)签名者j使用具体签名方案中的密钥生成算法JG来生成签名者j的签名私钥之一SKj和签名者的验证公钥之一VK。
(2)签名者j使用KG协议生成(xj,Y),签名者j的签名私钥之二是xj,验证公钥之二是Y。
(3)签名者j使用KG协议生成(kj*,h),签名者j的签名私钥之三是kj*,验证公钥之三是h。签名者j运行具体签名方案中的签名算法JS,把h作为被签名内容,获得具体签名方案的签名值σ,把签名值σ作为公钥之四。
其中密钥生成协议KG在n=1时由签名者j均匀选择随机数rKG并进行数乘操作获得rKGP,进而获得(rKG,rKGP)数据对;在n>1时由所有签名者共同执行安全的分布式密钥生成协议DKG,签名者j获得(rKGj,rKGP)数据对; 其中具体签名方案(JG,JS,JV)在n=1时为签名者j单独执行的、任意的、在选择消息攻击下安全的签名方案,在n>1时为多个签名者共同执行的、任意的、在选择消息攻击下安全的门限签名方案。
3)所有签名者中的签名者j预先计算一次性数据对(kij,Ki),i∈{1…L},L为签名者j的安全存储区所能容纳的一次性数据对(kij,Ki)的数量上限,i为该安全存储区的当前空区的索引值,如果不存在空区,则提示签名者j停止计算一次性数据对的操作。一次性数据对(kij,Ki)计算如下 签名者j使用KG协议生成(kij,Ki)。
其中安全存储区意味着该存储区的数据在使用前不得泄露。
4)签名者j在i所索引的存储区存储预先计算的一次性数据对(kij,Ki)。
5)部分签名者的数量为t+1,t取值0或者自然数,并且t<n/2,其中签名者j实时计算数字签名的过程如下 (1)签名者j从其安全存储区中提取未曾使用的一次性数据对(kij,Ki)。
(2)给定被签名内容mi,计算rij=kj*-f(mi,ki)·(kij+xj)(模q),如果t=0,则rij为签名值之一。
(3)如果t>0,则签名者j通过安全广播信道把rij发送给其它的t个签名者;同时签名者j在j>1时接收到(ri1…ri(j-1),ri(j+1)…ri(t+1))t个值,或者在j=1时接收到(ri2…ri(t+1))t个值,之后使用Lagrange插值获得签名值之一ri=k*-f(mi,Ki)·(ki+x)(模q)。如果t=0,则跳过执行该步骤。
(4)把(ri,Ki)作为被签名内容mi的数字签名,从安全存储区删除已经使用过的一次性数据对(kij,Ki)。
其中Lagrange插值可以定义插值多项式为然后通过来计算ri的值。
6)验证者使用验证公钥来验证数字签名的过程包括 (1)使用数字签名的签名值之一ri,签名值之二Ki以及公开的系统参数f和公开的验证公钥Y计算hi=f(mi,Ki)·(Ki+Y)+riP。
(2)运行具体签名方案中的验证算法JV来验证公开的验证公钥中的σ是否是hv的签名值,如果是则认为消息mi的数字签名(ri,kiP)是正确的。
本发明具有以下优点 本发明采用的双陷门变色龙函数是特殊构造的,可以减少预先计算数据对时群上逆运算的操作,具有很好的扩展性;当签名者的数量大于1时,解决了目前门限签名方案中密钥泄露的问题,具有低的存储需求,减少了签名长度,节约了通信带宽、计算资源和存储资源,具有更高的效率。
本发明提供的数字签名方案实现方法,适用于智能卡、PDA、手机等计算和存储资源性能有限的设备和高性能的安全服务器,会获得短的服务响应时间和好的用户体验。



图1为通用的数字签名实现方法框图 图2为n=1时通用数字签名方案实现方法; 图3为n>1时通用数字签名方案实现方法。

具体实施例方式 以智能卡为例说明本发明n=1,安全存储区为100个数据对大小时数字签名方案的具体实施。
1.对于实现本发明中数字签名方案的智能卡,需要存储以下公开信息{E,p,q,P,G,f,H,(JG,JS,JV),(VK,Y,h,σ)}和以下秘密信息{(SK,x,k*),(ki,kiP),i∈{1…100}} 其中公开信息(JG,JS,JV)为任意可证安全的数字签名算法,这里选定为Boneh-Lynn-Shacham短签名算法,签名长度160比特,该签名算法的参数(E,p,q,k,P,G)建议如下 Ey2=x3+3 Q=p=1461501624496790265145448589920785493717258890819 q=1461501624496790265145447380994971188499300027613 MOV degree k=12 P=(x,y) x=60232771925335406215268478438736418092310 y=689153346037673625529930425534358412369109232196 G=<P>,为点P生成的群; 公开信息中H为所述的数字签名方案系统参数中双陷门变色龙函数H规定的实现方法; 公开信息中f为任意密码学安全的杂凑函数,这里选定为SHA-256算法; 公开信息中(E,p,q,P,G)分别定义如下 Ey2=x3+ax+b,其中 a=-3 b=67236789897895454534230235651860890517841345604560562138 p=2192-264-1,192bit =6277101735386680763835789423207666416083908700390324961279 q=6277101735386680763835789423308534963364820143210894481897 P=(x,y) x=3225743880086619282892109672206023277192533540621 526332917 y=5311403117772569158290023367750256572682401384201134690284 G=<P>,为点P生成的群 智能卡中需要存储以下秘密信息(SK,x,k*)。秘密信息(SK,x,k*)和公开信息(VK,Y,h,σ)按照如下方式生成 (1)首先使用具体签名方案中的密钥生成算法JG来生成签名者的签名私钥之一SK和签名者的验证公钥之一VK。
(2)然后随机选择x∈RZq*,并作为签名者的签名私钥之二;计算椭圆曲线上的数乘运算Y=xP,获得签名者的验证公钥之二Y。
(3)最后随机选择k*∈RZq*,并作为签名者的签名私钥之三;计算椭圆曲线上的标量乘运算h=k*P,运行具体签名方案中的签名算法JS,用SK作为签名私钥,把h作为被签名内容,获得具体签名方案的签名值σ=JSSK(h),并把被签名内容h作为签名者的公钥之三,把签名值σ作为签名者的公钥之四。
智能卡需要存储的秘密信息还包括离线计算的数据对。这些数据对的存储和计算方式为随机选择ki∈RZq,进行椭圆曲线上的数乘操作获得kiP,i∈{1…100},i为该安全存储区的当前空区的索引值,如果不存在空区,则提示用户停止计算一次性数据对的操作。完成计算后在i所索引的存储区存储数据对(ki,kiP)。离线数据对的生成时机可以在智能卡与有源设备相连接时完成。
2.在用户需要完成某个消息的签名时,用户需要把待签署的消息mi导入智能卡,然后智能卡按照如下的过程完成数字签名,并输出给用户 (1)提取未曾使用的数据对(ki,kiP)。
(2)对给定被签名内容mi,计算签名值ri=k*-f(mi,kiP)·(ki+x)(模q)。
(3)把(ri,kiP)作为被签名内容mi的数字签名输出给用户。
(4)删除使用过的数据对(ki,kiP)。
3.在验证某个数字签名的时候,用户可以把数字签名和消息输入智能卡,然后由智能卡按照所述的数字签名方案验证数字签名的方法完成验证,并把验证结果输出给用户;也可以由用户在其它计算设备上运行按照所述的数字签名方案验证数字签名的方法,输入数字签名和消息,完成验证。
以多个智能卡为例说明n>1时数字签名方案的具体实施。
1.考虑在一个单位中管理层成员有6个,需要签署文件时必须有4个管理层成员签署该文件才有效。此时6名管理层成员都拥有一张智能卡,每张智能卡的安全存储区均能够存储100个数据对。按照如下方式实施本发明的门限数字签名方案 每一名管理层成员的智能卡都需要存储以下公开信息{E,p,q,P,G,f,H,(TG,TS,TV),(VK,Y,h,σ),DKG}和以下秘密信息{(SKj,xj,kj*),(kij,kiP),i∈{1…100}} 公开信息中DKG为分布式密钥生成算法,这里选定Gennaro等1999年提供的DKG算法。
公开信息中(TG,TS,TV)为任意可证安全的门限数字签名算法,这里选定为Gennaro等人1996年所提出的门限DSS签名算法; 公开信息中H、f、(E,p,q,P,G)与n=1时数字签名方案的具体实施中的参数选择相同; 每一名管理层成员的智能卡都需要存储专属于该成员的秘密信息(SKj,xj,kj*)。秘密信息(SKj,xj,kj*)和公开信息(VK,Y,h,σ)的生成如下 (1)首先使用具体门限签名方案中的密钥生成算法TG来生成第j个签名者的签名私钥之一SKj和签名者的验证公钥之一VK。
(2)然后使用DKG协议生成签名者的验证公钥之二Y=xP,第j个签名者在参与DKG协议时获得签名私钥之二xj。
(3)最后使用DKG协议生成签名者的公钥之三h=k*P,第j个签名者在参与DKG协议时获得签名私钥之私钥之三kj*;运行具体门限签名方案中的签名算法TS,把h作为被签名内容,获得具体门限签名方案的签名值σ,并把σ作为签名者的公钥之四。
每一名管理层成员的需要用DKG协议生成kiP和kij,i∈{1…100},100为智能卡的安全存储区所能容纳的一次性数据对(kij,kiP)的数量上限,i为该安全存储区的当前空区的索引值,如果不存在空区,则提示用户停止计算一次性数据对的操作。完成计算后在i所索引的存储区存储数据对(kij,kiP)。离线数据对的生成时机可以在智能卡与有源设备相连接、并且6名管理层成员在场时完成。
2.在4名管理层成员需要完成某个消息mi的签名时,这些管理层成员需要把待签署的消息mi导入智能卡,然后智能卡按照如下的过程完成数字签名,并输出给持有该智能卡的管理层成员 (1)提取未曾使用的数据对(kij,kiP)。
(2)对给定被签名内容mi,计算rij=kj*-f(mi,kiP)·(kij+x)(模q)。
(3)第一名管理成员通过安全广播信道把ri1发送给其它的3个管理层成员。第一名管理成员接收到另外3个(ri2,ri3,ri4)之后,使用标准Lagrange插值获得ri=k*-f(mi,kiP)·(ki+x)(模q)。其它几名管理层成员执行类似操作。
(4)把(ri,kiP)作为被签名内容mi的数字签名输出给持有该智能卡的管理层成员。
(5)每一名管理成员的智能卡删除使用过的数据对(kij,kiP)。
其中,4名管理成员所提取得数据对应该属于一次DKG过程生成的,为了获得这种同步,可以为每一个数据对增加一个索引,表明该数据对所属的批次。
3.在验证某个数字签名的时候,用户可以把数字签名和消息输入智能卡,然后由智能卡按照所述的门限数字签名方案验证数字签名的方法完成验证,并把验证结果输出给用户;也可以由用户在其它计算设备上运行按照所述的数字签名方案验证数字签名的方法,输入数字签名和消息,完成验证。
权利要求
1.一种生成和验证数字内容的通用数字签名方案实现方法,包括
用于计算公开的系统参数的步骤;
用于计算所有签名者拥有的签名私钥和公开的验证公钥的步骤;
用于所有签名者预先计算部分数据的步骤;
用于所有签名者存储预先计算的部分数据的步骤;
用于部分签名者实时计算给出的数字内容对应数字签名的步骤;
用于验证者使用验证公钥来验证数字签名的正确性的步骤;
其特征在于
其中所述公开的系统参数包括素数p,有限域Fp,有限域上的椭圆曲线E(Fp),素数q,椭圆曲线的一个阶为q的点P,由点P生成的子群G,密码学安全的杂凑函数fZp×G→Zq,双陷门变色龙函数H,具体签名方案(JG,JS,JV),密钥生成协议KG。其中双陷门变色龙函数H的构造方法为子群G中两个元素A、B进行点加运算,其中A或者B由子群G中另外两个群元素C、D的点加结果与Zq中元素E进行标量乘运算获得。
2.根据权利要求1所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述双陷门变色龙函数的一种实现方法为输入(m∈Zq,K∈G,Y∈G,r∈Zq),输出f(m,K)·(K+Y)+rP。
3.根据权利要求2所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述所有签名者的数量为n,n为自然数,其中签名者j(j∈{1…n})的签名私钥(SKj,xj,kj*)和所述公开的验证公钥(VK,Y,h,σ)按照如下的步骤生成
(1)签名者j使用具体签名方案中的密钥生成算法JG来生成签名者j的签名私钥之一SKj和签名者的验证公钥之一VK。
(2)签名者j使用KG协议生成(xj,Y),签名者j的签名私钥之二是xj,验证公钥之二是Y。
(3)签名者j使用KG协议生成(kj*,h),签名者j的签名私钥之三是kj*,验证公钥之三是h。签名者j运行具体签名方案中的签名算法JS,把h作为被签名内容,获得具体签名方案的签名值σ,把签名值σ作为公钥之四。
4.根据权利要求3所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述密钥生成协议KG在n=1时由签名者j均匀选择随机数rKG并进行数乘操作获得rKGP,进而获得(rKG,rKGP)数据对;在n>1时由所有签名者共同执行安全的分布式密钥生成协议DKG,签名者j获得(rKGj,rKGP)数据对;所述具体签名方案(JG,JS,JV)在n=1时为签名者j单独执行的、任意的、在选择消息攻击下安全的签名方案,在n>1时为多个签名者共同执行的、任意的、在选择消息攻击下安全的门限签名方案。
5.根据权利要求4所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述所有签名者中的签名者j预先计算一次性数据对(kij,Ki),i∈{1…L},L为签名者j的安全存储区所能容纳的一次性数据对(kij,Ki)的数量上限,i为该安全存储区的当前空区的索引值,如果不存在空区,则提示签名者j停止计算一次性数据对的操作。一次性数据对(kij,Ki)计算如下
签名者j使用KG协议生成(kij,Ki)。
6.根据权利要求5所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述签名者j在i所索引的存储区存储预先计算的一次性数据对(kij,Ki)。
7.根据权利要求6所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述部分签名者的数量为t+1,t取值0或者自然数,并且t≤n/2,其中签名者j(j∈{1…t+1})实时计算数字签名的过程如下
(1)签名者j从其安全存储区中提取未曾使用的一次性数据对(kij,Ki)。
(2)给定被签名内容mi,计算rij=kj*-f(mi,Ki)·(kij+xj)(模q),如果t=0,则rij为签名值之一。
(3)如果t>0,则签名者j通过安全广播信道把rij发送给其它的t个签名者;同时签名者j在j>1时接收到(ri1…ri(j-1),ri(j+1)…ri(t+1))t个值,或者在j=1时接收到(ri2…ri(t+1))t个值,之后使用Lagrange插值获得签名值之一ri=k*-f(mi,Ki)·(ki+x)(模q)。如果t=0,则跳过执行该步骤。
(4)把(ri,Ki)作为被签名内容mi的数字签名,从安全存储区删除已经使用过的一次性数据对(kij,Ki)。
8.根据权利要求7所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述验证者使用验证公钥来验证数字签名的过程包括
使用数字签名的签名值之一ri,签名值之二Ki以及公开的系统参数f和公开的验证公钥Y计算hi=f(mi,Ki)·(Ki+Y)+riP。
9.根据权利要求8所述的一种生成和验证数字内容的通用数字签名方案实现方法,其特征在于所述验证者使用验证公钥来验证数字签名的过程包括
运行具体签名方案中的验证算法JV来验证公开的验证公钥中的σ是否是hv的签名值,如果是则认为消息mi的数字签名(ri,kiP)是正确的。
全文摘要
本发明涉及一种生成和验证数字内容的通用数字签名方案的实现方法,其实现步骤包括设置系统参数,生成用户签名私钥和公开的验证公钥,以离线/在线方式生成数字签名,验证数字签名。本发明通过采用特殊的方法构造了一种新的双陷门变色龙函数,解决了背景技术中预先计算部分数据时需要使用群上逆运算的限制,减小了计算量,去掉了签名者数量的限制,解决了门限数字签名方案背景技术中密钥泄露的问题,减小了数字签名和验证的计算量,缩短了签名长度,减小了存储需求,具有更高的效率和更好的扩展性。
文档编号H04L9/32GK101252431SQ20071003010
公开日2008年8月27日 申请日期2007年9月6日 优先权日2007年9月6日
发明者陈晓峰, 田海博, 张方国, 韦宝典, 陈满祥 申请人:广州信睿网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1