1、12024-3-192024-3-191112024-3-192024-3-19117.1 数字签名概述数字签名概述 由于计算机和网络的快速发展,电子商务日渐兴起,通过在文档上签字盖章的方式进行商务活动,达成显得效率很低。例如,一个在中国的公司和一个在美国的公司进行合作,双方协议后,要签订一个合同,则需要一方签名盖章后,邮寄或派人到另一方去签名盖章。于是人们就想,能不能对已经协商好的电子文档进行和手写签名一样的电于是人们就想,能不能对已经协商好的电子文档进行和手写签名一样的电子签名呢?并且这个电子签名和要求手写签名具有相同的法律效力,同时也是子签名呢?并且这个电子签名和要求手写签名具有相同的法
2、律效力,同时也是安全的,也即不能被伪造。这样,一方签名后,可以通过电子邮件发送给另一安全的,也即不能被伪造。这样,一方签名后,可以通过电子邮件发送给另一方,效率高而且花费小。方,效率高而且花费小。22024-3-192024-3-192222024-3-192024-3-1922 数字签名的概念由数字签名的概念由Diffie和和Hellman于于1976年提出,年提出,目的是通过签名者对电子目的是通过签名者对电子文件进行电子签名,使签名者无法否认自己的签名,文件进行电子签名,使签名者无法否认自己的签名,同时别人也不能伪造,实现同时别人也不能伪造,实现与手写签名相同的功能,具有与手写签名相同的法
3、律效力。与手写签名相同的功能,具有与手写签名相同的法律效力。由于数字签名技术在现在和未来社会里对政府、企事业、一般团体和个人的由于数字签名技术在现在和未来社会里对政府、企事业、一般团体和个人的重要影响,世界各国都加强了对它的研究。重要影响,世界各国都加强了对它的研究。1994年美国政府正式颁发了美国数字签名标准DSS(Digital Signature Standard),美国于2000年6月30日正式签署的电子签名法案,明确承认了电子签名、电子合同和电子记录的法律效力,被认为是网络时代的重大立法。2000年-2001年,爱尔兰、德国、日本、波兰等国政府也先后通过各自的电子签名法案。32024
4、-3-192024-3-193332024-3-192024-3-19331995年我国也制定了自己的数字签名标准(GB15851-1995),2004年8月28日我国颁发中华人民共和国电子签名法,2005年4月1日生效。数字签名与手工签名的区别数字签名与手工签名的区别数字签名数字签名数字的,因消息而异数字的,因消息而异手工签名手工签名模拟的,因人而异模拟的,因人而异数字签名与消息认证的区别数字签名与消息认证的区别数字签名数字签名第三者可以确认收发双方的消息传送第三者可以确认收发双方的消息传送消息认证消息认证只有收发双方才能确认消息的传送只有收发双方才能确认消息的传送认证认证数据完整性数据完整
5、性不可抵赖性不可抵赖性大型网络的公钥证书中大型网络的公钥证书中数字签名的应用数字签名的应用42024-3-192024-3-1944现在,数字签名一个非常广泛的用途就是用于数字证书。银行,比如中国银行和工商银行等,他们的网上银行使用了数字证书。电子商务的网站,比如亚马逊(Amazon)和淘宝也在用数字证书。投资理财类的基金直销网站如华夏基金和嘉实基金等也使用了数字证书。通过数字证书,人们可以判断当前浏览的网站地址不是钓鱼网站,同时,利用数字证书和相关的密码协议,对用户浏览的信息进行了加密,从而防止用户信息的泄漏。52024-3-192024-3-1955小结:数字签名是在密码学理论的基础上发展
6、起来的,基于公钥密码体制和私钥密码体制都可以获得数字签名,每种签名方案都与某一种或多种密码体制紧密联系在一起。目前主要集中在基于公钥密码体制的数字签名技术的研究。62024-3-192024-3-196662024-3-192024-3-19667.2 数字签名的原理及分类数字签名的原理及分类7.2.1 数字签名的原理数字签名的原理 基于非对称密码体制和对称密码体制都可以产生数字签名。不过,基于对称密码体制的数字签名一般都要求有可信任的第三方,在发生纠纷的时候作为仲裁者。所以,在研究中多以非对称密码体制为基础提出数字签名方案。下面以基于RSA签名算法为例子,说明数字签名的原理及过程。72024
7、-3-192024-3-197772024-3-192024-3-1977在RSA加密算法中,假如用户Bob的参数选取简单写为n=pq,其中p和q是大素数。(d,mod(n))=1且de1mod(n),则e,n为公开密钥,d,n为秘密密钥。对于一个秘密密钥d,n,在满足de1mod(n)的条件下,只有唯一的e,n与之对应。如同在介绍RSA加密算法时所提及的那样,一个用户的公钥会在较长时间内保持不变,故我们可以说,在一定时间内,e,n表示了秘密密钥,d,n的持有者的身份。82024-3-192024-3-198882024-3-192024-3-1988如果秘密密钥d,n的持有者Bob声明某个信
8、息m并放于公共媒介如网络之上,那么其他人如何确定这个消息就是他发布的原信息而没有被其他人更改过呢?也就是如何确定消息的完整性呢?可以通过下面这种方式达到目的。让消息发布者Bob先计算smd mod n,然后把s附于消息m之后即m,s一起放到公共媒介上。92024-3-192024-3-199992024-3-192024-3-1999因为大家都知道e,n唯一代表了消息发布者Bob的身份,故可以通过计算mse mod n成立与否,来判定消息是不是Bob发布的消息,以及消息是否被篡改。因为Bob是秘密密钥d,n的唯一持有者,只有他才能通过smd mod n计算出s的值来。其他人如果想算出s的值,从
9、目前的研究结果看,他必须要获得d的值,或者说要能破解大数分解问题才行。102024-3-192024-3-191010102024-3-192024-3-191010一个签名方案至少应满足以下3个条件:(1)签名者事后不能否认自己的签名;(2)接收者能验证签名,而任何其他人都不能伪造签名;(3)当双方关于签名的真伪发生争执时,一个第三方能解决双方之间发生的争执。基于公钥密码体制的数字签名方案一般都选择私钥签名、公钥验证模式。由于消息的长度是变化的,同时为了提高签名方案的安全性,数字签名方案里面都会使用消息摘要算法.112024-3-192024-3-191111112024-3-192024-
10、3-191111数字签名应具有的性质:数字签名应具有的性质:(1)收方能确认或证实发方的签字,但)收方能确认或证实发方的签字,但不能伪造不能伪造;(2)发方发出签名后的消息,就)发方发出签名后的消息,就不能否认不能否认所签消息;所签消息;(3)收方对已收到的消息)收方对已收到的消息不能否认不能否认;(4)第三者可以确认收发双方之间的消息传送,但)第三者可以确认收发双方之间的消息传送,但不能伪造不能伪造这一过程;这一过程;(5)必须能够验证签名者及其签名的日期时间;)必须能够验证签名者及其签名的日期时间;(6)必须能够认证被签名消息的内容;)必须能够认证被签名消息的内容;(7)签名必须能够由第三
11、方验证,以解决争议。)签名必须能够由第三方验证,以解决争议。:数字签名功能包含了认证的功能。:数字签名功能包含了认证的功能。122024-3-192024-3-191212122024-3-192024-3-191212 按数字签名的所依赖的理论基础分,主要可以分为:(1)基于大数分解难题的数字签名,如RSA数字签名方案;(2)基于离散对数难题的数字签名,如ElGamal数字签名方案、美国的数字签名方案;(3)基于椭圆曲线离散对数的数字签名,这类签名往往由基于离散对数的数字签名改进而来。近年来,随着密码理论的发展,人们也提出了基于双线性对的数字签名、量子数字签名方案、基于网格的数字签名方案等等
12、。7.2.2 数字签名的分类数字签名的分类132024-3-192024-3-191313从数字签名的用途分,可以把数字签名分为普通的数字签名和特殊用途的数字签名。-普通的数字签名往往可以和身份认证相互转换-特殊用途的数字签名,如盲签名、代理签名、群签名、门限签名和前向安全的数字签名等,多是在某些特殊的场合下使用。盲签名通常用于需要匿名的小额电子现金的支付和匿名选举,代理签名可以用于委托别人在自己无法签名的时候(如外出开会不方便使用网络等)代替签名等。142024-3-192024-3-191414142024-3-192024-3-1914147.3 数字签名算法数字签名算法 在本节中,我们
13、介绍比较经典的数字签名算法:一个是一个是RSA签名算法签名算法 一个是一个是ElGamal签名算法签名算法 RSA签名算法提出的时间比较早,并且一直到现在,以其为基础的应用都还在使用。而ElGamal签名算法的变型算法之一,就是后来的数字签名算法(DSA)。一个普通的数字签名方案通常包括2个算法,即签名算法和验证算法。-在签名阶段,签名者用自己的私钥对消息进行签名;-在验证阶段,验证者则通过签名者对应的公开钥进行验证。152024-3-192024-3-191515152024-3-192024-3-1915157.3.1 RSA数字签名数字签名 (1)参数选择)参数选择 选择两个满足需要的大
14、素数p和q,计算n=pq,(n)=(p-1)(q-1),其中(n)是n的欧拉函数值。选一个整数e,满足1e(n),且gcd(n),e)=1。通过de1mod(n),计算出d。以e,n为公开密钥,d,n为秘密密钥。1RSA数字签名描述数字签名描述162024-3-192024-3-191616162024-3-192024-3-191616 (2)签名过程)签名过程 假设签名者为Bob,则只有Bob知道秘密密钥d,n。设需要签名的消息为m,则签名者Bob通过如下计算对m签名:smd mod n (m,s)为对消息)为对消息m的签名。的签名。Bob在公共媒体上宣称他发布了消息m,同时把对m的签名s
15、置于消息后用于公众验证签名。172024-3-192024-3-191717172024-3-192024-3-191717 (3)验证过程。)验证过程。公众在看到消息m和对其签名s后,利用Bob的公开验证密钥e,n对消息进行验证。公众计算:公众计算:mse mod n是否成立,若成立,则是否成立,若成立,则Bob的签名有效。的签名有效。公众认为消息m的确是Bob所发布,且消息内容没有被篡改。也就是说,公众可以容易鉴别发布人发布的消息的完整性。也就是说,公众可以容易鉴别发布人发布的消息的完整性。182024-3-192024-3-191818182024-3-192024-3-191818可以
16、看到,RSA签名算法和加密算法参数产生过程相同。差别在于:(1)在RSA加密算法中,消息发送方是用公钥对数据进行加密,然后消息接收方用私钥对密文进行解密获得消息,也即“公钥加密,私钥解密”;(2)在RSA签名算法中,则是消息发布者用私钥对消息进行签名,消息接收者(往往是公众)用签名者的公钥进行验证,以鉴别消息在传送过程中是否被修改,也即“私钥签名,公钥验证”。192024-3-192024-3-191919192024-3-192024-3-1919192对上述对上述RSA签名算法的一个攻击签名算法的一个攻击前面所描述的RSA签名算法是有缺陷的。假设攻击者Eve想得到签名者对消息M的签名,则攻
17、击者Eve可以构造消息M1和M2,使M=M1*M2;然后把消息M1和M2分别发送给签名者Bob进行签名。(1)设Bob对消息M1的签名为S1,即S1M1d mod n;(2)设Bob对消息M2的签名为S2,即S2M2d mod n;在得到Bob的两次对消息的签名后,则攻击者Eve很容易构造消息M的签名S,S=Md=(M1*M2)dmodnS2*S1。202024-3-192024-3-192020202024-3-192024-3-1920203对上述对上述RSA签名算法的改进签名算法的改进 假设公开的安全哈希函数为H(),参数选择如前,其签名过程和验证过程如下:(1)签名过程)签名过程 设需
18、要签名的消息为m,签名者Bob通过如下计算对其签名:sH(m)d mod n (m,s)为对消息m的签名。(2)验证过程)验证过程 在收到消息m和签名s后,验证H(m)se mod n 是否成立,若成立,则发送方的签名有效。212024-3-192024-3-192121 可以看到,通过使用哈希函数,有效防止了对签名的伪造,增强了签名算法可以看到,通过使用哈希函数,有效防止了对签名的伪造,增强了签名算法的安全性,这也是在很多签名算法中使用哈希函数的原因之一。的安全性,这也是在很多签名算法中使用哈希函数的原因之一。222024-3-192024-3-192222数字签名的步骤(数字签名与验证过程
19、)第一步:将消息按散列算法计算得到一个固定第一步:将消息按散列算法计算得到一个固定 位数的消息摘要值。位数的消息摘要值。在数学上保证:只要改动消息的在数学上保证:只要改动消息的任何一位,重新计算出的消息摘任何一位,重新计算出的消息摘要就会与原先值不符。这样就保要就会与原先值不符。这样就保证了消息的不可更改证了消息的不可更改。232024-3-192024-3-192323第二步:第二步:对消息摘要值用发送者的私有密钥加密,对消息摘要值用发送者的私有密钥加密,所产生的密文即称数字签名。然后该数字签名同所产生的密文即称数字签名。然后该数字签名同原消息一起发送给接收者。原消息一起发送给接收者。第三步
20、:第三步:接收方收到消息和数字签名后,用同样的接收方收到消息和数字签名后,用同样的散列算法对消息计算摘要值,然后与用发送者的散列算法对消息计算摘要值,然后与用发送者的公开密钥对数字签名进行解密,将解密后的结果公开密钥对数字签名进行解密,将解密后的结果与计算的摘要值相比较。如相等则说明报文确实与计算的摘要值相比较。如相等则说明报文确实来自发送者。来自发送者。242024-3-192024-3-192424数字签名与验证过程图示消消 息息摘要摘要数字签名数字签名消消 息息数字签名数字签名消消 息息摘要摘要数字签名数字签名摘要摘要发送方发送方接收方接收方252024-3-192024-3-19252
21、5252024-3-192024-3-1925257.3.2 ElGamal数字签名数字签名 ElGamal签名算法也是基于离散对数难题的签名算法也是基于离散对数难题的,于于1985年提出,其变型之一成年提出,其变型之一成为美国国家标准技术研究所(为美国国家标准技术研究所(National Institute of Standards and Technology,简简称称NIST)提出的提出的DSA(digital signature Algorithm)算法的基础。算法的基础。262024-3-192024-3-192626262024-3-192024-3-1926262对于对于ElGa
22、mal签名算法的理解,需注意:签名算法的理解,需注意:(1)这个方案还是存在一定的不足。)这个方案还是存在一定的不足。比如,对于消息没有用哈希函数进行处理比如,对于消息没有用哈希函数进行处理,签名容易被伪造。,签名容易被伪造。(2)签名时所使用的随机值)签名时所使用的随机值k不能泄露,不能泄露,。通过变换通过变换(m-x)k-1mod(p-1),可知,可知x(m-k)-1 mod(p-1)。(3)对于两个不同的消息签名时,不要使用相同的)对于两个不同的消息签名时,不要使用相同的k,否则容易求得,否则容易求得k的值,的值,从而知道签名者的私钥。从而知道签名者的私钥。272024-3-192024
23、-3-192727272024-3-192024-3-192727 通过对上面两个算法的学习,我们可以看到,数字签名的一个重要作用,就通过对上面两个算法的学习,我们可以看到,数字签名的一个重要作用,就是保证了被签名文档的完整性。是保证了被签名文档的完整性。一旦被签名的文档内容发生了改变,则通不过验证,从而防止了文档被篡改一旦被签名的文档内容发生了改变,则通不过验证,从而防止了文档被篡改和伪造;和伪造;而且,签名是与文档内容紧密联系的,这样,对一个文档的签名,而且,签名是与文档内容紧密联系的,这样,对一个文档的签名,如果如果复制到另外一个文档上,就通不过验证,使得签名对该文档无效。复制到另外一个
24、文档上,就通不过验证,使得签名对该文档无效。282024-3-192024-3-192828282024-3-192024-3-1928287.4 数字签名标准数字签名标准DSS(略)(略)1991年年8月,月,NIST提出将数字签名算法(提出将数字签名算法(DSA,Digital Signature Algorithm)用于数字签名标准()用于数字签名标准(DSS,Digital Signature Standard)中。)中。由于由于RSA算法及签名的广泛使用等各种原因,使得算法及签名的广泛使用等各种原因,使得DSS的出现引起了很多的的出现引起了很多的争议。争议。1994年,在考虑了公众的
25、建议后,该标准最终颁布。年,在考虑了公众的建议后,该标准最终颁布。7.4.1 基于基于离散对数离散对数的美国数字签名标准的美国数字签名标准292024-3-192024-3-192929292024-3-192024-3-192929-DSA描述描述1算法的参数算法的参数 p是L比特长的素数,L的长度为512到1024且是64的倍数。q是160比特长且为p-1的素因子。gh(p-1)/q mod p,其中h,g是整数,1hp-1,且要求g大于1。x是签名者的私钥,由签名者选取的随机数,要求是小于q的正整数;ygx mod p为签名者的公钥。选择安全散列算法H(),标准中指定为SHA。签名者公开
26、签名者公开(p,q,g,y)及安全散列算法及安全散列算法H(),保密,保密x。DSA的安全性是基于求解离散对数困难性的基础之上的,并使用了安全散的安全性是基于求解离散对数困难性的基础之上的,并使用了安全散列算法。列算法。它也是它也是Schnorr和和ElGamal签名算法的变型。签名算法的变型。302024-3-192024-3-193030302024-3-192024-3-193030312024-3-192024-3-193131 对于对于DSA算法,算法,人们有一些批评意见人们有一些批评意见,比如认为验证比签名快,比如认为验证比签名快,q的长度的长度160比比特太短,不能用于加密和分配
27、密钥等。特太短,不能用于加密和分配密钥等。另外,由于另外,由于DSA算法是算法是ElGamal签名算法的变型,签名算法的变型,故所有对故所有对ElGamal签名算法签名算法的攻击,也可以用于对的攻击,也可以用于对DSA算法的攻击算法的攻击。不过就已有的攻击来看,。不过就已有的攻击来看,DSA算法还是算法还是安全的。安全的。与与RSA数字签名算法比较,数字签名算法比较,:对于:对于RSA数字签名算数字签名算法,每个用户都要有不同的公钥,故针对每个用户,都要去产生大的素数法,每个用户都要有不同的公钥,故针对每个用户,都要去产生大的素数p和和q,去计算去计算d;。322024-3-192024-3-
28、193232322024-3-192024-3-193232 对于对于DSA签名算法的举例,如果在例子中采用了对消息进行消息摘要值的计签名算法的举例,如果在例子中采用了对消息进行消息摘要值的计算算H(m),大数的运算容易让初学者望而生畏,我们在这里采用小的整数代替,大数的运算容易让初学者望而生畏,我们在这里采用小的整数代替H(m)。如果读者关心在算法中使用了消息摘要的例子,可以参看如果读者关心在算法中使用了消息摘要的例子,可以参看DSA的标准的标准fips-186.标准中提到了用标准中提到了用Miller Rabin素性检测算法产生素数,用素性检测算法产生素数,用ANSI X9.17产生随产生
29、随机数,以及其他参数的选取等。机数,以及其他参数的选取等。332024-3-192024-3-193333332024-3-192024-3-193333 假设假设q=101,p=78*101+1=7879,h=19,则则g=1978 mod 7879367 取取x=69,则,则ygx mod p=36769 mod 78791292。假设想签名的消息为假设想签名的消息为m=3456,且选择的随机值为且选择的随机值为k=27,可以计算,可以计算k-115mod101。故可以算出签名为故可以算出签名为r(gk mod p)mod q=(36727 mod 7879)mod 1016797 mod
30、 10130 s(k-1(m+xr)mod q=(15(3456+6930)mod1 0170 可以得到对可以得到对m的签名为的签名为(30,70)。342024-3-192024-3-193434342024-3-192024-3-193434验证签名:验证签名:ws-1 mod q=70-1 mod 10113 u1mw mod q=345613 mod 10184 u2rw mod q=3013 mod 10187 v(gu1yu2mod p)mod q=(36784129287 mod 7879)mod 101(24561687 mod7879)mod 1016797 mod 1013
31、0 v=r,因此签名是有效的,因此签名是有效的注:注:可以看到,签名和验证过程中的运算量是很大的,其中最主要的运算集可以看到,签名和验证过程中的运算量是很大的,其中最主要的运算集中在模幂运算上,而且上面的举例中,素数的取值也是比较小的,这些运算中在模幂运算上,而且上面的举例中,素数的取值也是比较小的,这些运算可以通过简单编程实现。可以通过简单编程实现。如果是按标准中的取值,模幂运算及大数的处理对如果是按标准中的取值,模幂运算及大数的处理对初学者来说还是有挑战性的初学者来说还是有挑战性的。352024-3-192024-3-1935357.4.2 基于椭圆曲线的美国数字签名标准 椭圆曲线数字签名
32、算法(ECDSA)是使用椭圆曲线对数字签名算法(DSA)的模拟。ECDSA首先由Scott和Vanstone在1992年为了响应NIST对数字签名标准(DSS)的要求而提出,1998年作为ISO标准被采纳,在1999年作为ANSI标准被采纳,并于2000年成为IEEE和FIPS标准。现为基于有限域乘法群上离散对数问题的密码体制需用1024比特(甚至2048比特)的模数才是安全的,但对基于有限域上椭圆曲线群离散对数问题的密码体制只需用160比特的模数就可达到这样级别的安全性。362024-3-192024-3-1936367.4.3 基于离散对数的俄罗斯数字签名标准 俄罗斯的数字签名算法在很多方
33、面类似于NIST DSA,其签名生成及验证算法是在NIST DSA的基础上修改产生的。NIST DSA的q的长度是160比特,而俄罗斯的签名方案中,q的长度至少是255比特,由此增加了模幂运算的计算量,因而安全性更高,但效率更低。372024-3-192024-3-1937377.4.4 基于椭圆曲线的俄罗斯数字签名标准 该标准算法类似于美国的ECDSA。382024-3-192024-3-1938387.4.5 中国的数字签名标准 在商用密码领域,主要的身份验证手段是使用基于公钥基础设施的数字证书进行验证和安全保护,为了保证商用密码应用的安全性,国家密码管理局牵头,相关单位研制了适用于我国商
34、用密码领域专用的非对称算法SM2和摘要算法SM3。392024-3-192024-3-1939392011年国家密码管理局下发了关于做好公钥密码算法升级工作的通知,规定2011年7月1日以后投入运行并使用公钥密码的信息系统,应使用SM2椭圆曲线密码算法;规定从2011年2月28日起在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用SM2椭圆曲线密码算法,新研制的含有公钥密码算法的商用密码产品须支持SM2椭圆密码算法;已审批的公钥密码基础设施电子认证系统和密钥管理系统应于2012年6月30日前完成系统升级。这标志着我国具有自主知识产权的公钥密码算法SM2将逐步取代RSA公钥密码算法,国产算法密码支撑体系将全面建立;这一举措进一步增强了我国商用密码体系的安全性和自主性,对于我国商用密码产业的发展和信息安全体系建设将产生深远影响。