一种在线/离线高效的数字签名方法
技术领域
本发明涉及密码技术,尤其涉及数字签名方法。
背景技术
预备知识和符号标示
记G为一个有限群G′中的一个循环子群,其中记G′的阶为N,G的阶为q,g是G的生成元,记1G为G′的单位元,记G/1G为G中除了1G之外的所有元素构成的集合。一般而言,q为一个大的素数(典型地,|q|=160,其中|q|表示的是以2进制表示的q的长度)。记Zq为数字集合{0,1…,q-1},记Zq *为数字集合{1…,q-1}。在下面的背景技术描述中,采用乘法表示(multiplicative representation)群上的操作,即G′和G为乘法群。这只是为了表述上的方便,所有有关背景技术的叙述均可等价地应用到加法群上,比如,椭圆曲线,或者其他的代数群或具体的群,有限域,复数或复合模(composite moduli)等。一般而言,对于乘法群上的操作,指数上的操作是对q求模,而群上元素的操作是对N或N+1求模或其它操作以保证操作的结果是G′或G中的元素;比如gx通常指的是gxmodq,gxgy通常表示的是gxgy∈G′,x+y∈Zq和xy∈Zq表示的是x+ymodq和xymodq。为了表述的方便起见,假定参数G,q,g是固定的并被所有的用户事先获知(这是一种实用中的普遍情况);或者,将这些参数包含在证书中或者在协议运行之前交换和协商这些参数并达成一致。假定离散对数假设在G上成立,即给定X=gx∈G(其中x从Zq中随机选取),没有概率多项式时间的算法能够以不可忽略的概率由X求出x。在下面的叙述中使用“^”符号(比如,)来标示一个用户或设备的逻辑或“区别性”的身份(identity),比如一个名字,一个设备序列号,一个email或IP地址,甚至是方法运行中的一个角色等。在某些情况下,这些身份可能伴随或包含或包含于一个数字证书。记{…}为一个信息或数值的集合。
哈希函数用来将一个字符串转换成一个数值或者一个固定长度的串等。典型地,哈希函数的输入,即任意一个字符串(或若干个字符串的联结),首先被编码为一个{0,1}*中的0-1串,然后将哈希函数作用在该转化后的0-1串输入上从而得到一个固定长度的0-1串输出。这儿{0,1}*表示的是所有0-1串的集合。哈希函数在密码学中的一个基本功能是提供一个“单向”和“抗碰撞”的转换,这儿“单向”指的是给定一个函数的输出求出其输入或前像是困难的,“抗碰撞(collision-resistant)”指的是给定一个输入难以找到另外一个不同的输入使得哈希函数在这两个不同输入上的输出相同。哈希函数范围可以非常广泛:从一个简单的混合(mixing)函数到一个具有伪随机输出性质的函数。具有伪随机输出性质的哈希函数在密码学分析中常被理想化为一个“随机圣谕(random oracle)”。有几个哈希函数在密码学中被广泛使用:比如MD5将任意长度的数据转换为一个128-位的0-1串,而另一个常用的哈希函数SHA的输出是160位的0-1串。
记f,h:{0,1}*→Zq为两个转换函数。典型地,f,h的输入,即任意一个字符串(或若干个字符串的联结),首先被编码为一个{0,1}*中的0-1串,然后将f,h作用在该转化后的0-1串输入上从而得到一个Zq中的数值(典型地,Zq中的数值亦用2进制表示)。特别地,f,h可以是哈希函数。在应用中,转换函数的所有输入首先转换为0-1串,然后将转换后的0-1串连接成一个0-1串(联结的顺序可以变化),最后在将转换函数作用到该联结后的0-1串从而得到输出。在大多数情况下,转换函数的输入的顺序不重要(顺序可以被变化)。比如,以转换函数f为例,设x为一个字符串,记x(2)为x的2进制0-1串编码表示;设S={s1,…,st},t≥0,为t个字符串的集合,记s1 (2),s2 (2),s3 (2),…,st (2)为s1,s2,s3,…,st的2进制0-1串编码表示,则 其中“||”表示的是字符串联结操作符。注意x(2),s1 (2),s2 (2),s3 (2),…,st (2)联结的顺序可以变化,但联结的顺序需固定且所有的用户知晓且使用相同的顺序进行联结操作。对于f(x(2)||s1 (2)||s2 (2)||…||st (2)),若其中si,1≤i≤t,是空串,则 上述关于转换函数f的描述同样适用转换函数h。
假定签名者,记为
有一个签名公钥U,签名公钥U与签名者身份A的绑定由一个可信的第三方机构来执行。通常,可信的第三方机构会检查
的身份的有效性以及U的有效性,然后对
做一个数字签名,并将
以及可信第三方的签名形成一个针对
公钥证书,记为
数字签名方法是密码技术的主要应用之一。基于离散对数的数字签名方案主要有Schnorr签名方案和国际数字签名标准(Digital SignatureStandard(DSS))方案。
Schnorr签名方案运作如下:
签名公钥:U=g-w∈G,其中 其中,G是有限群G′中的一个循环子群,g是G的生成元;记Zq为数字集合{0,1…,q-1},Zq *为数字集合{1…,q-1},q为一个大的素数(典型地,|q|=160,其中|q|表示的是以2进制表示的q的长度)。
签名私钥:w。
签名的生成:记m∈{0,1}*为需要签名的信息,{0,1}*表示的是所有0-1串的集合。令h:{0,1}*→Zq为一个抗碰撞的哈希函数。
从Zq中随机选取r,计算a=gr∈G;
计算d=h(a,m);计算z=r+dw∈Zq;将(d,z)作为对m的签名。
签名的验证:得到{m,(d,z)}以及签名公钥U后,签名验证者验证是否h(gzUd,m)=d。若h(gzUd,m)=d则接受签名,否则拒绝。
数字签名标准(DSS)方案运作如下:
签名公钥:U=gw∈G,其中
签名私钥:w。
签名的生成:记m∈{0,1}*为需要签名的信息。令h:{0,1}*→Zq为一个抗碰撞的哈希函数。令f:G′→Zq是一个转换函数。一般而言,若 (p是个素数),f直接可以是“mod q”操作;若G′是定义在有限域上的一个椭圆曲线群(即:a∈G表示椭圆曲线上的一个点(x,y)),f(a)=x。签名者做如下计算:
从Zq中随机选取r,计算a=gr∈G,
计算d=f(a);e=h(m);
计算 将(d,z)作为对m的签名。
签名的验证:得到{m,(d,z)}以及签名公钥U后,签名验证者如下验证签名的有效性:
计算
验证 若 则接受签名,否则拒绝。
Schnorr签名方案和数字签名标准(DSS)方案比较:
可证明安全性:Schnorr签名方案在假设哈希函数h是随机圣谕(random oracle)的假设和离散对数假设下被证明是安全的。但是,对于数字签名标准(DSS)方案,迄今为止,其可证明安全性仍未知(即便转换函数f,h均假设为随机圣谕)。
在线/离线效率:在很多应用中为了提高签名方案的效率,通常将签名的生成分为两个阶段来完成:离线阶段和在线阶段。在线/离线签名的用途广泛。在很多的实际应用中,签名者(比如智能卡)在信息提交后,只有很有限的反应时间(但是在两个连续的签名请求之间,它可以完成很复杂的计算)。在线阶段的特点就是非常快,因此即使是一个很弱的处理器也可以完成执行。在线/离线签名在基于智能卡的应用中特别关键:离线阶段既可以在卡片的制造过程中实施,也可以在卡片通电以后作为背景计算实施。
对于Schnorr签名方案,签名者可以预先离线计算并存储(r,a=gr);接下来,在为信息m签名的时候,它仅仅需要在线计算e=h(a,m)和z=r+ew。
对于数字签名标准(DSS)方案,签名者亦可以预先计算出很多的a的值。但是,与Schnorr签名方案不同的是,DSS的签名者不用将这些预计算的a值存储下来。具体来说,每一次离线预先算好a=g
r后,DSS的签名者可以离线地计算d=f(a),
并且只需要存储
在需要对信息m进行签名时候,签名者只需在线计算e=h(m),
(其中,
是事先离线计算并存储的)。在实际的应用中,对于基于智能卡的应用,智能卡制造商可以在卡片制造过程中存储许多
的值。注意:a=g
r∈G′而
一般而言a的长度可能设为1024位,而q得长度是160位。因此,Schnorr签名方案对于每一次签名需要离线存储1024+160=1184位的信息,而DSS签名方案对于每一次签名只需存储160×3=480位的信息。这对于基于智能卡的数字签名实现是非常重要的。虽然DSS签名方案没有一个严格的安全性证明,但是它更优的在线/离线效率使得它在实际应用中被更广泛地使用。
发明内容
本发明给出一个新的数字签名方法,与Schnorr签名方案和数字签名标准(DSS)方案相比,我们提出的新的数字签名方法既具有严格的可证明安全同时具有比DSS方案更优的在线/离线效率。所发明的新的数字签名方法可在各种需要数字签名的应用中应用,特别地,所发明的新的数字签名方法特别有利于在基于智能卡的数字签名及相关电子商务、政务中应用。本发明的数字签名方法的目标是在保证安全性的基础上获得更好的在线/离线计算效率。
本发明提供一种在线/离线数字签名方法,其中,
表示签名者,
的公钥为U=g
-w∈G,
的私钥为w∈Z
q={0,1,2,…,q-1},其中g是一个阶为N的有限群G′中的一个阶为素数q的循环子群G的生成元,
的公钥证书为
m为待签名的信息,
表示签名验证者,所述方法包括:由所述签名者得到e=h(m,aux
m),其中h:{0,1}
*→Z
q是一个从{0,1}
*到Z
q的抗碰撞的转换函数且m是h的输入之一,aux
m是一个包含
的集合的能够为空的子集合,其中,{0,1}
*表示的是任意0-1串的集合;由所述签名者得到r∈Z
q、得到a=g
r和/或d=f(a,aux
d),其中f是一个从{0,1}
*到Z
q的转换函数且a是f的输入之一,aux
d是一个包含
的集合的能够为空的子集合;由所述签名者或设备计算z,其中z的计算基于er+dw或dr+ew;由所述签名者或设备将s={d,z,aux
1}或s={a,z,aux
2}或s={a,d,z,aux
3}作为对信息m的数字签名,其中,aux
i,1≤i≤3,是一个包含
的集合的能够为空的子集合,ê=e
-1∈Z
q,
其中aux
d,aux
m,aux
1,aux
2,aux
3以及函数h,f或者是固定的并被所有的用户事先获知,或者被包含在证书中,或者在协议运行之前被交换和协商;签名验证者得到所述签名者的公钥U、公钥证书
{m,s}之后,首先验证所述公钥证书
的有效性,若验证通过,则验证者得到e=h(m,aux
m)并按照如下情况之一验证签名的有效性:若z的计算基于er+dw且d∈s,则验证者得到ê=e
-1∈Z
q,计算并验证f(g
zêU
dê,aux
d)=d或者d=f(a,aux
d)∧g
zêU
dê=a,若验证成功,则接受签名,否则拒绝;若z的计算基于er+dw且a∈s但
则验证者得到ê=e
-1∈Z
q和d=f(a,aux
d),并验证g
zêU
dê=a或f(g
zêU
dê,aux
d)=d,若验证成功,则接受签名,否则拒绝;若z的计算基于dr+ew且d∈s,则验证者得到
并验证
或者
若验证成功,则接受签名,否则拒绝;若z的计算基于dr+ew且a∈s但
则验证者得到d=f(a,aux
d)和
并验证
或
若验证成功,则接受签名,否则拒绝。
如上所述的方法,其中,若签名验证者
在得到签名之前事先知道m,或签名者
在产生签名之前事先知道m,则签名验证者和/或签名者能事先计算并存储e=h(m,aux
m)和/或ê=e
-1∈Z
q;若z的计算基于er+dw,事先计算并在
中存储{Ω
1,Ω
2,…,Ω
n},n≥1,其中对于任意的i,1≤i≤n,
r
i∈Z
q,
若z的计算基于dr+ew,事先计算并在
中存储{∑
1,∑
2,…,∑
n},n≥1,其中对任意的i,1≤i≤n,
r
i∈Z
q,
签名者在线数字签名时候,在这些事先离线存储的值中找出之前签名尚未使用的Ω
i或∑
i,并将Ω
i或∑
i中的值直接用于在线的签名生成;若z的计算基于dr+ew且
预先知道待签名的信息m,
还能预先计算e=h(m,aux
m)以及ew或ew(modq)。
如上所述的方法,其中,对任意的i,1≤i≤n,令Ωi={ri,di,diw},∑i={di,diri},其中ri是一个从Zq或{0,1}l中随机选取的值,diw∈Zq,diri∈Zq,l≤|q|是一个正整数,|q|表示以2进制表示的q的长度,{0,1}l表示的是所有长度为l的0-1串的集合。
如上所述的方法,其中,
通过在{0,1}
l或Z
q中随机选取r得到r∈Z
q或者利用一个从{0,1}
*到{0,1}
l或Z
q的伪随机函数产生,其中l≤|q|是一个正整数,{0,1}
l表示的是所有长度为l的0-1串的集合;令h为一个从{0,1}
*到{0,1}
l或Z
q的抗碰撞的哈希函数;令f为一个从{0,1}
*到Z
q或{0,1}
l抗碰撞的哈希函数,或者f(a,aux
d)=amodq或(amodN)modq或(amod(N+1))modq,或者若a=(x,y)∈G表示的是椭圆曲线上的一个点,其中x∈Z
q,y∈Z
q为坐标值,定义f(a,aux
d)=x或f(a,aux
d)=y;令aux
d为空集或aux
d={U}或
并且/或者令aux
m为空集或aux
m={U}或
如上所述的方法,其中,基于er+dw的z的计算方式有:z=er+dw、z=er+dw∈Zq、z=(er+dw)modq、z=(ermodq)+(dwmodq)、z=((ermodq)+(dwmodq))modq、z=er+dw+αq其中α是一个整数;基于dr+ew的z的计算方式有:z=dr+ew、z=dr+ew∈Zq、z=(dr+ew)modq、z=(drmodq)+(ewmodq)、z=((drmodq)+(ewmodq))modq、z=dr+ew+βq其中β是一个整数。
如上所述的方法中,其中,验证者在验证签名时检查d∈Zq或d∈{0,1}l,若检查失败则拒绝接受签名;和/或,若签名者计算得到z∈Zq,验证者在验证签名时验证z∈Zq,若 则拒绝接受签名;若签名者计算得到的z不能保证属于Zq,验证者计算f(gzêUdê,auxd)的其它方式有f(g(zmodq)êUdê,auxd),计算 其它方式有
如上所述的方法,其中,若z=er+dw,
如下得到ê=e
-1:若ê∈s
验证
且eê=1,若验证通过则直接得到ê;若
计算e
-1得到ê;若z=dr+ew,
如下得到
若
验证
且
若验证通过则直接得到
若
计算d
-1得到
如上所述的方法,其中,令a=gr∈G;若a∈s,验证者检查a∈G,若 验证者拒绝接受签名。
如上所述的方法,其中,令w=-w′,其中w′∈Zq,即:U=gw′∈G。
本发明的方法与Schnorr签名方案及DSS签名方案的比较:与Schnorr签名方案相比,本发明的签名方法需要更少的离线存储空间。与DSS签名方案相比,本发明的签名方法具有如下优点:
同样或者更好的空间复杂度。假设预计算了k个a=gr的值,如果是z=er+dw(modq),发明方法的离线空间复杂度为3k|q|,这和DSS相同;但是如果z=dr+ew(modq),发明方法的在线空间复杂度只有2k|q|,这就大大减少了离线空间复杂度。
签名生成的总体效率更高。在计算DSS的签名 的时候,总共需要进行1次模求逆运算 和2次模乘运算相比之下,发明方法在计算z=er+dw∈Zq或z=dr+ew∈Zq的时候,签名者总共只需要进行2次模乘运算(不需要进行模求逆运算)。注意:模求逆运算是相当费时的操作,因此最好可以把它省略掉(尤其是对于基于智能卡的应用)。
更有效的离线预计算。除了其他相同的预计算以外,DSS的签名者需要计算1次模求逆运算 和两次模乘运算来计算 而发明方法的签名者只需要离线1次模乘运算得到dw∈Zq或dr∈Zq。
更有效的在线签名验证(在z=er+dw(modq)情况下)。验证DSS的签名(d,z)的时候,验证者要在线计算
因为z的值只有在收到签名后验证者才知道,因此验证者无法事先计算
因为模求逆运算是代价相对昂贵的,最好可以省略掉。相比之下,在z=er+dw(modq)情况下,在发明方法的签名验证时,验证者只需要计算ê=e
-1,其中e=h(m)。如果像实际应用中经常出现的那样,验证者在接收到签名之前就知道待签名的信息m(甚至m就是由验证者准备的),那么e,ê可以离线预计算。对于z=dr+ew∈Z
q的情形,发明方法的签名验证的计算复杂度与DSS相同。
在随机圣谕模式下的可证明其安全性。发明人证明,假设h,f都是随机圣谕(比如h,f均为哈希函数,并将哈希函数理想化为随机圣谕),在随机圣谕模式和DLP假设下,发明的数字签名方法在自适应选择消息攻击下是签名不可伪造的。注意,DSS目前还没有安全性证明。
附图说明
图1和图2是示例性地示出了本发明的数字签名方法。
具体实施方式
预备知识和符号标示:
本发明所描述的方法和操作基于一个有限群G′中的一个循环子群G,其中记G′的阶为N,G的阶为q,g是G的生成元,记1
G为G′的单位元,记G/1
G为G中除了1
G之外的所有元素构成的集合。一般而言,q为一个大的素数(典型地,|q|=160,其中|q|表示的是以2进制表示的q的长度)。记Z
q为数字集合{0,1…,q-1},记Z
q *为数字集合{1…,q-1}。发明人在下面发明方法的描述中,采用乘法表示(multiplicative representation)群上的操作。即,G′和G为乘法群。这只是为了表述上的方便,所有发明方法的叙述均可等价地应用到加法群上,比如,椭圆曲线,或者其他的代数群或具体的群,有限域,复数或复合模(composite moduli)等。一般而言,当用乘法群上的操作描述发明方法时,指数上的操作是对q求模,而群上元素的操作是对N或N+1求模或其它操作以保证操作的结果是G′或G中的元素;比如g
x通常指的是g
xmodq,g
xg
y通常表示的是g
xg
y∈G′,x+y∈Z
q和xy∈Z
q表示的是x+ymodq和xymodq。为了表述的方便起见,假定参数G,q,g是固定的并被所有的用户事先获知(这是一种实用中的普遍情况);或者,我们将这些参数包含在证书中或者在协议运行之前交换和协商这些参数并达成一致。我们假定离散对数假设在G上成立,即给定X=g
x∈G(其中x从Z
q中随机选取),没有概率多项式时间的算法能够以不可忽略的概率由X求出x。发明人使用“^”符号(比如,
)来标示一个用户或设备的逻辑或“区别性”的身份(identity),比如一个名字,一个设备序列号,一个emial或IP地址,甚至是方法运行中的一个角色等。在某些情况下,这些身份可能伴随或包含或包含于一个数字证书。记{…}为一个信息或数值的集合。
哈希函数用来将一个字符串转换成一个数值或者一个固定长度的串等。典型地,哈希函数的输入,即任意一个字符串(或若干个字符串的联结),首先被编码为一个{0,1}*中的0-1串,然后将哈希函数作用在该转化后的0-1串输入上从而得到一个固定长度的0-1串输出。这儿{0,1}*表示的是所有0-1串的集合。哈希函数在密码学中的一个基本功能是提供一个“单向”和“抗碰撞”的转换,这儿“单向”指的是给定一个函数的输出求出其输入或前像是困难的,“抗碰撞(collision-resistant)”指的是给定一个输入难以找到另外一个不同的输入使得哈希函数在这两个不同输入上的输出相同。哈希函数范围可以非常广泛:从一个简单的混合(mixing)函数到一个具有伪随机输出性质的函数。具有伪随机输出性质的哈希函数在密码学分析中常被理想化为一个“随机圣谕(random oracle)”。有几个哈希函数在密码学中被广泛使用:比如MD5将任意长度的数据转换为一个128-位的0-1串,而另一个常用的哈希函数SHA的输出是160位的0-1串。
本发明使用两个转换函数f,h:{0,1}*→Zq。典型地,f,h的输入,即任意一个字符串(或若干个字符串的联结),首先被编码为一个{0,1}*中的0-1串,然后将f,h作用在该转化后的0-1串输入上从而得到一个Zq中的数值(典型地,Zq中的数值亦用2进制表示)。特别地,f,h可以是哈希函数。其它常用的转换函数为:f(X,aux)=X modq或者(X mod N+1)modq,其中X∈G,N为G′的阶(比如,若对于一个大素数 则N+1=p),aux是任意字符串或字符串的集合;若X=(x,y)∈G是椭圆曲线上的一个点,其中x,y∈Zq,则可令f(X,aux)=x或y;其它可以使用的专函函数还有: 或 其中H:{0,1}*→Zq是一个哈希函数。为了描述的方便起见,发明人使用同一个函数符号来表示具有不同输入个数的转换函数。在应用中,转换函数的所有输入首先转换为0-1串,然后将转换后的0-1串连接成一个0-1串(联结的顺序可以变化),最后在将转换函数作用到该联结后的0-1串从而得到输出。在某些应用中,转换函数的输出只有部分被使用。在大多数情况下,转换函数的输入的顺序不重要(顺序可以被变化)。比如,以转换函数f为例,设x为一个字符串,记x(2)为x的2进制0-1串编码表示;设S={s1,…,st},t≥0,为t个字符串的集合,记s1 (2),s2 (2),s3 (2),…,st (2)为s1,s2,s3,…,st的2进制0-1串编码表示,则 其中“||”表示的是字符串联结操作符。注意x(2),s1(2),s2 (2),s3 (2),…,st (2)联结的顺序可以变化,但联结的顺序需固定且所有的用户知晓且使用相同的顺序进行联结操作。对于f(x(2)||s1 (2)||s2 (2)||…||st (2)),若其中si,1≤i≤t,是空串,则 上述关于转换函数f的描述同样适用转换函数h。
参考图1和图2,示例性地示出了本发明的数字签名方法。
我们假定签名者,记为
有一个签名公钥U,签名公钥U与签名者身份A的绑定由一个可信的第三方机构来执行。通常,可信的第三方机构会检查
的身份的有效性以及U的有效性(即:U∈G),然后对
做一个数字签名,并将
以及可信第三方的签名形成一个针对
公钥证书,记为
记签名者或设备的身份为
发明的数字签名方法运作如下:
签名公钥:U=g
-w∈G,其中
(g,q,h,f)。记
的公钥证书为
签名私钥:w。
签名的生成与验证:记m∈{0,1}*为需要签名的信息。令h:{0,1}*→Zq为一个抗碰撞的哈希函数(在应用中可令h:{0,1}*→{0,1}l,其中l≤|q|是个正整数,比如l=|q|-1,{0,1}l表示的是所有长度为l的0-1串的集合)。令f:G′→Zq是一个转换函数。一般而言,若 (p是个素数),f直接可以是“modq”操作;若G′是定义在有限域上的一个椭圆曲线群(即:a∈G表示椭圆曲线上的一个点(x,y)),f(a)=x。签名者做如下计算:
计算e=h(m),从Zq中随机选取r(在应用中,可在{0,1}l中随机选取r),计算a=gr∈G,d=f(a)(在应用中,可直接计算d=f(gr));注意,对于这种具体实施方式,auxm和auxd被设为空集。
以如下方式之一计算z并验证签名(具体选用哪种方式可由用户协商或签名者指定,但是一旦确定就应固定,并且所有的签名验证者知晓z的计算方式):
计算z=(er+dw)modq,并将s={d,z}作为对m的签名。收到{m,s}以及签名公钥U以及公钥证书后,签名验证者通过验证可信第三方的签名来验证公钥证书的有效性(一旦一个签名者的公钥证书被确认为有效,签名验证者可以存储该有效的数字签名,这样对该签名者之后的签名验证过程可省略对可信第三方签名的验证)以及z∈Zq(对于这种签名方式,d∈Zq的验证可进行或不进行)。若检查失败,则终止执行;若检查成功,验证者进一步计算e=h(m),ê=e-1,计算并验证f(gzêUdê)=d。若f(gzêUdê)=d则接受签名,否则拒绝。
或者,计算z=(dr+ew)modq,并将s={d,z}作为对m的签名。收到{m,s}以及签名公钥U以及公钥证书后,验证者验证公钥证书的有效性以及z∈Zq及d∈Zq。若检查失败,则终止执行;若检查成功,验证者进一步计算e=h(m), 计算并验证 若 则接受签名,否则拒绝。
发明人强调,在签名的的产生和验证过程中,某些操作或计算(比如签名产生过程中e,d的计算顺序等,签名验证过程中的公钥证书有效性的验证,z∈Zq,d∈Zq,a∈G′, 等的验证)的顺序可以变化和组合,其顺序对签名的生成和验证的正确性不关键。但是,合适的验证操作顺序可以尽早发现签名的错误,从而节省验证时间。另外若f的值域不包含在Zq中,则验证者不需检查d∈Zq;若z的值域不包含在Zq中,则验证者亦不需检查z∈Zq,但为了提高计算效率,验证者可以计算z:=zmodq。
为了在签名中证明签名者知道其签名私钥w,在上述所发明的数字签名方案中,可令d=f(a,U)(即,令aux
d={U})或
(即,令
),和/或令e=h(m,U)(即,令aux
m={U})或
(即,令
)。
为了提高发明的数字签名方法的在线/离线效率,签名者和验证者可做如下在线/离线操作:
验证者离线预计算:若签名验证者在接收到签名之前就知道要签名的信息m,可以预先计算并存储e=h(m);若z=er+dw∈Zq,验证者可进一步预先计算并存储ê=e-1∈Zq。
签名者离线预计算:若z=(er+dw)modq,
可事先计算并存储{Ω
1,Ω
2,…,Ω
n},n≥1,其中对于任意的i,1≤i≤n,Ω
i={r
i,d
i,d
iw},r
i是一个从Z
q或{0,1}
l中随机选取的值,
d
iw∈Z
q;若z=(dr+ew)modq,
可事先计算并存储{∑
1,∑
2,…,∑
n},n≥1,其中对任意的i,1≤i≤n,∑
i={d
i,d
ir
i},r
i是一个从Z
q或{0,1}
l中随机选取的值,
d
ir
i∈Z
q。
在线签名生成:在接收到要求签名的信息m后,签名者
计算e=h(m)。若z=(er+dw)modq,
拿到一个预先存储的尚未在之前的签名中使用的Ω
i={r
i,d
i,d
iw},计算z=(er
i+d
iw)modq,并将(d
i,z)作为对m的签名。注意,因为d
iw已经事先计算好,
不需计算d
iw。为了找到预先存储的尚未在之前的签名中使用的Ω
i={r
i,d
i,d
iw},一般而言,
可以运行一个计数器i,i的初始值设为1,
每签一次名令i:=i+1;或者,对于每一个Ω
i={r
i,d
i,d
iw},1≤i≤n,一旦Ω
i在签名中被使用,将Ω
i删除(这样,留下来的都是尚未在签名中使用的Ω
i)。同样的方法可用在下述当z=(dr+ew)modq时寻找存储的尚未使用的∑
i={d
i,d
ir
i}。
若z=(dr+ew)modq,
拿到一个预先存储的尚未在之前的签名中使用的∑
i={d
i,d
ir
i},计算z=d
ir
i+ew(modq),并将(d
i,z)作为对m的签名。注意,对于这种方式,若
预先知道待签名的信息m,
还可预先计算e=h(m)和ew,以进一步提高在线效率。
本发明给出一个新的数字签名方法,与Schnorr签名方案和数字签名标准(DSS)方案相比,我们提出的新的数字签名方法既具有严格的可证明安全同时具有比DSS方案更优的在线/离线效率。所发明的新的数字签名方法可在各种需要数字签名的应用中应用,特别地,所发明的新的数字签名方法特别有利于在基于智能卡的数字签名及相关电子商务、政务中应用。本发明的数字签名方法的目标是在保证安全性的基础上获得更好的在线/离线计算效率。