前言
 
 为了确保数据传输的安全性,不得不采取一系列的安全技术,如加密技术、数字签名、身份认证、密钥管理、防火墙、安全协议等。其中数字签名就是实现网上交易安全的核心技术之一,它可以保证信息传输的保密性、数据交换的完整性、发送信息的不可否认性、交易者身份的确定性等。
 
摘要
由于计算机和网络的快速发展,电子商务日渐兴起,通过在文档上签字盖章的方式进行商务活动,显得效率很低。例如,一个在中国的公司和一个在美国的公司进行合作,双方达成协议后,要签订一个合同,则需要一方签名盖章后,邮寄或派人到另一方去签名盖章。于是人们就想,能不能对已经协商好的电子文档进行和手写签名一样的电子签名呢?并且这个电子签名和要求手写签名具有相同的法律效力,同时也是安全的,也即不能被伪造。这样,一方签名后,可以通过电子邮件发送给另一方,效率高而且花费小。
数字签名的概念由 Diffie和Hellman于1976年提出,目的是通过签名者对电子文件进行电子签名,使签名者无法否认自己的签错误!未找到目录项。手写签名相同的法律效力。由于数字签名技术在现在和未来社会里对政府、企事业、一般团体和个人的重要影响,世界各国都加强了对它的研究。
1994年美国政府正式颁发了美国数字签名标准 DSS(Digital Signature Standard)
1995年我国也制定了自己的数字签名标准 (GB15851-1995)
2004年我国颁发《×××电子签名法》
 
关键词
Ø      数字签名与手工签名的区别
  • 数字签名——数字的,因消息而异
  • 手工签名——模拟的,因人而异
Ø      数字签名与消息认证的区别
  • 数字签名——第三者可以确认收发双方的消息传送
  • 消息认证——只有收发双方才能确认消息的传送
数字签名的应用
•         认证
•         数据完整性
•         不可抵赖性
•         大型网络的公钥证书中
一、   数字签名的原理
1 、什么是数字签名
数字签名在ISO7498-2标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。美国电子签名标准(DSS,FIPS186-2)对数字签名作了如下解释:“利用一套规则和一个参数对数据计算所得的结果,用此结果能够确认签名者的身份和数据的完整性”。
 
在文件上手写签名长期以来被用作作者身份的证明,或表明签名者同意文件的内容。实际上,签名体现了以下几个方面的保证:
A. 签名是可信的。签名使文件的接收者相信签名者是慎重地在文件上签名的。
B. 签名是不可伪造的。签名证明是签字者而不是其他的人在文件上签字。
C. 签名不可重用。签名是文件的一部分,不可能将签名移动到不同的文件上。
D. 签名后的文件是不可变的。在文件签名以后,文件就不能改变。
E. 签名是不可抵赖的。签名和文件是不可分离的,签名者事后不能声称他没有签过这个文件。
而在计算机上进行数字签名并使这些保证能够继续有效则还存在一些问题。
首先,计算机文件易于复制,即使某人的签名难以伪造,但是将有效的签名从一个文件剪辑和粘贴到另一个文件是很容易的。这就使这种签名失去了意义。
其次,文件在签名后也易于修改,并且不会留下任何修改的痕迹。
有几种公开密钥算法都能用作数字签名,这些公开密钥算法的特点是不仅用公开密钥加密的消息可以用私钥解密和,而且反过来用私人密钥加密的消息也可以用公开密钥解密。其基本协议很简单:
A. Alice用她的私钥对文件加密,从而对文件签名。
B. Alice将签名后的文件传给 Bob。
C. Bob用 Alice的公钥解密文件,从而验证签名。
在实际过程中,这种做法的准备效率太低了。从节省时间,数字签名协议常常与单向散列函数一起使用。 Alice并不对整个文件签名,而是只对文件的散列值签名。
在下面的协议中,单向散列函数和数字签名算法是事先协商好的:
A. Alice产生文件的单向散列值。
B. Alice用她的私人密钥对散列加密,以此表示对文件的签名。
C. Alice将文件和散列签名送给 Bob。
D. Bob用 Alice发送的文件产生文件的单向散列值,同时用Alice的公钥对签名的散列解密。如果签名的散列值与自己产生的散列值匹配,签名是有效的。
如下图:
 
2 电子签名的实现方法
目前,可以通过多种技术手段实现电子签名,在确认了签署者的确切身份后,电子签名承认人们可以用多种不同的方法签署一份电子记录。方法有:基于PKI的公钥密码技术的数字签名;以生物特征统计学为基础的识别标识;手印、声音印记或视网膜扫描的识别;一个让收件人能识别发件人身份的密码代号、密码或个人识别码PIN;基于量子力学的计算机等等。但比较成熟的,使用方便具有可操作性的,在世界先进国家和我国普遍使用的电子签名技术还是基于PKI(PublicKeyInfrastructino)的数字签名技术。
 
(1) 手写签名或图章的模式识别
将手写签名或印章作为图象,用光扫描转换后在数据库中加以存储,当对此人进行验证时,用光扫描输入,并将原数据库中对应图象调出,用模式识别的数学计算方法,进行比对,以确认该签名或印章的真伪。这种方法曾经在银行会计柜台使用,由于需要大容量数据库存储以及每次手写签名和盖印的差异性,证明了这种方法不适用于互联网上传输。
 
(2) 生物识别技术
生物识别技术是利用人体生物特征进行身份认证的一种技术,生物特征是一个人与他人不同的唯一表徵,它是可以测量、自动识别和验证的。生物识别系统对生物特征进行取样,提取其唯一的特征进行数字化处理,转换成数字代码,并进一步将这些代码组成特征模板存于数据库中,人们同识别系统交互进行身份认证时,识别系统获取其特征并与数据库中的特征模板进行比对,以确定是否匹配,从而决定确定或否认此人。生物识别技术主要有以下几种:
 a:指纹识别技术。每个人的指纹皮肤纹路是唯一的,并且终身不变,通过将他的指纹和预先保存在数据库中的指纹采用指纹识别算法进行比对,便可验证他的真实身份。在身份识别的前提下,可以将纸质公文或数据电文按手印签名或放于IC卡中签名。这种签名需要大容量数据库支持,适于本地面对面处理,不适宜网上传输。
b:视网膜识别技术。视网膜识别技术利用激光照射眼球的背面,扫描摄取几百个视网膜的特征点,经数字化处理后形成记忆模板存储于数据库中,供以后的比对验证。视网膜是一种极其稳定的生物特征,作为身份认证是精确度较高的识别技术。但使用困难,不适用于直接数字签名和网络传输。
c:声音识别技术。声音识别技术是一种行为识别技术,用声音录入设备反复不断地测量、记录声音波形变化,进行频谱分析,经数字化处理之后作成声音模板加以存储。使用时将现场采集到的声音同登记过的声音模板进行精确的匹配,识别身份。这种技术精确度较差,使用困难,不适用于直接数字签名和网络传输。
以上身份识别方法适用于面对面场合,不适用远程网络认证及大规模人群认证。
 
(3) 密码、密码代号或个人识别码。
传统的对称密钥加/解密的身份识别和签名方法。甲方需要乙方签名一份电子文件,甲方可产生一个随机码传送给乙方,乙方用事先双方约定好的对称密钥加密该随机码和电子文件回送给甲方,甲方用同样对称密钥解密后得到电文并核对随机码,如随机码核对正确,甲方即可认为该电文来自乙方。适用远程网络传输,对称密钥管理困难,不适合大规模人群认证。
在对称密钥加/解密认证中,在实际应用方面经常采用的是ID+PIN(身份唯一标识+口令)。即发方用对称密钥加密ID和PIN发给收方,收方解密后与后台存放的ID和口令进行比对,达到认证的目的。人们在日常生活中使用的银行卡就是用的这种认证方法。适用远程网络传输,对称密钥管理困难,不适用于电子签名。
(4) 基于量子力学的计算机
量子计算机是以量子力学原理直接进行计算的计算机.使用一种新的量子密码的编码方法,即利用光子的相位特性编码。由于量子力学的随机性非常特殊,无论多么聪明的窃听者,在破译这种密码时都会留下痕迹,甚至在密码被窃听的同时会自动改变。可以说,这将是世界上最安全的密码认证和签名方法。但是,这种计算机还只是停留在理论研究阶段,离实际应用还很遥远。
(5) 基于PKI的电子签名
基于PKI(公钥基础设施)的电子签名被称作“数字签名”。有人称“电子签名”就是“数字签名”是错误的。数字签名只是电子签名的一种特定形式。因为电子签名虽然获得了技术中立性,但也带来使用的不便,法律上又对电子签名作了进一步规定,如上述联合国贸发会的《电子签名示范法》和欧盟的《电子签名共同框架指令》中就规定了“可靠电子签名”和“高级电子签名”。实际上就是规定了数字签名的功能,这种规定使数字签名获得了更好的应用安全性和可操作性。目前,具有实际意义的电子签名只有公钥密码理论。所以,目前国内外普遍使用的、技术成熟的、可实际使用的还是基于PKI的数字签名技术。作为公钥基础设施PKI可提供多种网上安全服务,如认证、数据保密性、数据完整性和不可否认性。其中都用到了数字签名技术。这也是本文叙述的重点。
 
