1、第3章 电子商务签名技术 3.1 数字签名概念3.2 RSA数字签名3.3 DSS签名3.4 哈希签名3.5 几种特殊数字签名方法本章要点本章要点 数字签名是与伴随信息一起发送或与信息有一定逻辑关联的数据项,用来确定信息的发送源,确认信息自签名后未被修改过。数字签名的方法包括基于RSA的方法、Hash签名、美国数字签名标准DSS以及椭圆曲线数字签名算法(ECDSA)。此外,还介绍了在电子商务领域一些被广泛应用的特殊数字签名方法,如盲签名、双联签名、团体签名、不可争辩签名、数字时间戳等。3.1数字签名概念 3.1.1 数字签名概念3.1.2 数字签名使用模式3.1.3 数字签名的技术保障3.1.
2、4 数字签名方案分类3.1.5 数字签名使用原理3.1.1 数字签名概念 数字签名与书面文件签名有相同之处,采用数字签名,也能确认以下两点:第一,信息是由签名者发送的;第二,信息自签发后到收到为止未曾作过任何修改。这样数字签名就可用来防止电子信息因易被修改而有人作伪,或冒用别人名义发送信息。或发出(收到)信件后又加以否认等情况发生。3.1.1 数字签名概念 在电子商务安全保密系统中,数字签名技术有着特别重要的地位,在电子商务安全服务中的源鉴别、完整性服务、不可否认服务中,都要用到数字签名技术。在电子商务中,完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的能力。数字签
3、名机制提供了一种鉴别方法,普遍用于银行、电子贸易等,以解决如下问题:3.1.1 数字签名概念(1)身份认证。收方通过发方的电子签名才能够确认发方的确切身份,但无法伪造。(2)保密。双方的通信内容高度保密,第三方无从知晓。(3)完整性。通信的内容无法被篡改。(4)不可抵赖。发方一旦将电子签字的信息发出,就不能再否认。3.1.1 数字签名概念 电子交易的安全依赖于技术上采用适当的安全措施,如电子签名技术,以确认使用人的身份,确保信息保密及完整无缺,和保障已进行的交易不被推翻。但是,数字签名技术在法律上的地位却不明确。数字签名就需要人们对它的“签名”功能赋予合法的法律地位。联合国电子商务示范法对电子
4、记录的法律问题提出了一系列解决方案,分别就数据电文的法律承认、书面性、签名、原件、证据性、留存等做出了原则性的规定。3.1.2数字签名使用模式目前使用的电子签名主要有三种模式:(1)智慧卡式。(2)密码式。(3)生物测定式。3.1.3 数字签名的技术保障 普遍使用的电子签名技术是基于PKI的数字签名技术,PKI技术的详细介绍请参看本教材第8章,数字签名的基础保障主要有以下四个方面:1认证机构认证机构CA2数字证书数字证书3公钥密码技术公钥密码技术4数字摘要数字摘要3.1.4 数字签名方案分类 应用广泛的数字签名方法主要有三种,即:RSA签名、DSS签名和Hash签名。此外,也有使用对称密码算法
5、实现数字签名。这四种算法可单独使用,也可综合在一起使用。数字签名是通过密码算法对数据进行加、解密变换实现的,用DES算去、RSA算法都可实现数字签名。但三种技术或多或少都有缺陷,或者没有成熟的标准。1RSA签名签名 2DSS签名签名 3Hash签名签名 4对称密码算法签名对称密码算法签名3.1.4 数字签名方案分类安全的数字签名使接收方可以得到保证:文件确实来自声称的发送方。鉴于签名私钥只有发送方自己保存,他人无法做一样的数字签名,因此他不能否认他参与了交易。数字签名的加密解密过程和私有密钥的加密解密过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加
6、密,接收方用发送方的公开密钥进行解密。这是一个一对多的关系:任何拥有发送方公开密钥的人都可以验证数字签名的正确性,而私有密钥的加密解密则使用的是接收方的密钥对,这是多对一的关系:任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。在实用过程中,通常一个用户拥有两个密钥对,另一个密钥对用来对数字签名进行加密解密,一个密钥对用来对私有密钥进行加密解密。这种方式提供了更高的安全性。在实际运用中,直接用公开密码的私钥对文件进行签字并不完全可行,如果需要对相当长的文件进行签名认证速度就太慢。通常的解决办法是引入可公开的密码。3.1.4 数字签名使用原理3.
7、2 RSA数字签名 RSA方法的加密算法和解密算法互为逆变换,所以可用于数字签名系统。RSA是最流行的数字签名方法,许多产品内核中都有RSA的软件和类库。RSA算法在第2章已有详细介绍。3.2 RSA数字签名 RSA算法中数字签名技术实际上是通过一个哈希函数来实现的。数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。一个最简单的哈希函数是把文件的二进制码相累加,取最后的若干位。哈希函数对发送数据的双方都是公开的。用RSA或其它公开密钥密码算法的最大方便是没有密钥分配问题(网络越复杂、网络用户越多,其优点越明显)。因为公开密钥加密使用
8、两个不同的密钥,其中有一个是公开的,另一个是保密的。公开密钥可以保存在系统目录内、未加密的电子邮件信息中、电话黄页(商业电话)上或公告牌里,网上的任何用户都可获得公开密钥。而私有密钥是用户专用的,由用户本身持有,它可以对由公开密钥加密信息进行解密。3.2 RSA数字签名 RSA方法的加密算法和解密算法互为逆变换,所以可用于数字签名系统。假定用户的公开钥是(nA,eA),秘密钥是dA,加密和解密变换分别为EA和DA,则A发送的签名后的消息是MDA(M)MdA(mod nA)。收到M后的B,可以用A的公开变换EA恢复M:EAEA(M)M (dAeA)(mod nA)因为只有A知道dA,所以签名不可
9、能伪造,并且A与B之间的任何争议都可以通过仲裁加以解决。在具体环境中,RSA算法中数字签名技术实际上是通过一个哈希函数来实现的,其原理如图31所示。3.2 RSA数字签名dAeA图3-1 RSA 签名原理3.2 RSA数字签名其操作步骤如下:使用散列编码将发送文件加密产生固定长的数字摘要;发送方用自己的专用密钥对摘要再加密,形成数字签名;将原文和加密的摘要同时传给对方;接收方用发送方的公共密钥对摘要解密,同时对收到的文件用散列编码加密产生同一摘要;将解密后的摘要和收到的文件在接受方重新加密产生的摘要相互对比,如果两者一致,则说明在传送过程中信息没有破坏和篡改。否则,则说明信息已经失去安全性和保
10、密性。一个最简单的哈希函数是把文件的二进制码相累加,取最后的若干位。哈希函数对发送数据的双方都是公开的。3.3 DSS签名 美国国家标准技术研究所已经公布了联邦信息处理标准FIPS PUB 186,即所谓的数字签名标准(Digital Signature Standard,DSS)。DSS利用了安全散列算法(Secure Hash Algrithm,SHA)并提出了一种新的数字签名技术,即数字签名算法(Digital Signature Algrithm,DSA)。DSS最早发表于1991年,并根据公众对该体制安全性担心的反应在1993年进行了修改。1996年由进行了更进一步的小修改。3.3.
11、1 DSS基本原理基本原理 DSA算法设计用来提供唯一的数字签名函数,不像RSA还可用作加密和密钥交换。DSS方法也利用了一个散列函数。散列码和一个用作这个特殊签名的随机数K作为签名函数的输入。签名函数还依赖于发方的私有密钥(KRa)和一个对许多通信原则来说是知名的参数集。我们可以认为这个集合组成一个全局公开密钥(KUG)。结果是签名由两个分量组成,记为s和r。在接收端,将计算所收到报文的散列码,该散列码和签名将作为验证函数的输入。验证函数还依赖于全局公开密钥和与发方私有密钥配对的发方公开密钥。如果签名是有效的,验证函数的输出值就等于签名分量r。签名函数就是这样的:只有发方用掌握的私有密钥才能
12、产生有效的签名。3.3.1 DSS基本原理基本原理 图3-2 DSS原理 DSA签名和RSA签名一样不存在哈希签名的局限性,因为他们都采用了公钥算法,即每个人都有两个密钥,其中一个产生签名,并秘密保存,另一个公开,用来验证签名。3.3.2数字签名算法数字签名算法 数字签名算法DSA是Schnorr和ElGamal签名算法的变种,DSA是基于离散对数的难度。1DSA算法参数说明算法参数说明 DSA算法中应用了下述参数:p:L bits长的素数。L是64的倍数,范围是512到1024;q:p-1的160bits的素因子;g:g=hp-1 mod p,h满足h 1;x:1x q,x为私钥;y:y=g
13、x mod p,(p,q,g,y)为公钥;H(x):单向Hash函数。在DSS中选用安全散列算法(Secure Hash Algorithm,SHA)。p,q,g:可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。3.3.2数字签名算法数字签名算法 2签名及验证协议签名及验证协议 签名及验证协议如下:(1)P产生随机数k,k q;(2)P计算r=(gk mod p)mod q和s=(k-1(H(m)+xr)mod q 签名结果是(m,r,s)。(3)验证时 计算w=s-1mod q 计算u1=(H(m)w)mod q 计算u2=(rw)mod q 计算v=(gu1yu2)mo
14、d p)mod q 若v=r,则认为签名有效。3.3.2数字签名算法数字签名算法 DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,也能确认它们是否是随机产生的。而RSA算法却作不到。图3-3描述了DSS的签名和验证函数。3.4 哈希签名 Hash签名是利用哈希函数(Hash function,也叫摘要函数,散列函数)进行数字签名的一种方法。Hash签名是当前最主要的数字签名方法之一,也称之为数字摘要法(Digital Digest)或数字指纹法。它与RSA数字签名是单独的签名不同,该数字签名方法是
15、将数字签名与要发送的信息紧密联系在一起,它更适合于电子商务活动。将一个商务合同的个体内容与签名结合在一起,比合同和签名分开传递,更增加了可信度和安全性。3.4 哈希签名 Hash函数与加密函数类似。事实上有些Hash函数就是稍加修改的加密函数。大多数函数的作法是每次取一个数据块,对数据块的每一位用一个简单的编码函数进行编码。Hash算法的工作方式类似通信协议中的校验和;发信方将一个数据包的所有字节加起来,将和添加在包上;收信方执行同样的运算并比较两个和,以决定是否被正确地传输。校验算法的主要作用是根据报文内容通过单向的Hash算法计算出一个校验来,如果报文被改动或增减,无法根据同样的算法算出相
16、同的校验来。一般在实际应用中,对于只有数据完整性要求的数据只对其校验进行加密就可以了,这样能够大大减少数据加密的工作量。一个Hash函数满足:H可以作用于一个任意长度的数据块;H产生一个固定长度的输出;H(x)对任意给定的x计算相对容易,无论是软件还是硬件实现;对任意给定码h,找到x满足H(x)=h具有计算不可行性;对任意给定的数据块x,找到满足H(y)=H(x)的yx具有计算不可行性;找到任意数据对(x,y),满足H(x)=H(y)是计算不可行的。3.4 哈希签名 单向Hash函数是在一个方向上工作的Hash函数,从预映射的值很容易计算其Hash值,但要产生一个预映射的值使其Hash值等于一
17、个特殊值却是很难的。好的hash函数也是无冲突的:难于产生两个预映射的值,使他们的hash值相同。Hash函数是公开的,对处理过程不用保密。单向hash函数的安全性是它的单向性。无论怎么看,输出不依赖于输入。预映射单个比特的改变,平均而言,将引起 hash值中一半的比特改变。已知一个hash值,要找到预映射的值,使它的hash值等于已知的hash值在计算上是不可行的。3.4 哈希签名 利用散列函数进行数字签名和验证的文件传输过程如下:发送方首先用哈希函数从原文得到摘要值;发送方采用发送方的私有密钥对摘要进行加密,并把加密后的摘要附加在要发送的原文后面一起发送给接收方;接收方用发送方的公开密钥对
18、数字摘要进行解密,得到数字摘要的明文;接收方用得到的原文和哈希函数重新计算数字签名,并与解密后的数字摘要进行对比。如果两个数字摘要是相同的,说明文件在传输过程中没有被破坏。上述流程可用图3-4表示。3.4.1 哈希签名基本原理 如果第三方冒充发送方发出了一个文件,因为接收方在对数字签名进行解密时使用的是发送方的公开密钥,只要第三方不知道发送方的私有密钥,解密出来的数字摘要和经过计算的数字摘要必然是不相同的。这就提供了一个安全的确认发送方身份的方法。3.4.1 哈希签名基本原理 如果第三方冒充发送方发出了一个文件,因为接收方在对数字签名进行解密时使用的是发送方的公开密钥,只要第三方不知道发送方的
19、私有密钥,解密出来的数字摘要和经过计算的数字摘要必然是不相同的。这就提供了一个安全的确认发送方身份的方法。3.4.2 安全哈希算法 安全Hash算法SHA主要适用于数字签名标准DSS里面定义的数字签名算法DSA。对于长度小于264 bit的消息,SHA-1会产生一个160 bit的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。SHA在1993年由美国国家标准和技术协会提出,并作为联邦信息处理标准(FIPS PUB 180)公布;1995年又发布了一个修订版FIPS PUB 180-1,通常称之为SHA
20、-1。SHA-1是基于MD4算法的,并且它的设计在很大程度上是模仿MD4的。现在已成为公认的最安全的散列算法之一,并被广泛使用。SHA-1,SHA-224,SHA-256,SHA-384和SHA-512都被需要安全散列算法的美国联邦政府所应用,他们也使用其他的密码算法和协定来保护敏感的未保密资料。FIPS PUB 180-1也鼓励私人或商业组织使用 SHA-1加密。3.4.2安全哈希算法1SHA-1算法概述算法概述 SHA-1算法由美国国家标准和技术协会(NIST)与美国国家安全局(NSA)设计,并且被美国政府采纳,成为美国国家标准。事实上SHA-1目前是全世界使用最为广泛的哈希算法,已经成为
21、业界的事实标准。可以对长度不超过264 bit的消息进行计算,输入以512 bit数据块为单位处理,产生160 bit的消息摘要作为输出。该算法的处理流程大致分为5个步骤:(1)附加填充比特。对输入的数据进行填充,使得数据位长度对512求余的结果为448。填充比特串的最高位补一个1,其余位补0。附加填充总是要进行的,即使消息的长度满足所要求的长度。(2)附加长度值。将64 bit加在报文后表示报文的原始长度,使报文长度为512 bit的倍数。3.4.2安全哈希算法(3)初始化MD缓存。一个160位MD缓冲区用以保存中间和最终散列函数的结果。它可以表示为5个32位的寄存器(A,B,C,D,E)。
22、初始化为:A=67452301 B=EFCDAB89 C=98BADCFE D=10325476 E=C3D2E1F0 前四个与MD5相同。(4)以512bit(16个字)分组处理消息。此算法的核心就是称为压缩函数模块,这个模块包括4次循环,每次循环又包含20个处理步骤。4次循环具有相似的结构,但每次循环使用不同的基本逻辑函数,称为 f1,f2,f3,f4。3.4.2安全哈希算法(5)输出。全部L个512位数据处理完毕后,输出160 bit消息摘要。CV=IV CVq+1=SUM(CVq,ABCDEq)MD=CVL 其中:IV=ABCDE的初始值;L=数据块的个数;SUM32=对每一个输入对的
23、值单独相加,使用模232加法;MD=最后的消息摘要值。3.4.2安全哈希算法2SHA-1压缩函数压缩函数 A,B,C,D,E(E+f(t,B,C,D)+S5(A)+Wt+Kt),A,S30(B),C,D其中:(1)A,B,C,D,E:缓冲区的5个字。(2)t:步数,0t=79;f(t,B,C,D)=步t的基本逻辑函数。(3)Sk:循环左移k位给定的32位字。(4)Wt:一个用于加法的常量,对应四个不同的值,计算方法如下:Wt=Mt 0t15;Wt=(Wt-3 Wt-8 Wt-14 Wt-16)16 t 79;其中:Mt即源数据块对应的字(32bit)。(5)所有“+”都是模232加。(6)t,
24、Kt,f(t,B,C,D)的运算规则如表3-1所示。表3-1 SHA-1压缩函数运算规则表3.4.2安全哈希算法3.4.2安全哈希算法TKtf(t,B,C,D)0t19Kt=827999(BC)(BD)20t39Kt=6ED9EBA1B C D40t59Kt=1BBCDC(BC)(BD)(CD)60t79Kt=CA1D6B C D3.4.2安全哈希算法压缩函数的结构示意如图3-5所示。3.5 几种特殊数字签名方法 根据电子商务具体应用的需要,形成了许多特殊的数字签名应用,如盲签名、双联签名、团体签名、不可争辩签名、数字时间戳等。般数字签名中,总是要先知道文件内容而后才签署,这正是通常所需要的。
25、但有时需要某人对一个文件签名,但又不让他知道文件内容,称为盲签名,它是由Chaum在1983年最先提出的。在选举投票和数字货币协议中通常会使用到盲签名。利用盲变换可以实现盲签名。Chaum利用盲变换可以实现盲签名的基本原理如下:(1)A取一文件并以一随机值乘之,称此随机值为盲因子;(2)A将此盲文件签名;(3)B对盲文件签名;(4)A以盲因子除之,得到B对原文件的签名。3.5.1盲签名 盲签名与通常的数字签名的不同之处在于,签名者并不知道他所要签发文件的具体内容。盲数字签名在签名时,接收者首先将被签的消息进行盲变换,把变换后的消息发送给签名者,签名者对盲消息进行签名并把消息送还给接收者,接收者
26、对签名再做逆盲变换,得出的消息即为原消息的盲签名。3.5.1盲签名SigBT(m)盲变换T盲变换T签名者B签名SigBT(m)SigB(m)接收者A接收者A图3-6 盲数字签名方案的签名过程 有一类特殊的盲签名叫完全盲签名,其性质是这样的:签名者在文件上的签名是有效的,签名是其签署文件的证据。如果把文件给签名者看,他可确信他签署过这份文件。但是,签名者不能把签署文件的行为与签署了的文件相关联。即使他记下了他所作的每一个盲签名,他也不能确定他在什么时候签署了该文件。3.5.1盲签名3.5.2双联签名双联签名在实际商务活动中经常出现这种情形,即持卡人给商家发送订购信息和自己的付款帐户信息,但不愿让
27、商家看到自己的付款帐户信息,也不愿让处理商家付款信息的第三方看到定货信息。在电子商务中要能做到这点,需使用双联签名技术。双联签名的使用方法如下:(1)持卡人将发给商家的信息M1和发给第三方的信息M2分别生成报文摘要MD1和报文摘要MD2;(2)持卡人将MD1和MD2合在一起生成MD,并签名;(3)将M1、MD2和MD发送给商家,将M2、MD1和MD发送给第三方;接收者根据收到的报文生成报文摘要,再与收到的报文摘要合在一起,比较结合后的报文摘要和收到的MD,确定持卡人的身份和信息是否被修改过。双联签名解决了三方参加电子贸易过程中的安全通信问题。3.5.3团体签名团体签名 David Chaum提
28、出了下述问题:一个公司有几台计算机,每台都连在局域网上。公司的每个部门有它自己的打印机(也连在局域网上),并且只有本部门的人员才被允许使用他们部门的打印机。因此,打印前,必须使打印机确信用户是在那个部门工作的。同时,公司想保密,不可以暴露用户的姓名。然而,如果有人在当天结束时发现打印机用得太频繁,主管者必须能够找出谁滥用了那台打印机,并给他一个帐单。对这个问题的解决方法称为团体签名。它具有以下特性:只有该团体内的成员能对消息签名;签名的接收者能够证实消息是该团体的有效签名;签名的接收者不能决定是该团体内哪一个成员签的名;在出现争议时,签名能够被“打开”,以揭示签名者的身份。A和B怎么对同一数字
29、文件签名呢?不用单向哈希函数,有两种选择。第一种选择是A和B分别对文件的副本签名,结果签名的信息是原文的两倍。第二种就是A首先签名,然后B对A的签名再进行签名,这是可行的,但是在不验证B的签名的情况下就验证A的签名是不可能的。3.5.3团体签名团体签名 采用单向哈希函数,团体签名是容易实现的:(1)A对文件的哈希签名。(2)B对文件的哈希签名。(3)B将他的签名交给A。(4)A把文件、签名和B的签名发给C。(5)C验证A和B的签名。A和B能同时或顺序地完成和,在C可以只验证其中一人的签名而不用验证另一人的签名。3.5.3 团体签名团体签名 下面是一个具有可信仲裁者T的团体签名方案:(1)T生成
30、一大批公开密钥/私钥密钥对,并且给团体内每个成员一个不同的唯一私钥表。在任何表中密钥都是不同的(如果团体内有n个成员,每个成员得到m个密钥对,那么总共有nm个密钥对)。(2)T以随机顺序公开该团体所用的公开密钥主表。T保持一个哪些密钥属于谁的秘密记录。(3)当团体内成员想对一个文件签名时,他从自己的密钥表中随机选取一个密钥。(4)当有人想验证签名是否属于该团体时,只需查找对应公开钥主表并验证签名。(5)当争议发生时,T知道哪个公钥对应于哪个成员。3.5.3 团体签名团体签名 3.5.4 无可争辩签名 不可争辩签名是在没有签名者自己的合作下不可能验证签名的签名。无可争辩签名是为了防止所签名文件被
31、复制,有利于产权拥有者控制产品的散发。不可争辩签名1989年由Chaum和Antwerpen引入,这类签名有一些特点,适用于某些应用,如电子出版系统,以利于对知识产权的保护。在签名人合作下才可能验证签名,又会给签名者一种机会,在不利于他时可拒绝合作,因而不具有“不可否认性”。不可争辩签名除了一般签名体制中的签名算法和验证算法(或协议)外,还需要第三个组成部分,即否认协议;签名者利用不可争辩签名可向法庭或公众证明一个伪造的签名的确是假的;但如果签名者拒绝参与执行否认协议,就表明签名真的由他签署。3.5.5 多重签名 一个文件经多个人的私钥签名 多重数字签名方案可分为两类:有序多重数字签名方案 广
32、播多重数字签名方案。3.5.6数字时间戳 如果在签名时加上一个时间标记,即是有数字时间戳(digital time stamp)的数字签名。时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分:需加时间戳的文件的摘要;DTS收到文件的日期和时间;DTS的数字签名。获得数字时间戳的过程 Hash算 法 原 文 摘 要 1 加 时 间 数 字 时 间 戳 Internet 用DTS机 构 的 私 钥 加 密 发 送 方 DTS机 构 Hash算 法 加 了 时 间 后的 新 摘 要 摘 要 1 摘 要 1+时 间 数 字 时 间 戳 数字时间戳协议必须具有如下性质:数据本身必
33、须有时间标记,而与它所用的物理媒介无关。不存在哪怕改变文件的1个比特而文件时间戳却没有明显变化的情形。不可能用不同于当前日期和时间的日期和时间来签署文件。问题与讨论 什么是数字签名?讨论什么情况下用数字签名比用加密更合适?2双联签名的概念是什么?其基本原理是什么?3试设计一个数字签名方法,以便使接收方能验证签名。4用DSS,因为每个签名将产生不同的k值,因此即使分别在不同的场合对相同的报文签名,产生的签名也不相同。RSA签名是不能这样的。这样的不同有什么实际意义?5数字时间戳是如何签署的?6某个人写了一份遗嘱需要多个律师签名,以保障遗嘱的合法性和可认证性,但不想让任何律师知道。问此人应该使用什么技术?7如果选举单位要采用电子投票的方式进行投票,应该采用什么技术来保证投票的公正性、匿名性?