3 数字签名的技术保障
按上述定义PKI提供可以提供数据单元的密码变换,并能使接收者判断数据来源及对数据进行验证。
 
PKI的核心执行机构是电子认证服务提供者,即通称为认证机构CA(Certificate Authority),PKI签名的核心元素是由CA签发的数字证书。它所提供的PKI服务就是认证、数据完整性、数据保密性和不可否认性。它的作法就是利用证书公钥和与之对应的私钥进行加/解密,并产生对数字电文的签名及验证签名。数字签名是利用公钥密码技术和其他密码算法生成一系列符号及代码组成电子密码进行签名,来代替书写签名和印章;这种电子式的签名还可进行技术验证,其验证的准确度对手工签名和图章的验证无法比拟的。这种签名方法可在很大的可信PKI域人群中进行认证,或在多个可信的PKI域中进行交叉认证,它特别适用于互联网和广域网上的安全认证和传输。
 
(1) 公钥密码技术原理
公开密钥密码理论是1976年美国发表的RSA算法,它是以三个发明人的名字命名的,后来又有椭圆算法ECC,但常用的、成熟的公钥算法是RSA。它与传统的对称密钥算法有本质的区别,对称密钥算法常用的是DES算法,加/解密时用的是同一个密钥。而公钥算法利用的是非对称的密钥,即利用两个足够大的质数与被加密原文相乘生产的积来加/解密。这两个质数无论是用哪一个与被加密的原文相乘(模乘),即对原文件加密,均可由另一个质数再相乘来进行解密。但是,若想用这个乘积来求出另一个质数,就要进行对大数分解质因子,分解一个大数的质因子是十分困难的,若选用的质数足够大,这种求解几乎是不可能的。因此,将这两个质数称密钥对,其中一个采用私密的安全介质保密存储起来,应不对任何外人泄露,简称为“私钥”;另一个密钥可以公开发表,用数字证书的方式发布在称之为“网上黄页”的目录服务器上,用LDAP协议进行查询,也可在网上请对方发送信息时主动将该公钥证书传送给对方,这个密钥称之为“公钥”。
公/私密钥对的用法是,当发方向收方通信时发方用收方的公钥对原文进行加密,收方收到发方的密文后,用自己的私钥进行解密,其中他人是无法解密的,因为他人不拥有自己的私钥,这就是用公钥加密,私钥解密用于通信;而用私钥加密文件公钥解密则是用于签名,即发方向收方签发文件时,发方用自己的私钥加密文件传送给收方,收方用发方的公钥进行解密。
  a:确认信息是由签名者发送的;
  b:确认信息自签名后到收到为止,未被修改过;
  c:签名者无法否认信息是由自己发送的。
数字签名的技术基础是公钥密码技术,下面就先介绍公钥密码技术的基本思想和RSA公钥密码系统。
(2)公钥密码技术
公钥密码技术又称为非对称/Jn密技术。与之相对的是对称加密技术。对称加密技术是发送方和接收方使用相同的密钥进行加密/解密,双方必须确保这个共同密钥的安全性。其基本过程可以用下图表示:
  其中加密变换使用的密钥和解密变换使用的密钥是完全相同的,此密钥必须以某种安全的方式告诉解密方。大家熟悉的DES加密标准就是一种对称加密技术。1976年,Diffie和Hellman在一篇名叫“New Direction in Cryptog raphy(密码学的新方向)”一文中提出了一个新的思想,即:不仅加密算法本身可以公开,就是加密用的密钥本身也可以公开。这就是公钥密码体制。其中使用的密钥被分解为一对:一把公钥和一把私钥。只要私钥保密就可以了,公钥可以发到因特网(如网站的黄页)等公开地方供别人查询和下载。
  建立在公钥密码技术上的数字签名方法有很多,有RSA签名、DSA签名和椭圆曲线数字签名算法(ECDSA)等等。下面对RSA签名进行详细分析。
  RSA签名的整个过程可以用下图表示:
  a:发送方采用某种摘要算法从报文中生成一个128位的散列值(称为报文摘要);
  b:发送方用RSA算法和自己的私钥对这个散列值进行加密,产生一个摘要密文,这就是发送方的数字签名;
  c:将这个加密后的数字签名作为报文的附件和报文一起发送给接收方:
  d:接收方从接收到的原始报文中采用相同的摘要算法计算出128位的散列值;
  e:报文的接收方用RSA算法和发送方的公钥对报文附加的数字签名进行解密;
  f:如果两个散列值相同,那么接收方就能确认报文是由发送方签名的。
  最常用的摘要算法叫做MD5(Message Digest 5),它的作者R.L.
  Rivest正是提出RSA公钥密码系统中的R。MD5采用单向Hash函数将任意长度的“字节串”变换成一个128位的散列值,并且它是一个不可逆的字符串变换算法,换言之,即使看到MD5的算法描述和实现它的源代码,也无法将一个MD5的散列值变换回原始的字符串。这一个128位的散列值亦称为数字指纹,就像人的指纹一样,它就成为验证报文身份的“指纹”了。
  数字签名是如何完成与手写签名类同的功能的呢?如果报文在网络传输过程中被修改,接收方收到此报文后,使用相同的摘要算法将计算出不同的报文摘要,这就保证了接收方可以判断报文自签名后到收到为止,是否被修改过。如果发送方A想让接收方误认为此报文是由发送方B签名发送的,由于发送方A不知道发送方B的私钥,所以接收方用发送方B的公钥对发送方A加密的报文摘要进行解密时,也将得出不同的报文摘要,这就保证了接收方可以判断报文是否是由指定的签名者发送。同时也可以看出,当两个散列值相同时,发送方B无法否认这个报文是他签名发送的。
  在上述签名方案中,报文是以明文方式发生的。所以不具备保密功能。如果报文包含不能泄漏的信息,就需要先进行加密,然后再进行传送。具有保密机制的RSA签名的整个过程如下图所示:
  a:发送方选择一个对称加密算法(比如DES)和一个对称密钥对报文进行加密;
  b:发送方用接收方的公钥和RSA算法对第1步中的对称密钥进行加密,并且将加密后的对称密钥附加在密文中;
  c:发送方使用一个摘要算法从第2步的密文中得到报文摘要,然后用RSA算法和发送方的私钥对此报文摘要进行加密,这就是发送方的数字签名;
  d:将第3步得到的数字签名封装在第2步的密文后,并通过网络发送给接收方;
  e:接收方使用RSA算法和发送方的公钥对收到的数字签名进行解密,得到一个报文摘要;
  f:接收方使用相同的摘要算法,从接收到的报文密文中计算出一个报文摘要;
  g:如果第5步和第6步的报文摘要是相同的,就可以确认密文没有被篡改,并且是由指定的发送方签名发送的;
  h:接收方使用RSA算法和接收方的私钥解密出对称密钥;
  i:接收方使用对称加密算法(比如DES)和对称密钥对密文解密,得到原始报文。
  但是,在实际应用操作中发出的文件签名并非是对原文本身进行加密,而是要对原文进行所谓的“哈希”(Hash)运算,即对原文作数字摘要。该密码算法也称单向散列运算,其运算结果称为哈希值,或称数字摘要,也有人将其称为“数字指纹”。哈希值有固定的长度,运算是不可逆的,不同的明文其哈希值是不同的,而同样的明文其哈希值是相同并且是唯一的,原文的任何改动,其哈希值就要发生变化。数字签名是用私钥对数字摘要进行加密,用公钥进行解密和验证。
公钥证书和私钥是用加密文件存放在证书介质中,证书是由认证服务机构CA所签发的权威电子文档,CA与数字证书等是公钥基础设施PKI的主要组成机构和元素。
 
(3) 什么是 PKI
工程学家对PKI是这样定义的:“PKI是一个用公钥概念与技术来实施和提供安全服务的普遍适用的安全基础设施。换句话说,PKI是一个利用非对称密码算法(即公开密钥算法)原理和技术实现的并提供网络安全服务的具有通用性的安全基础设施”。它遵循标准的公钥加密技术,为电子商务、电子政务、网上银行和网上证券业,提供一整套安全保证的基础平台。用户利用PKI基础平台所提供的安全服务,能在网上实现安全地通信。PKI这种遵循标准的密钥管理平台,能够为所有网上应用,透明地提供加解密和数字签名等安全服务所需要的密钥和证书管理。
还有一种是学者们对PKI的定义:“PKI是硬件、软件、策略和人组成的系统,当安全并正确地实施后,能够提供一整套的信息安全保障,这些保障对保护敏感的通信和交易是非常重要的”。换句话说,PKI是创建、颁发、管理和撤消公钥证书所涉及到的所有软件、硬件系统,以及所涉及到的整个过程安全策略规范、法律法规以及人员的集合。安全地、正确地运营这些系统和规范就能提供一整套的网上安全服务。
PKI的核心执行机构是认证机构CA,其核心元素是数字证书。
 
(4) 认证机构 CA Certificate Authority
认证机构CA是PKI的核心执行机构,是PKI的主要组成部分,一般简称为CA,在业界通常把它称为认证中心。它是一种权威性、可信任性和公正性的第三方机构。认证机构CA的建设要根据国家市场准入政策由国家主管部门批准,具有权威性;CA机构本身的建设应具备条件、采用的密码算法及技术保障是高度安全的,具有可信任性;CA是不参与交易双方利益的第三方机构,具有公正性。CA认证机构在《电子签名法》中被称作“电子认证服务提供者”。
 CA的组成主要有证书签发服务器,负责证书的签发和管理,包括证书归档、撤消和更新等等;密钥管理中心,用硬件加密机产生公/私密钥对,CA私钥不出卡,提供CA证书的签发;目录服务器负责证书和证书撤消列表(CRL)的发布和查询。
CA的组成如图一所示:它是一个层次结构,第一级是根CA(ROOT CA),负责总政策;第二级是政策CA(PCA),负责制定具体认证策略;第三级为操作CA(OCA),是证书签发、发布和管理的机构。
RA(Registration Authority)是认证中心的组成部分,是数字证书的申请注册、审批、校对和管理机构。证书申请注册机构RA也称为层次结构,RA为注册总中心,负责证书申请注册汇总;LRA为远程本地受理点,负责用户证书申请和审查,只有那些经过身份信用审查合格的用户,才可以接受证书的申请,批准向其签发证书,这是保障证书使用的安全基础。
 
(5) 数字证书
数字证书简称证书,是PKI的核心元素,由认证机构服务者签发,它是数字签名的技术基础保障;符合X。509标准,是网上实体身份的证明,证明某一实体的身份以及其公钥的合法性,及该实体与公钥二者之间的匹配关系,证书是公钥的载体,证书上的公钥唯一与实体身份相绑定。现行的PKI机制一般为双证书机制,即一个实体应具有两个证书,两个密钥对,一个是加密证书,一个是签名证书,加密证书原则上是不能用于签名的。
数字证书的原理
特点
安全性
 
唯一性
方便性
(1)    即时申请、即时开通、即时使用。
(2)    量身定制多种途径维护数字 证书,例如通过短信,安全问题等。
(3)    不需要使用者掌握任何数字证书相关知识,也能轻松掌握。
 
颁发过程
   信息的保密性
   交易者身份的确定性
   不可否认性
   不可修改性
授权机构
  
数字证书工作基本原理图
CA机构,又称为 证书授证(Certificate Authority)中心,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得***者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。由此可见,建设证书授权(CA)中心,是开拓和规范电子商务市场必不可少的一步。为保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国内、国际安全电子交易协议标准的电子商务安全证书。 工作原理
  数字 证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。在公开密钥密码体制中,常用的一种是RSA体制。其数学原理是将一个大数分解成两个质数的乘积,加密和解密用的是两个不同的密钥。即使已知明文、密文和加密密钥(公开密钥),想要推导出解密密钥(私密密钥),在计算上是不可能的。按现在的计算机技术水平,要破解目前采用的1024位RSA密钥,需要上千年的计算时间。公开密钥技术解决了密钥发布的管理问题,商户可以公开其公开密钥,而保留其私有密钥。购物者可以用人人皆知的公开密钥对发送的信息进行加密,安全地传送给商户,然后由商户用自己的私有密钥进行解密。
  用户也可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了 数字签名。采用数字签名,能够确认以下两点:
  保证信息是由签名者自己签名发送的,签名者不能否认或难以否认
  保证信息自签发后到收到为止未曾作过任何修改,签发的文件是真实文件。
证书在公钥体制中是密钥管理的媒介,不同的实体可通过证书来互相传递公钥,证书由权威性、可信任性和公正性的第三方机构签发。是权威性电子文档。证书的主要内容,按X.509标准规定其逻辑表达式为:
 CA《A》=CA﹛V,SN,AI,CA,UCA,A,UA,Ap,Ta﹜
其中:CA《A》---认证机构CA为用户A颁发的证书
CA﹛, , ,﹜---认证机构CA对花括弧内证书内容进行的数字签名
V---证书版本号
SN---证书序列号
AI---用于对证书进行签名的算法标识
CA---签发证书的CA机构的名字
UCA---签发证书的CA的惟一标识符
A---用户A的名字 UA---用户A的惟一标识
Ap---用户A的公钥 Ta---证书的有效期
从V到Ta是证书在标准域中的主要内容。
证书的这些内容主要用于身份认证、签名的验证和有效期的检查。CA签发证书时,要对上述内容进行签名,以示对所签发证书内容的完整性、准确性负责并证明该证书的合法性和有效性,将网上身份与证书绑定。CA对证书的签名如图三所示。
CA颁发的上述证书与对应的私钥存放在一个保密文件里,最好的办法是存放在IC卡和USBKey介质中,可以保证私钥不出卡,证书不能被拷贝、安全性高、携带方便、便于管理。这就是《电子签名法》中所说的“电子签名生成数据,属于电子签名人所有并由电子签名人控制….”。的具体作法。
4 数字签名的技术实现
对一个电子文件进行数字签名并在网上传输,其技术实现过程大致如下:首先要在网上进行身份认证,然后再进行签名,最后是对签名的验证。
认证。PKI提供的服务首先是认证,即身份识别与鉴别,确认实体即为自己所声明的实体。认证的前提是甲乙双方都具有第三方CA所签发的证书,认证分单向认证和双向认证。
单向认证是甲乙双方在网上通信时,甲只需要认证乙的身份即可。这时甲需要获取乙的证书,获取的方式有两种,一种是在通信时乙直接将证书传送给甲,另一种是甲向CA的目录服务器查询索取。甲获得乙的证书后,首先用CA的根证书公钥验证该证书的签名,验证通过说明该证书是第三方CA签发的有效证书。然后检查证书的有效期及检查该证书是否已被作废(LRC检查)而进入黑名单。
双向认证。双向认证是甲乙双方在网上通信时,甲不但要认证乙的身份,乙也要认证甲的身份。其认证过程与单向认证过程相同。如图所示。
甲乙双方在网上查询对方证书的有效性及黑名单时,是采用的LDAP协议(Light Directory Access Protocol)它是一种轻型目录访问协议。
 
数字签名与验证过程
网上通信的双方,在互相认证身份之后,即可发送签名的数据电文。数字签名的全过程分两大部分,即签名与验证。数字签名与验证的过程和技术实现的原理如图所示。
签名过程 I 验证过程
数字签名过程分两部分:左侧为签名,右侧为验证过程。即发方将原文用哈希算法求得数字摘要,用签名私钥对数字摘要加密得数字签名,发方将原文与数字签名一起发送给接受方;收方验证签名,即用发方公钥解密数字签名,得出数字摘要;收方将原文采用同样哈希算法又得一新的数字摘要,将两个数字摘要进行比较,如果二者匹配,说明经数字签名的电子文件传输成功。
 
(1) 数字签名的操作过程
数字签名的操作过程如图所示。需要有发方的签名证书的私钥及其验证公钥。
数字签名操作具体过程如下:首先是生成被签名的电子文件(《电子签名法》中称数据电文),然后对电子文件用哈希算法做数字摘要,再对数字摘要用签名私钥做非对称加密,即作数字签名;之后是将以上的签名和电子文件原文以及签名证书的公钥加在一起进行封装,形成签名结果发送给收方,待收方验证。
 
(2) 数字签名的验证过程
接收方收到发方的签名结果后进行签名验证。
接收方收到数字签名的结果,其中包括数字签名、电子原文和发方公钥,即待验证的数据。接收方进行签名验证。验证过程是:接收方首先用发方公钥解密数字签名,导出数字摘要,并对电子文件原文作同样哈希算法得一个新的数字摘要,将两个摘要的哈希值进行结果比较,相同签名得到验证,否则无效。这就作到了《电子签名法》中所要求的对签名不能改动,对签署的内容和形式也不能改动的要求。
(3) 数字签名的作用
如果接收方对发方数字签名验证成功,就可以说明以下三个实质性的问题:
 该电子文件确实是由签名者的发方所发出的,电子文件来源于该发送者。因为,签署时电子签名数据由电子签名人所控制;
被签名的电子文件确实是经发方签名后发送的,说明发方用了自己的私钥作的签名,并得到验证,达到不可否认的目的;
接收方收到的电子文件在传输中没有被篡改,保持了数据的完整性,因为,签署后对电子签名的任何改动都能够被发现。
以上三点就是对《电子签名法》中所规定的“安全的电子签名具有与手写签名或者盖章同等的效力”的具体体现。
(4)数字签名的应用例子
例一
现在Alice向Bob传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对要传送的信息进行数字加密和数字签名,其传送过程如下:
A. Alice准备好要传送的数字信息(明文)。
B. Alice对数字信息进行哈希(hash)运算,得到一个信息摘要。
C. Alice用自己的私钥(SK)对信息摘要进行加密得到Alice的数字签名,并将其附在数字信息上。
D. Alice随机产生一个加密密钥(DES密钥),并用此密钥对要发送的信息进行加密,形成密文。
E. Alice用Bob的公钥(PK)对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给Bob。
F. Bob收到Alice传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。
G. Bob然后用DES密钥对收到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。
H. Bob用Alice的公钥(PK)对Alice的数字签名进行解密,得到信息摘要。
I. Bob用相同的hash算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。
J. Bob将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
 
例二
A给 B发送信息,A会将信息用A的密码进行加密,然后将加密后的字符串和原文一起发给B,然后B用B的密码进行解密,然后判断解密后的字符串和A发过来的原文比对是否一致,关键问题在于,
 A和密码和 B的密码不一样,这个才是数字签名的精华,A的密码就是私钥,B的密码就是公钥
具体步骤:
生成一个私钥和公钥, A就用私钥进行加密,因为A的私钥只有A自己有,所以加密后的字符串就是A的签名字符串,然后A将这个签名的字符串和原文发给B,
B获取加密的字符串用公钥进行解密,然后判断解密后的字符串和原文是否一致,一致说明是 A签名的,否则就不是A签名的
如果看的还有点迷糊,那么看完下面的例子,在去看上面的文字,估计就明白了
例如 :私钥为S1,公钥为:G1 A的原文是:123 那么这个流程就是
S1+123 加密生成一个 A签名的字符串:AXXXX
A将AXXXX和123一起发给B,B用G1将AXXXX进行解密,判断解密后的字符串是否等于123
相信原理大家都明白了吧。。。明白原理了就好,。呵呵。。。其他的不说了,上代码。。。代码是学习别人的。。已经过测试。
aspx代码:
<form id="form1" runat="server">    随机生成密钥: <asp:Button ID="btncreateMY" runat="server" Text="随机生成密钥" OnClick="btncreateMY_Click" /><br />   公钥:<asp:TextBox ID="tbxcreateMY_publicKey" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="711px"></asp:TextBox><br />   私钥:<asp:TextBox ID="tbxcreateMY_key" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="710px"></asp:TextBox><br /><hr />   <br />   生成签名:<br />   原文:&nbsp;   <asp:TextBox ID="tbxContent" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox>&nbsp;<br />   私钥:   <asp:TextBox ID="tbxKey" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br />   签名:   <asp:TextBox ID="tbxSign" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="711px"></asp:TextBox>   <br />   <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="生成签名" />   <br />   <br /><hr />   <br />   验证签名:<br />   原文:<asp:TextBox ID="tbxContentYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br />   公钥:<asp:TextBox ID="tbxPublickeyYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br />   签名:<asp:TextBox ID="tbxSignYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox>   <br />   <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="验证签名" /></form>
.CS代码
 /// <summary>         /// 生成签名         /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void Button1_Click(object sender, EventArgs e)        {            DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider();            objdsa.FromXmlString(tbxKey.Text);            byte[] source = System.Text.UTF8Encoding.UTF8.GetBytes(tbxContent.Text);            //数字签名            tbxSign.Text = BitConverter.ToString(objdsa.SignData(source));        }        /// <summary>        /// 随机生成密钥        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void btncreateMY_Click(object sender, EventArgs e)        {            DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider();            tbxcreateMY_publicKey.Text = objdsa.ToXmlString(false);            tbxcreateMY_key.Text = objdsa.ToXmlString(true);        }        /// <summary>        /// 验证签名        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        protected void Button3_Click(object sender, EventArgs e)        {            DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider();            byte[] fileHashValue = http://www.cnblogs.com/AK2012/archive/2012/06/06/new SHA1CryptoServiceProvider().ComputeHash(System.Text.UTF8Encoding.UTF8.GetBytes(tbxContentYZ.Text));            string[] strSplit = tbxSignYZ.Text.Split('-');            byte[] SignedHash = new byte[strSplit.Length];            for (int i = 0; i < strSplit.Length; i++)                SignedHash[i] = byte.Parse(strSplit[i], System.Globalization.NumberStyles.AllowHexSpecifier);            objdsa.FromXmlString(tbxPublickeyYZ.Text);            bool ret = objdsa.VerifySignature(fileHashValue, SignedHash);            Response.Write(ret.ToString());           // Qcd.Core.Web.Messages.ShowDialog(ret.ToString());        }
 
5 原文保密的数字签名的实现方法。
在上述数字签名原理中定义的是对原文作数字摘要和签名并传输原文,在很多场合传输的原文是要求保密的,要求对原文进行加密的数字签名方法如何实现?这里就要涉及到“数字信封”的概念。请参照图八的签名过程。
数字签名签名验证
基本原理是将原文用对称密钥加密传输,而将对称密钥用收方公钥加密发送给对方。收方收到电子信封,用自己的私钥解密信封,取出对称密钥解密得原文。其详细过程如下:
(1) 发方A将原文信息进行哈希(hash)运算,得一哈希值即数字摘要MD;
(2) 发方A用自己的私钥PVA,采用非对称RSA算法,对数字摘要MD进行加密,即得数字签名DS;
(3) 发方A用对称算法DES的对称密钥SK对原文信息、数字签名SD及发方A证书的公钥PBA采用对称算法加密,得加密信息E;
(4) 发方用收方B的公钥PBB,采用RSA算法对对称密钥SK加密,形成数字信封DE,就好像将对称密钥SK装到了一个用收方公钥加密的信封里;
(5) 发方A将加密信息E和数字信封DE一起发送给收方B;
(6) 收方B接受到数字信封DE后,首先用自己的私钥PVB解密数字信封,取出对称密钥SK;
(7) 收方B用对称密钥SK通过DES算法解密加密信息E,还原出原文信息、数字签名SD及发方A证书的公钥PBA;
(8) 收方B验证数字签名,先用发方A的公钥解密数字签名得数字摘要MD;
(9) 收方B同时将原文信息用同样的哈希运算,求得一个新的数字摘要MD`;
(10)将两个数字摘要MD和MD`进行比较,验证原文是否被修改。如果二者相等,说明数据没有被篡改,是保密传输的,签名是真实的;否则拒绝该签名。
这样就作到了敏感信息在数字签名的传输中不被篡改,未经认证和授权的人,看不见原数据,起到了在数字签名传输中对敏感数据的保密作用。
 
二、数字签名的分类
•         当前,数字签名应具有的性质
( 1)收方能确认或证实发方的签字,但不能伪造;
( 2)发方发出签名后的消息,就不能否认所签消息;
( 3)收方对已收到的消息不能否认;
( 4)第三者可以确认收发双方之间的消息传送,但不能伪造这一过程;
( 5)必须能够验证签名者及其签名的日期时间;
( 6)必须能够认证被签名消息的内容;
( 7)签名必须能够由第三方验证,以解决争议。
按数字签名的所依赖的理论基础分,主要可以分为:
       ( 1)基于大数分解难题的数字签名,如7.3节及7.6节介绍的例子;
      ( 2)基于离散对数的数字签名,如7.4节介绍的DSA;
      ( 3)基于椭圆曲线离散对数的数字签名,这类签名往往由基于离散对数的数字签名改进而来。
         近年来,随着密码理论的发展,人们也提出了基于双线性对的数字签名等。
从数字签名的用途分,可以把数字签名分为普通的数字签名和特殊用途的数字签名。
        普通的数字签名往往可以和身份认证相互转换
        特殊用途的数字签名,如盲签名、代理签名、群签名、门限签名等,多是在某些特殊的场合下使用。
        盲签名通常用于需要匿名的小额电子现金的支付,代理签名可以用于委托别人在自己无法签名的时候(如外出旅游)代替签名等。
1 、数字签名算法
在本节中,我们介绍比较经典的数字签名算法 :
        一个是 RSA签名算法
        一个是 ElGamal签名算法
        RSA签名算法提出的时间比较早,并且一直到现在,以其为基础的应用都还在使用。
        而 ElGamal签名算法的变型算法之一,就是后来的数字签名算法(DSA)。
 
RSA 数字签名
(1)RSA数字签名描述
在 RSA加密算法中,假如用户Bob的参数选取简单写为n=pq,de≡1modφ(n),则{e, n}为公开密钥,{d, n}为秘密密钥。对于一个秘密密钥{d, n},在满足de≡1modφ(n)的条件下,只有唯一的{e, n}与之对应。如同在介绍RSA加密算法时所提及的那样,一个用户的公钥会在较长时间内保持不变,故我们可以说,在一定时间内,{e, n}表示了秘密密钥{d, n}的持有者的身份。
 如果秘密密钥 {d, n}的持有者Bob声明某个信息m并放于公共媒介如网络之上, 那么其他人如何确定这个消息就是他发布的原信息而没有被其他人更改过呢?也就是如何确定消息的完整性呢?
我们可以通过下面这种方式达到目的。
让消息发布者 Bob先计算s≡md mod n,然后把s附于消息m之后,一起放到公共媒介上。因为大家都知道{e, n}唯一代表了消息发布者Bob的身份,故可以通过计算m≡se mod n成立与否,来判定消息是不是Bob所发,以及消息是否被篡改。
        因为 Bob是秘密密钥{d, n}的唯一持有者,只有他才能通过s≡md mod n计算出s的值来。其他人如果想算出s的值,他必须要能破解大数分解问题才行。
 
参数选择
         ① 选择两个满足需要的大素数 p和q,计算n=p×q, φ(n)= (p-1)×(q-1),其中φ(n)是n的欧拉函数值。
         ② 选一个整数 e, 满足1<e<φ(n),且gcd(φ(n),e)=1。通过d×e≡1modφ(n),计算出d。
         ③ 以 {e,n}为公开密钥,{d,n}为秘密密钥。
( 2)签名过程
        假设签名者为 Bob,则只有Bob知道秘密密钥{d, n}。
        设需要签名的消息为 m,则签名者Bob通过如下计算对m签名:s≡md mod n
      ( m, s)为对消息m的签名。Bob在公共媒体上宣称他发布了消息m,同时把对m的签名s置于消息后用于公众验证签名。
 
验证过程
     公众在看到消息 m和对其签名s后,利用Bob的公开验证密钥{e, n}对消息进行验证。
     公众计算: m≡se mod n是否成立,若成立,则Bob的签名有效。
      公众认为消息 m的确是Bob所发布,且消息内容没有被篡改。
     也就是说,公众可以容易鉴别发布人发布的消息的完整性。
对上述 RSA签名算法的一个***
前面所描述的 RSA签名算法是有缺陷的。
     假设***者 Eve在得到Bob的两次对消息的签名后,很容易实现伪造。若已知:
      ( 1)Bob对消息M1的签名为S1,即S1≡M1d mod n;
      ( 2)Bob对消息M2的签名为S2,即S2≡M2d mod n;
        则***者 Eve可以构造消息M3=M1*M2的签名S3,S3= M3d=(M1*M2)dmodn≡S2*S1
        虽然说在已知 M1、M2的情况下,M3往往只是一个数值,一般来说是没有意义的,但不排除有意义的可能性,故导致了算法的不安全。
 
对上述RSA签名算法的改进
假设公开的安全哈希函数为 H(·),参数选择如前,其签名过程和验证过程如下:
      ( 1)签名过程
        设需要签名的消息为 m,签名者Bob通过如下计算对其签名:
                  s≡ H(m)d mod n
               ( m, s)为对消息m的签名。
      ( 2)验证过程
        在收到消息 m和签名s后,验证H(m)≡se mod n 是否成立,若成立,则发送方的签名有效。
数字签名的步骤 (数字签名与验证过程)
第一步:将消息按散列算法计算得到一个固定   
                位数的消息摘要值。
在数学上保证:只要改动消息的任何一位,重新计算出的消息摘要就会与原先值不符。这样就保证了消息的不可更改。
第二步:对消息摘要值用发送者的私有密钥加密,所产生的密文即称数字签名。然后该数字签名同原消息一起发送给接收者。
第三步:接收方收到消息和数字签名后,用同样的散列算法对消息计算摘要值,然后与用发送者的公开密钥对数字签名进行解密,将解密后的结果与计算的摘要值相比较。如相等则说明报文确实来自发送者。
数字签名与验证过程图示

  
摘要
数字签名
  
数字签名
  
摘要
数字签名
摘要
发送方
接收方
当 M3=M1*M2时,H(M3)= H(M1)* H(M2)一般不成立,有效的防止了这类***方法。
可以看到,通过使用哈希函数,有效防止了对签名的伪造,增强了签名算法的安全性,这也是在很多签名算法中使用哈希函数的原因之一。
 
2 、ElGamal数字签名
ElGamal签名算法也是基于离散对数难题的,于 1985年提出,其变型之一成为美国国家标准技术研究所(National Institute of Standards and Technology,简称NIST)提出的DSA(digital signature Algorithm)算法的基础。
3 、对于ElGamal签名算法的理解,需注意:
( 1)这个方案还是存在一定的不足。比如,对于消息没有用哈希函数进行处理,签名容易被伪造。
( 2)签名时所使用的随机值k不能泄露,否则***者可以计算出签名的私钥。通过变换δ≡(m-xγ)k-1mod(p-1),可知x≡(m-kδ) γ-1 mod(p-1)。
( 3)对于两个不同的消息签名时,不要使用相同的k,否则容易求得k的值,从而知道签名者的私钥。
    通过对上面两个算法的学习,我们可以看到,数字签名的一个重要作用,就是保证了被签名文档的完整性。
    一旦被签名的文档内容发生了改变,则通不过验证,从而防止了文档被篡改和伪造;而且,签名是与文档内容紧密联系的,这样,对一个文档的签名,如果复制到另外一个文档上,就通不过验证,使得签名对该文档无效。
 
三、数字签名标准(DSS)
1991年 8月,NIST提出将数字签名算法(DSA,Digital Signature Algorithm)用于数字签名标准(DSS,Digital Signature Standard)中。
        由于 RSA算法及签名的广泛使用等各种原因,使得DSS的出现引起了很多的争议。1994年,在考虑了公众的建议后,该标准最终颁布。
 
1 、DSA的描述
DSA的安全性是基于求解离散对数困难性的基础之上的,并使用了安全散列算法。它也是 Schnorr和ElGamal签名算法的变型。
 
算法的参数
p是 L比特长的素数,L的长度为512到1024且是64的倍数。
        q是 160比特长且为p-1的素因子。g≡h(p-1)/q mod p, 其中h, g是整数,1<h<p-1, 且要求g大于1。
        x是签名者的私钥,由签名者选取的随机数,要求是小于 q的正整数;
        y≡ gx mod p为签名者的公钥。选择安全散列算法H( ),标准中指定为SHA。
      签名者公开 (p, q, g, y)及安全散列算法H( ),保密x。
对于 DSA算法,人们有一些批评意见,比如认为验证比签名快,q的长度160比特太短,不能用于加密和分配密钥等。
 另外,由于 DSA算法是ElGamal签名算法的变型,故所有对ElGamal签名算法的***,也可以用于对DSA算法的***。不过就已有的***来看,DSA算法还是安全的。
   与 RSA数字签名算法比较,DSA在管理上有一个优点:对于RSA数字签名算法,每个用户都要有不同的公钥,故针对每个用户,都要去产生大的素数p和q, 去计算d;而对于DSA算法,管理机构只需要计算一次p,g,q(通常又叫全局公开钥),每个用户只需要选择私钥x, 然后计算公钥y(通常又叫用户公钥)。为什么?
 
DSA举例
对于 DSA签名算法的举例,如果在例子中采用了对消息进行消息摘要值的计算H(m),大数的运算容易让初学者望而生畏,我们在这里采用小的整数代替H(m)。
      如果读者关心在算法中使用了消息摘要的例子,可以参看 DSA的标准fips-186. 标准中提到了用Miller Rabin素性检测算法产生素数,用ANSI X9.17产生随机数,以及其他参数的选取等。
假设 q=101,p=78*101+1=7879,h=19,
         则 g=1978 mod 7879≡367
         取 x=69,则y≡gx mod p=36769 mod 7879≡1292。
        假设想签名的消息为 m=3456, 且选择的随机值为k=27,可以计算k-1≡15mod101。
       故可以算出签名为 r≡(gk mod p)mod q=(36727 mod 7879)mod 101≡6797 mod 101≡30
       s≡ (k-1(m+xr)) mod q=(15(3456+69×30)) mod1 01≡70
      可以得到对 m的签名为(30, 70)。
验证签名:
       w≡ s-1 mod q=70-1 mod 101≡13
       u1≡ mw mod q=3456×13 mod 101≡84
       u2≡ rw mod q=30×13 mod 101≡87
 v≡ ((gu1yu2mod p)mod q=(36784129287 mod 7879) mod 101≡(2456×1687 mod7879) mod 101≡6797 mod 101≡30
      v=r,因此签名是有效的
注:可以看到,签名和验证过程中的运算量是很大的,其中最主要的运算集中在模幂运算上,而且上面的举例中,素数的取值也是比较小的,这些运算可以通过简单编程实现。如果是按标准中的取值,模幂运算及大数的处理对初学者来说还是有挑战性的。
 
2 、其他专用数字签名方案
针对实际应用中大量特殊场合的签名需要,数字签名领域也转向了针对特殊签名的广泛研究阶段。
 
(1)盲签名
        用户需要让签名者对明文消息文件进行数字签名,而又不希望签名者知晓明文消息文件的具体内容,这就需要盲数字签名,简称盲签名 (Blind Signature) 。盲签名是一种特殊的数字签名方法,相对于一般的数字签名而言还应当具有下列2个特性:
       ① 盲性:所签消息的内容对签名人是盲的,即签名人签名时不能看见消息的具体内容;
       ② 不可追踪性:即使在盲签名公开后,签名者仍然不能跟踪消息 -签名对,即不能把签名和其在签名时的看到的信息联系起来。
      盲签名主要用于基于 Internet的匿名金融交易,如匿名电子现金支付系统、匿名电子拍卖系统等应用中。
(2)门限签名:
在有 n个成员的群体中,至少有t个成员才能代表群体对文件进行有效的数字签名。门限签名通过共享密钥方法实现,它将密钥分为n份,只有当将超过t份的子密钥组合在一起时才能重构出密钥。门限签名在密钥托管技术中得到了很好的应用,某人的私钥由政府的n个部门托管, 当其中超过t个部门决定对其实行监听时,便可重构密钥,实现监听。
(3)代理签名
        1996 年, Mambo、Usuda 和Okamoto提出了代理签名的概念。代理签名允许密钥持有者授权给第三方,获得授权的第三方能够代表签名持有者进行数字签名。
       代理签名相当于一个人把自己的印章托付给自己信赖的人,让他代替自己行使权力。由于代理签名在实际应用中起着重要作用,所以代理签名一提出便受到关注,被广泛研究。
(4)群签名
        允许一个群体中的成员以整个群体的名义进行数字签名,并且验证者能够确认签名者的身份。
        一个好的群签名方案应满足以下的安全性要求:
       ① 匿名性,给定一个群签名后,对除了唯一的群管理人之外的任何人来说,确定签名人的身份在计算上是不可行的;
       ② 不关联性,在不打开签名的情况下,确定两个不同的签名是否为同一个群成员所做在计算上是困难的;
       ③ 防伪造性,只有群成员才能产生有效的群签名;
       ④ 可跟踪性,群管理人在必要时可以打开一个签名以确定出签名人的身份,而且签名人不能阻止一个合法签名的打开;
⑤ 防陷害***,包括群管理人在内的任何人都不能以其他群成员的名义产生合法的群签名;
       ⑥ 抗联合***,即使一些群成员串通在一起也不能产生一个合法的不能被跟踪的群签名。
        在 D.Chaum和E.van Heyst提出群数字签名的定义,并给出了四个实现方案后,由于群签名的实用性,人们对群签名加以了更加广泛的研究。提出了分级多群签名、群盲签名、多群签名、满足门限性质的群签名、前向安全的群签名等。
3 、前向安全的数字签名方案
       普通数字签名具有如下局限性:若签名者的密钥被泄漏,那么这个签名者所有的签名 (过去的和将来的)都有可能泄漏,前向安全的数字签名方案主要思想是当前密钥的泄露并不影响以前时间段签名的安全性。
         在提出以上这些签名之后,研究者们根据不同的需要,又给出了一些综合以上性质的签名,如前向安全的群签名、盲代理签名、代理门限签名、代理多重签名、公平盲签名等。
 
4 、基于整数分解难题的盲签名
RSA 盲数字签名描述
1 .(1)参数选择
       ① 选择两个满足需要的大素数 p和q,计算n=p×q,φ(n)= (p-1)×(q-1),其中φ(n)是n的欧拉函数值。
       ② 选一个整数 e, 满足1<e<φ(n),且gcd(φ(n),e)=1。通过d×e≡1modφ(n),计算出d。
       ③ 以 {e, n}为公开密钥,{d, n}为秘密密钥。选择安全的单向hash函数h(·)。
        仍然把 Bob作为签名者,则Bob知道秘密密钥{d, n};所有人都知道公开密钥{e, n}和算法中选择的hash函数h(·).
( 2)盲化过程
       设需要签名的消息为 m,请求签名者Alice随机选择一个整数r作为盲化因子,然后进行如下计算:α≡ re·h(m) mod n,然后发送α给签名者 Bob。
( 3)签名过程
        Bob在收到α后,计算 t≡αdmod n ,然后把t发送给Alice。
( 4)脱盲过程
       Alice接收到 t后,计算s≡t·r-1mod n. 就得到了消息m 的签名(m, s)。
( 5)验证过程
       通过如下计算,任何人都可以验证签名的有效性: se≡h(m) mod n是否成立,若成立,则发送方的签名有效。
为便于理解,我们可以通过下面的方式来展示,形如 R(e,n,m)表示R知道的数据为(e,n,m)。
 
 
         下面来体会一下这个签名方案为什么叫做盲签名方案。
签名者看到的信息是α,根据α , e, n,签名者显然不能计算出h(m)来,因为还有一个变量r(盲化因子),即所签消息的内容对签名人是盲的,即签名人Bob签名时不能看见消息的具体内容;
       在 Alice得到Bob的签名后,Bob即使看到了自己的签名(m, s), 仍然不能把它与签名时的α联系起来,即盲签名的第二个性质,不可追踪性。
 
5 、基于离散对数难题的盲签名
基于离散对数难题的盲签名出现的时间相对比较晚。
    1994年, J.Camenisch在DSA和Nyberg-Rueppel方案的基础上,各提出了一个盲签名方案。
    后来,随着研究进展,出现了强盲签名和弱盲签名的分化,再后来出现了跟其他签名结合的签名方案,如盲代理签名,盲群签名等。
         下面选择 Schnorr盲签名算法来学习基于离散对数难题的盲签名。
可以看到,在该算法中,同样满足盲签名的两个特征,即签名者在签名时不知道所签消息的内容,事后即使看到了签名 (m, c, s),也不能把它与签名时收到的消息v联系起来,从而实现了盲签名。
 
6 、不可否认签名方案
1989年 Chaum和Antwerpen提出了不可否认签名方案。其实质是在没有签名者合作时不可能验证签名,从而可防止复制或散布签名消息。显然,这一签名方案的目的是阻止签名文件的随便复制、任意散布。这在电子出版物的知识产权保护方面具有相当的应用前景。
( 1)不可否认签名的基本原理
下面先举一个例子,比如向别人借钱,必须在借条上签字。也许有一天,提前向你索要钱款,或者与对方发生了矛盾,为此防止你的借条到处散布,并验证给人们看,确实证明你向别人借了钱,使你受到了巨大的伤害或损失。这不是你希望发生的。所以希望借条必须有其他人的合作才能验证。
        如果是没有签名的借条(就不能验证),等于一张废纸,因而没有人会相信展示的借条,你的设想确实达到了他的目的;但是也会担心任何时候对方都不合作,即使在法官面前也不合作,从而就没有办法验证借条的真实性,这样就不能讨回借款了。
这样一队矛盾怎样才能解决呢?不可否认签名就借用了法律的原理来实现这一目标。如果从法律的角度来分析问题:
( 1)如果拒绝合作,则认为提供的是事实;
( 2)如果用虚假方法验证,算法可以实现的行为,也判定提供的是事实;
( 3)如果提供的借条是伪造的,则也可以发现并证明,从而否认提供的借条。
       由此可知,不可否认签名主要由三个部分组成:签名算法、验证算法和不可否认算法。下面给出 Chaum-Antwerpen不可否认签名算法。
( 2)不可否认签名算法
   ◇ 算法描述
   ◇验证原理及不可否认原理
所以,一致性检验不但可以检查签名者的非法验证行为,还可以证明其验证行为的真实性,因而它可以检查出伪造的签名。
 
7 、防失败签名方案
防失败签名是一种强化安全性的数字签名,即使***者分析到用户的密钥,也难以伪造该用户的签名,而签名方对自己的签名也是难以抵赖的。下面介绍由 Van Heyst和Pederson提出的防失败签名方案。
 
四、数字签名的应用
1 、数字签名在电子商务中的应用
  下面用一个使用SET协议的例子来说明数字签名在电子商务中的作用。SET协议(Secure Electronic Transaction,安全电子交易)是由VISA和MasterCard两大信用卡公司于1997年联合推出的规范。
  SET主要针对用户、商家和银行之间通过信用卡支付的电子交易类型而设计的,所以在下例中会出现三方:用户、网站和银行。对应的就有六把“钥匙”:用户公钥、用户私钥;网站公钥、网站私钥;银行公钥、银行私钥。
  这个三方电子交易的流程如下:
  (1)用户将购物清单和用户银行账号和密码进行数字签名提交给网站:
  用户账号明文包括用户的银行账号和密码。
  (2)网站签名认证收到的购物清单:
  (3)网站将网站申请密文和用户账号密文进行数字签名提交给银行:
  网站申请明文包括购物清单款项统计、网站账户和用户需付金额。
  (4)银行签名认证收到的相应明文:
  从上面的交易过程可知,这个电子商务具有以下几个特点:
  (1)网站无法得知用户的银行账号和密码,只有银行可以看到用户的银行账号和密码;
  (2)银行无法从其他地方得到用户的银行账号和密码的密文;
  (3)由于数字签名技术的使用,从用户到网站到银行的数据,每一个发送端都无法否认;
  (4)由于数字签名技术的使用,从用户到网站到银行的数据,均可保证未被篡改。
  可见,这种方式已基本解决电子商务中三方进行安全交易的要求,即便有“四方”、“五方”等更多方交易,也可以按SET 议类推完成。
  6 结语
  数字签名还需要相关法律条文的支持,所以需要引起立法机构对数字签名技术的重视,加快立法脚步,制定相关法律,为数字签名技术提供法律上的支持。
 
2 、盲签名的应用
著名密码学家 David Chaum 1982 年首次提出了利用盲签字实现电子现金的方法,DigiCash 是Divid Chaum 发起的提供电子支付系统的专业公司,eCashTM是DigiCash开发的用软件实现的第一个完全匿名的在线电子现金系统, 它的基本算法是RSA 盲签名算法。
       1995 年 Mark Twain 银行就开始发行Internet 网上电子现金。
        一个电子现金支付系统通常包括三个参与方:银行,电子现金支付者,电子现金接收者。
       在电子货币支付时,电子现金支付者从银行取出他的电子货币,然后将电子货币支付给接收者,接收者将收到的电子货币存入银行。其关系可以用下页图表示,其中箭头方向表示了电子货币的流向。
 
(1)eCashTM系统相关的参数
设银行的签名公钥为 e, 支付公钥PK bank , 秘密钥为d, 模为n, 采用安全单向函数为h( . ). h ( . ) 的使用使伪造电子现金的变得不可行
       银行的公开信息是 {e, n, h(.)}, 支付公钥PK bank ;
       秘密信息是 {d, p, q, n=p*q}, p, q 是安全素数,使得分解大整数n是困难的。
       系统假设用户 Alice已经在银行里存了一笔钱在账户NA上以备提取。
 
(2)电子现金提取协议
        这里使用的是一个单位面值的电子现金,即对给定消息 m,约定h(m)的e次根,即d次幂值为一个单位面值。
        用户提取电子现金的协议如下:
      ( 1)Alice选取随机数r,serial#,计算b≡ re *h(serial#)modn,发送b, 账号NA和身份IDA给银行。其中serial#表示选取的电子现金的面值,这里仅指一个单位面值;
       ( 2)银行验证身份IDA的合法性,若合法,计算B≡bdmodn,在用户账户上减掉一个单位面值的电子现金,发送B给Alice;
        ( 3)Alice计算S≡B/r mod n。
        于是用户 Alice获得了银行发行一个的单位面值的电子现金Coin={ serial#,S}。
        在这里使用了盲签名技术,实现了用户 Alice的电子现金的不可追踪性。
(3)支付协议
任何人如果知道某个没有花费的 Coin, 就可使用。
        用户支付 Coin时, 不能让接收者看到Coin. eCashTM 为了保证这点, 银行使用了一个用来完成支付的公钥PK bank , 用户支付时用PK bank对Coin加密,保证了只有电子现金拥有者在申请后和银行在电子现金拥有者完成支付时才能看到它。
        假定电子现金支付者和接收者商定了支付银行 bankID、支付金额amount、币种currency、电子现金个数nCoins、时戳timestamp、接收者身份merchant_Ids与其银行帐户对应、交易描述description以备将来解决支付者和接收者的可能争议,支付者的秘密随机数payer_code也用来解决支付者和接收者的可能争议。
Payment_inf={bank ID, amount, currency, nCoins, timestamp, merchant- Ids, h(description), h (payer_code) }
        在支付过程中,银行不能知道 description的信息,只能知道description的hash值。
        具体支付协议如下:
       ( 1)电子现金支付者计算
         payment={payment_inf, {nCoins, merchant_Ids}PKbank}
        发送 payment到电子现金接收者。其中{nCoins,merchant_Ids}PKbank表示用PKbank加密{nCoins,merchant_Ids}。
       ( 2)电子现金接收者验证payment_inf,发送payment给银行;
       ( 3)银行验证{nCoins,merchant_Ids }PKbank确信Coins没有重复花费,把nCoins列入已花费的coins, 给merchant_Ids账户上加上一定金额,否则支付失败。
 
3 、数字签名认证系统在网上办税业务中的应用
国内税务行业现行的网上办税平台,基本已经成功应用若干年,众多的企业和商家通过电子化税务平台进行办税业务,极大提高了征纳双方的工作效率,深受广大纳税人及税务干部的好评。
由于互联网络应用的不断成熟,信息安全问题在各类业务系统中日益突出,很多电子化税务系统都存在一定的隐患和风险。随着系统的深入推广,用户数的不断膨胀,这些问题显得格外突出,大体来说主要有两类问题:
  1)网络安全性问题
  多数网上办税系统采用 B/S模式,用户认证机制采用用户名/密码机制,任何一个纳税人在全世界任何一台可以上互联网的主机上都可以访问到这套系统。采用传统的用户名/密码校验机制,系统受到非法用户侵入的概率是极大的,同时,由于广大纳税人的计算机使用水平普遍不高,网络安全意识很低,绝大多数纳税人网上办税的初始密码从未修改。
   2)纸质报表的事后报送问题
  由于纳税人通过网上办税系统向税务机关提交的电子申报数据没有法律效力,只有加盖企业公章的纸质申报表才能作为法律凭证。因此,纳税人在向税务机关提交电子数据并申报成功后,纳税人仍然需要打印纸质申报表并加盖企业公章后送至税务机关。税务干部在接收到纳税人的纸质申报表后需要核对其数据是否与电子数据一致。税务干部一旦疏忽,将不一致的纸质申报表接收下来,将带来极大的隐患。同时,数据核对工作的工作量巨大,也降低了税务干部的工作效率。
4 、签名认证机制在网上办税业务中的可行性
  基于公开密钥算法的数字签名技术和加密技术,为解决上述问题提供了理论依据和技术可行性 ;同时,《×××电子签名法》的颁布和实施为数字签名的使用提供了法律依据,使得数字签名与传统的手工签字和盖章具有了同等的法律效力。
  数字证书由权威公正的 CA中心签发,是网络用户的×××明。使用数字证书,结合数字签名、数字信封等密码技术,可以实现对财税部门和网上报税企业双方面的身份认证,保障通过网络传送信息的真实性、完整性、保密性和不可否认性。
  为了更给准确的说明数字签名认证系统的应用,以时代亿信的数字签名认证系统为例,详细介绍数字签名在办税业务中的应用。通常,一套数字签名认证系统应该由浏览器签名控件、签名认证服务器、基于 WEB的签名验证管理系统三部分组成。
   1)浏览器签名控件
  客户端浏览器签名控件采用 ActiveX控件形式(如图所示),在第一次使用系统时自动下载安装。如果自动下载安装失败,则可以手工下载安装客户端控件程序。
客户端签名控件以浏览器插件形式自动调用,也可以脚本方式调用,主要完成以下功能:
  登录认证请求的签名
  对网页中的表单 (Form)数据项进行签名
  对网页中上传的数据文件内容进行签名
  对从服务器下载的数据文件的签名进行验证
   2)签名认证服务器及认证的业务流程
  签名认证服务器与 EJB服务器配合使用,并与证书数据库相连接,其主要完成以下功能:
  对用户登录请求的认证
  对生成的用户报税数据文件进行签名
  对用户上传的数据文件中的签名进行校验
   (1)接收EJB服务器提交的认证请求数据;
   (2)从认证请求数据中获取数据、数据签名和用户数字证书,根据配置的CA根证书,校验用户证书是否由已支持的CA签发,是否在有效期范围之内;
   (3)查询证书数据库中相应证书的状态,检查用户证书是否被作废;
   (4)用用户证书校验数据的用户签名,用税务部门的证书校验签名;
   (5)验证通过的数据、数据签名及相应的签名证书序列号交由EJB服务器入报税系统业务数据库存储;
基于WEB的签名验证管理系统
  基于 WEB的签名验证管理系统提供WEB方式的历史数据查询和签名校验功能,其业务流程如下:
   (1)查询历史数据和签名;
   (2)根据签名证书序列号和颁发该证书的CA标识,在证书数据库中查找用户证书;
   (3)使用用户证书校验签名;
  业务系统通过 API调用与签名认证服务器进行通信,提供的API方式包括:
   J2EE程序,提供Jar包;
Delphi等程序,提供 COM组件调用。
5 、安全认证特点
  使用数字签名安全认证系统作为网上报税业务的安全门卫,为税务办理系统提供了有针对性的安全保障,在技术上为税务部门与纳税单位双方建立起互信的机制,同时符合法律规定逻辑。总的来说,具有以下特点:
   (1)在数字空间正确识别报税用户的真实身份
   (2)保证网络上传输的敏感数据不被篡改
   (3)使通过公网传输的业务数据保持机密性
   (4)办税双方的业务行为具有不可否认性
  基于可信的安全保障措施,税务机关可以为广大纳税用户提供更为深入和可靠的业务服务,不仅提高了税务机关的工作效率,而且简化了纳税人的办事手续,在一定程度上提高了整个税务部门的服务水平,利国利民。
谢 辞
 
大学生活一晃而过,回首走过的岁月,心中倍感充实,当我写完这篇毕业论文的时候,有一种如释重负的感觉,感慨良多。在此我想对我的母校,我的父母、亲人们,我的老师和同学们表达我由衷的谢意。
感谢我的家人对我大学三年学习的默默支持;感谢我的母校昆明理工大学楚雄应用技师学院给了我在大学三年深造的机会,让我能继续学习和提高;感谢昆明理工大学楚雄应用技师学院的老师和同学们三年来的关心和鼓励。老师们课堂上的激情洋溢,课堂下的谆谆教诲;同学们在学习中的认真热情,生活上的热心主动,所有这些都让我的三年充满了感动。还有教过我的所有老师们,你们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。这次毕业论文设计我得到了很多老师和同学的帮助,其中我的论文指导老师董明忠老师对我的关心和支持尤为重要。每次遇到难题,我最先做的就是向董老师寻求帮助,而老师每次不管忙或闲,总会抽空来找我面谈,然后一起商量解决的办法。董老师平日里工作繁多,但我做毕业设计的每个阶段,从选题到查阅资料,论文提纲的确定,中期论文的修改,后期 论文格式调整等各个环节中都给予了我悉心的指导。这段时间以来,董老师不仅在学业上给我以精心指导,同时还在思想给我以无微不至的关怀,在此谨向老师致以诚挚的谢意和崇高的敬意。   
同时,本篇毕业论文的写作也得到了同学的热情帮助。感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在此,我再一次真诚地向帮助过我的老师和同学表示感谢!
感谢爹娘。现在回家我会有意识地观察父母的气色,并因为老爹脸上的皱纹和老娘头上的白发而心情低落,为自己早年的操蛋而心生悔意。爹娘无比爱我,养我育我辛苦异常。给我的成长环境也很宽松,除了品德的教育和是非方面的指导,对其他方面的发展并不多加限制。对我的选择都始终鼎力支持,哪怕他们在某些选择上未必认同这个有些离经叛道的儿子。然而现在,我知道,我应该并且已经踏上,支持他们的道路上了。也许,对于大部分背负着各种负担的 80后,一个最简单的奋斗的信念就是:让父母过的好点。
感谢同窗好友。整个班级里面,屠夫是绝对的领袖和榜样。在大宿舍里还有:小辉、小飞、大飞、二林、成松,一句话:我们兄弟情深!三年相处的情谊,将是我人生中无比绚烂夺目的财富!
最后,对本文借鉴引用著作的作者,以及百忙中抽出时间审阅本论文的专家学者,表示由衷的谢意。
写到此处,指尖一涩,突然意识到,学生生涯真的要结束了!扭头望向窗外,久不能语。
在即将走出校园,直面大千世界的路口,虽然有些彷徨,有些茫然,但是我知道,我必须勇敢迈步前行。以下面一句话做结尾并与君共勉:
未来不可知,是我们前进的原动力!!!
参考文献
1.《 AES和椭圆曲线密码算法的研究》顾婷婷硕士毕业论文
2.《密码编码学与网络安全:原理与实践(第二版)》 William Stallings,电子工业出版社
3.《公钥密码技术讲义》张巍四川大学计算机网络与安全研究所讲义
4.认证理论与技术——数字签名(网络资料)

5. 数字签名认证系统在网上办税业务中的应用(网络资料)