数字签名方案的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字签名方案的实现
欧家权、应用数学、2111011451
一:数字签名的背景
随着信息、电子技术的迅速发展,全球己步入信息社会。

由于整个社会将形成一个巨大的计算机网络,任何部门的计算机网络一旦出现安全问题,都会直接影响到整个国家的网络安全,所以计算机网络安全问题已引起了各国的高度重视。

随着我国信息化进程的加快,网络化将向各经济部门、政府机关、军队、学校和社会团体等方向延伸,先进的计算机系统能把整个社会乃至军队联结起来。

计算机作为国家的关键基础设施和战略命脉,其安全状况直接影响到国家的安全和发展。

加密技术是保证信息安全的关键技术,其理论是信息安全的核心内容之一。

密码学是一门古老而又年轻的学科,1949年以前,密码学是一种艺术而并不是作为一门严格的科学存在。

1949年shannon[']发表的“保密系统的信息理论"一文为私钥密码系统建立了理论基础,从此密码学成为了一门科学。

而1976年Diffie和Hellman[2]的“密码学的新方向”则开创了公钥密码学的新纪元。

目前的数据加密、数字签名、消息认证等技术都是以密码技术作为基础设计出来的。

随着信息化的高速发展,密码学理论的研究和应用越来越受到重视。

数字签名的概念由Diffie和Hellman提出,是现代密码学最重要最基本的概念之一。

数字签名的设计思想等同于手写签名,即将签名者的身份与其签署的消息绑定,表示某人已对某消息进行了签字。

任何的验证者均能验证消息确实为签名者所签署,而伪造一个合法用户的签名却是困难的。

数字签名是实现数字通信中可认证性、完整性和不可否认性的重要密码技术,是应用最为广泛的公钥密码技术之一.
综上所述,数字签名的应用范围相当广泛,而数字签名最重要的应用之一就是数字版权管理系统的应用。

随着网络和数字技术的快速发展,以数字形式存
在的产品在人们的日常工作、学习和生活中占据越来越重要的地位。

这些数字产品包括:电影、音乐、图片、电视、软件、书籍、期刊等,我们通称之为数字内容.数字内容通常都是有版权的,版权所有者销售数字内容并希望获得最大的经济收益。

然而,数字内容的数字特性在为合法的用户提供存储、传输、处理等便利性的同时,也为盗版者的盗版行为提供了捷径。

如果不采取有效的措施,盗版者就可以将数字内容精确复制并通过互联网络传播,版权所有者的利益将受到严重的侵害。

如何通过技术手段来保护数字内容的版权己成为近年来工业界和学术界研究的热点问题,许多开放的或专有的数字内容保护系统被提出来并得到不同程度的应用.数字内容保护技术是对各类数字内容的知识产权进行保护的一系列软硬件技术,合理地使用这些技术能够有效平衡数字内容价值链中各参与方的利益和需求,带动数字内容制作、消费电子和信息技术等产业的发展,并有助于开展新的商业模式,促进整个数字内容市场的发展和信息的传播,具有广泛的经济和社会意义.
因此,基于数字签名技术与数字版权保护技术的特点与共性,研究数字签名理论在数字版权管理系统中的应用是一个很有意义的课题,本文将在对数字签名进行研究的基础上,将数字签名的技术与数字版权管理系统进行有机结合,使数字签名理论能为数字版权的保护作出贡献.
2000年6月30日,美国克林顿总统用数字签名和手写签名两种方式正式签署((数字签名法律》,使数字签名在美国与传统签名一样具有了法律效力.
2004年8月28日,第十届全国人民代表大会常务委员会在第十一次会议通过了《中华人民共和国数字签名法》,该法自2005年4月1日已经开始施行。

随着各国相关法律的建立,数字签名在今后将与手写签名或者盖章具有同等的法律效力。

以数字签名方式签署的合同、文件等电子文档与传统签名方式签署的纸质文件具有同样的法律效应,这就为基于互联网的电子商务、电子政务等各种应用铺平了道路。

我国将在国家计委的项目—网络身份认证管理示范工程基础上,逐步开展以公安户政信息和特征识别码为支持平台的网络身份管理等工作,为数字签名法的实施提供技术上的保障。

数字签名法立法通常遵循技术中立的原则。

目前,国际上流行的态度是,数字签名标准的发展应该统一、透明和客观,放弃为每一种认证方法进行立法的做法,承认各种数字签名的形式的合法性,只要其符合国际标准,均具有同等的法律效力和可强制执行力.反映到立法上,就是要确立技术的中立地位,避免规定使用特定技术,只从功能上对数字签名做出规定。

这样,才能为未来新的数字签名技术的发展预留法律空间。

数字签名技术的发展是无止境的,一些原本被认为安全的技术,随着时间的推移和技术的进步也逐渐暴露出其缺陷。

如,美国朗讯科技公司的贝尔实验室信息科学研究中心的DanielBleiehenbaehe研究员于2000年2月5日宣布在著名的数字签名算法DSA的随机数生成技术存在着重大缺陷。

因为密钥的有效性依赖于数字产生的随机度,但DSA的随机数产生方法上存在偏重某些数字的现象。

在概率上,从某个特定范围的数字中选择随机数的概率是从其它范围的数字中选择的2倍.正是这种偏重性大大减弱了DSA的安全性能,从而会加大整个系统的脆弱性。

不过以目前性能还不足够发达的计算机而言,该缺陷还不至于立即构成威胁。

但在不久的将来,因特网和企业/政府的内部网络业务的完整性就会面临危险。

VPN(虚拟个人网络)、在线购物和金融交易等都有可能受到影响.
在国际密码学会议(Crypt.2004)上,研究人员宣布,他们发现了破解数种Hash算法的方法,其中包括MD4,MDS,NAVAL一128,RIPEMD。

这些都是常搭配数字签名使用的算法.分析表明,SHAI的减弱条件的变种算法可能被破解,但完整的SHAI并没有被破解,也没有找到SHAI的碰撞。

研究结果说明,SHAI的安全性暂时没有问题,但随着技术的进步,也面临着危险。

随着数字签名与普通签名有同等效力的法规出台,数字签名技术的研究与应用将进入一个新的阶段.随着电子政务、电子商务等应用的普及和认识的提高,人们对数字签名本身的安全要求也在不断提高。

对己有签名方案的安全分析和攻击将不断升级,密码学中各种算法的安全性将面临严峻的考验.另一方面,需要依靠数字签名技术的网络应用呈快速增长的趋势。

例如:2004年的美国总统大选已开始部分采用网上投票,据称,世界上搞网上投票和电子投票的不止美国一家,瑞士、英国也己开始尝试这种新的投票方法。

随着信息化的发展,我国信息安全技术的研究和产业已受到党和国家的高度重视,江泽民总书记曾明确指出:“信息和网络安全关系国家安
全".信息安全的地位越来越高,越来越引起政府的重视,投入上也越来越大.
在军事上,信息战这种新型作战模式的出现被视为是一次军事革命,今后的战争中决定胜负的因素不再仅仅是炸药、飞机和大炮,信息将成为一种重要的克敌制胜的武器。

目前这种新型战争的各项准备工作各国都在高速进行,而这主要取决于计算机硬件、软件、网络通信技术的发展水平.数字签名技术由于其能有效地防止信息的伪造、确定信息的来源和判断信息是否完整等能力,使其在信息战中有着极其重要的作用。

数字签名的特性使得数字签名在运用到数字版权管理系统的协议中能起到重要的作用。

现今对数字产品的版权保护的主要技术是数字水印技术,数字水印算法己经有了较大发展,能够应用于所有网络上的数字媒体,抗攻击性和可用性也正在提高.目前,有些系统己经开始尝试将数字水印算法用于数字媒体的版权保护过程中。

但是我们应该看到,在开放环境下,密码算法的安全性和安全协议的安全性是保障
信息安全的两个基本方面.在开放环境下若要保护数字版权,使用数字水印算法来保证版权的安全性固然很重要,但也必须考虑到版权保护过程中所采用协议的安全性。

当攻击者转向攻击协议而不是数字水印算法本身时,如果协议本身存在安全漏洞,则整个系统就起不到真正保护数字版权的作用。

1883年,AugusteKerckhoffS〔3}阐述了第一个密码系统的设计准则,他在该准则中建议:我们应该假设对手知道加密数据的方法,数据的安全性必须仅依赖密钥的选择。

像商用的密码算法和协议那样,为了使数字版权管理系统在开放环境下能起到版权保护作用,系统的设计必须遵守KerCkhoffS准则。

显然,通过引入完备的安全协议,可以最大限度的防范攻击者对整个系统的破坏。

随着数字化信息应用的普及,数字版权保护安全协议的研究必将会成为一个新的研究热点。

二:数字签名的原理
2.1数字签名具备的特征
数字签名类似于数字化的手写签名,但它们又不完全相同。

数字签名与单独的数据,如签名的合同或电子邮件有关. 数字化的手写签名也是为了完成相同的工作, 但是它却无法引用待签的文档。

强迫进行数字化的手写签名比强迫进行数字签名容易的多:只需从另一个文档拷贝签名即可. 数字签名通常提供更高
的安全度,因为它们与签名的文档相关, 而且如果无法读取所使用的密钥,就很难伪造签名。

由此,数字签名要具备以下特征:(1)签名不能被伪造;(2)签发方签过名后不能对签发文件的事实进行抵赖和否认;(3)信息发出后, 任何人不能对其进行篡改; (4) 若双方关于签名发生纠纷,可以给第三方仲裁机构提供用于仲裁的证据。

2。

2 数字签名的原理
数字签名的基础是密码技术, 目前较多使用公钥加密技术,如基于RSA Date Secu rity 公司的PKCS(Pub lic Key Cryp tography Standards)、DSA (D igi2tal Signatu re A lgo rithm )、PGP (P ret ty Good P rivacy)等。

在1994 年美国标准与技术协会公布了数字签名标准(DSS) 后,公钥加密技术在数字签名中的应用更为广泛。

公钥加密系统使用密钥对公钥和私钥来加密和解密信息. 用户可以公布其公钥, 公钥的公布不会损害系统的保密性. 而私钥只有密钥对的所有者才知道, 从而可把私钥作为其所有者的身份特征。

发送者A 用其私钥S KA 对文件X 进行加密, 结果D S KA (X )传送给接收者B。

B 用已知的A 的公钥P KA 解密得出E PKA (D S KA (X ) ) = X 。

由于除A 外无人具有A 的私钥S KA ,所以除A 外没有别人能产生密文D S KA (X ) ,也就唯一标识了A 的身份。

若A 要抵赖曾发送文件给B,B 可将X 及D S KA (X ) 出示给第三者。

第三者很容易用P KA 去证实A 确实发送文件X给B。

反之,若B 将X 伪造为X ′,则B 不能在第三者前出示D S KA (X ′) , 就证明B 伪造了报文. 这样就实现了数字签名.为了保证传输的数据不被篡改, 在现有的数字签名方案中,通常以单向函数(如Hash 函数等)作用于文件, 产生固定长度的二进制作为信息摘要, 再将信息摘要用公钥加密作为签名与文件一起发送. 由于采用单向函
数,给定一个固定长度的字符串, 很难找到一个具有明确意义的消息,使其函数值与该字符串的信息摘要值完全相同。

所以消息一旦被修改或破坏,就会与原来的信息摘要值不匹配。

接收方很容易通过计算文件的信息摘要值与传来的函数值的不同, 而察觉出消息被非法用户篡改过。

目前, J ava 开发包JDK 中支持DSA 签名,JDK1. 3 及以后的版本还支持RSA 签名。

而且, J ava还提供了2 个信息摘要函数MD5 和SHA。

以DSA签名算法和基于MD5 的信息摘要为例,
数字签名及验证的过程签名是首先计算被签名文件的MD5 码,该码经过DSA 私钥和DSA 加密算法加密后, 形成数字签名,然后再附加到原文件之后,向外发送。

收件人得到带有数字签名的文件后, 要对数字签名进行鉴别。

首先取出签名者的公钥, 数值签名经过公钥和DSA 解密算法解密后,恢复出原来的MD5 码. 然后计算原文件的MD5 码, 再与前者比较, 如果相同,则文件属实, 否则文件或签名已经过改动.
2.3 数字证书
由于数字签名依赖于公钥的完整性, 那么验证人如何确保他们获得的公钥不是来自某个冒名顶替者呢?而且,在数字签名认证发送人的同时, 接收人如何能够确保发送人值得信任呢?这些问题的解决方案就是数字证书。

由共同信任的第三方或证书授权机构CA (Certificate Authority)颁发证书. CA 不仅有签名者的公钥, 还有该用户的其他信息. 证书含有一个有效期. 颁发机构用它的专用密钥在证书上签名。

该过程隐含一个假定, 即CA 的公钥是广泛可用的和真实的. 公钥证书以X. 509 标准为基础。

默认情况下, Java 开发包使用的是X。

509 证书. 一个证书包括:一个公钥;一个唯一的名字实体(个人或公司) , 它是证书的所有者,包括用户名字、公司、组织、城市、地址、国家代码、省份等信息; 数字签名:一个证书被一个分发者的实体签名,保证证书确实包含另一个实体(所有者) 的公钥;分发者的标识名信息。

一般是每一个公钥做一张数字证书,私钥用最安全的方式交给用户或自己生产密钥对,数字证书的内容包括用户的公钥、姓名、发证机构的数字签名及用户
的其他信息,对方可以借此来验证身份的真假。

当然,证书必须预防密钥丢失,可采用恢复密钥和密钥托管等方式处理丢失问题。

证书的有效期超过后,必须重新签发,如果私钥丢失或被非法使用,则应废止证书.
数字签名流程如图所示:
三:数字签名的实现方式
由于数字签名的实现方式多种多样,可以在不同的应用平台上采用数字签名,所以下面列举两种比较常见的实现方式进行讨论。

3.1 :ASP。

NET 中数字签名的实现
密码系统是WEB 应用程序的安全通讯的基础,主要目的是保护数据,保护用户的标识或数据不被泄漏,保护数据不遭受未授权篡改或者损坏.保证接收的数据来自某特定的用户。

加密是密码系统在实践中的应用,它是用算法使数据变得不规则的过程。

密码系统有对称和不对称两种加密方法。

在使用。

NET 技术创建WEB 应用程序的过程中,可以通过编程方式使用密码系统来加强WEB 应用程序的安全性.根据所使用的编程平台,可以使用几种加密库中的一种,给WEB 应用程序添加加密、散列和数字签名功能.
签名数据处理:
.NET Framework 为签名数据和文件提供了RSACryptoServiceProvider 和DSACryptoServiceProvider 类。

使用RSACryptoServiceProvider 和DSACryptoServiceProvider 类,有两个可用于签名数据的选项,如表:
签名数据的第一步是创建 RSACryptoServiceProvider 类的新实例以生成公钥/ 私钥对.可以在应用程序中创建一个 RSACryptoServiceProvider 类的新实例,它从计算机密钥证书存储区中读取公钥/私钥对, 并把密钥对保存到一个名为SignKeyContainer 的新的密钥容器中:
C s p P a r a m e t e r s p a r a m = n e wCspParameters();
P a r a m 。

K e y C o n t a i n e r N a m e = "SignKeyContainer”
Param。

Flags=CspProviderFlags。

UseMachineKeyStore;
R S A C r y p t o S e r v i c e P r o v i d e robjRSA=new RSACryptoServiceProvider (param);
注意,当使用RSA CryptoServiceProvider 对象时,必须指定计算机的密钥证书存储区,它是只有ASPNET 用户才有访问权的证书存储区。

如果要使用个人密钥存储区,必须使用模拟方式。

SignData 方法需要字节数据作为参数,所以第二步必须把要进行签名的数据转换为字节数组。

使用System.Text 命名空间中的UnicodeEncoding 类把字符串转换为字节数组:
U n i c o d e E n c o d i n g U E = n e wUnicodeEncoding();
byte[] arTextTOSign=UE。

GetBytes(txtClear.Text);
最后,调用SignData 方法对数据进行散列和签名.DSACryptoServiceProvider类使用S H A 1 哈希算法。

如果使用RSACryptoServiceProvider 类,可以在SignData方法的第二个参数中指定哈希算法,如下面的代码所示,其中使用M D 5 哈希算法:
byte[] arDigitalSignature;
arDigitalSignature=objRSA。

SignData(arTextTOSign,”MD5”);
解密数据处理:
解密已经过数字签名的数据时,要完成下列步骤:
1)接收方使用发送方的公钥解密签名,得到原来的哈希值.
如果签名可以解密,则接收方可以确信数据来自发送方(或私钥的所有者).
2)对数据应用哈希算法来生成第二个哈希值。

3)比较两个哈希值.如果哈希值匹配,则接收方可以确信数据没有被修改过.
要验证数字签名,必须拥有:
签名数据的用户所持有的公钥
数字签名
已签名的数据
签名者使用的哈希算法
例如由前面签名数字第一步中SignKeyContainer 密钥容器创建的一个RSACryptoServiceProvider 类的新实例,为了验证签名,需要调用V e r i f y D a t a 或VerifyHash 方法,这依赖于签名是如何创建的。

VerifyData和VerifyHash方法都返回布尔值,True 表明签名有效;False 表明签名无效。

下面的例子示例使用VerifyData 方法验证数字签名。

在此例中,arTextTOSign和arDigitalSignature都是由远程用户提供的字节数组:
if ( objRSA.VerifyData (arTextTOSign,"MD5", arDigitalSignature) )
lblVerify。

Text=”Validsignature";
else
lblVerify。

Text=”InValidsignature”
3.2 Java实现方式:
Java 开发包中包含了一系列工具用来提供加密、信息融合、密钥管理、认证、存取控制和数字签名等功能, 可以很方便地实现对Java 应用程序和JavaApp let小程序的数字签名和客户端认证。

Java Applet 小程序简单、短小, 非常适合网络传输的要求,而且不受平台限制。

以签名Applet 小程序为例说明数字
签名的具体实现过程.
实现签名的工具:
密钥和证书管理工具(Keytoo ls) :它主要是负责公私密钥对、向CA 发证书申请、接受CA 的回复、记录信任的公钥—- 实体对应表,维护密钥库(Keysto re).Java 文档处理工具( jar) :如果要对代码签名, 需要先用jar 将其打包, 然后用jarsigner 来签名.J ava 文档签名及验证工具( jarsigner) :该工具通过密钥库中的数据来对jar 文件进行签名和认证.策略编辑器(po licytoo l):编辑系统安全策略的文件.
实现签名的步骤:
在客户端安装JRE1. 3. 0 01 (Java 运行环境。

3。

0.1版本)以取代IE 的JVM (Java 虚拟机). 在服务器端的调用App let 的HTML 文件中也需要将它包含进来, 以便没有事先安装JRE 的客户端下载.
具体实现步骤如下:
服务器端(代码分发端) :
(1)开发J ava 源程序并编译, 生成myf ile。

class文件。

(2)用JAR 对类文件和资源文件进行封装:jar cvf myf ile. jar myf ile。

class
(3) 用Keytoo l 产生公钥ö密钥对(DSA 是Keytoo l 程序缺省的算法) ,生成X. 509V 1 证书, 键入命令:keytoo l genkey keysto re myf ile. keysto re alias myf ile
(4)使用(3)生成的密钥对jar 文件进行签名:jarsigner keysto re myf ile。

keysto re myf ile. jarmyf ile
(5)输出公钥证书。

数据的接收方是通过与生成数字签名的私钥对应的公钥来鉴定签名文件的, 因此要给数据的接收方发送一份公钥证书的副本。

键入命令:keytoo l expo rt keysto re myf ile。

keysto re alias myf ile file myfile。

cer此命令将生成名为myfile。

cer 证书文件,这个cer 文件就是要拷贝到客户端的唯一文件.这样就完成了服务器端的设置. 这时就可以将jar 文件和keysto re 文件以及cer 文件(在这里使用的是myf ile。

jar, myf ile。

keysto re, myf ile。

cer) 拷贝到服务器的目录下了。

客户端(代码接收端) :
(1) 安装好JRE1. 3。

0 01 后, 将服务器端生成的myf ile. cer 文件拷
贝到jre 的特定目录下.
(2)输入证书并视其为可信任,将公钥倒入到jre 的cacert s (这是jre 的默认keysto re) :keytoo l impo rt alias myf ile f ile myf ile。

cer keysto re cacert s注意这里要输入的cacert s 的密码是changeit,而不是自己设定的keysto re 的密码。

(3)修改安全策略配置文件.运行命令po licytoo l。

系统会自动弹出一个po li
cytoo l 的对话框, 选择file 菜单的open 项,打开客户端目录下的java。

po liy 文件, 然后在edit 菜单中选择Change keysto re, 在对话框的new keysto re u rl 栏中输入密钥库cacert s 在客户机中的路径, 在new keysto re type 中输入JKS, 这是cacert s 的固定格式, 然后单击Add Policy Entry,在出现的对话框中Code
Base 中输入App let 程序在服务器端的位置:http: URL: 8080其中的URL 是服务器的IP 地址, 8080 是服务器(这里用的是Tomcat) 端口. 在SignedBy 中输入别名(alias) : 这里是myf ile. 然后单击add perm ission 按钮,在出现的perm ission 对话框中选择你想给这个Applet 的权限, 最后保存.
(4) 从服务器端取得字节码, 验证字节码的合法性与完整性, 根据策略文
件分配相应的权限,执行代码, 完成后被垃圾回收器回收内存.
四:数字签名的应用
数字签名是互联网上不可缺少的安全处理技术,目前已有很多人在研究新算法, 以适应于特定领域内数字签名的需求,其中包括以下几个研究方面.
1、高效可验证的安全数字签名方案。

这种数字签名方案能够防止通过猜测RSA 算法的某些变量来选择信息进行攻击,它的安全性不是基于树型结构的信任关系,而是利用一种被称为“散列和标记”的范式。

这种签名的惟一性是建立在它的假设上, 即假设加密所用的散列函数是经过详细定义的, 并且是合理的( 可以不符合标准)。

我们可以分3 步证明它的安全性: 首先随机构造一个预测模型,且能够描述并证明这个模型是可靠的,然后证明所构造的模型可以用一个满足特定计算特性(这些特性经过详细定义)的散列函数来代替; 最后通过证明满足这些特定计算性质的散列函数是存在的,从而论证假设的合理性.
2、防止适应性攻击的门限签名方案。

在门限签名方案中, 数字签名是由一组用户产生, 而不是由个人或一个组织产生, 签名所用的私钥由一个组内的多个用户共享。

为了给消息M 产生一个有效的签名, 至少需要t+1 个人合作, 由门限签名方案产生的签名和只有个人拥有私有密钥产生的签名具有相似性, 也就是说是否用分布方式产生数字签名这一点对接收端来说是透明的。

门限签名方案的作用主要是防止来自内部或外部对签名密钥的攻击, 涉及门限签名的目标有两个方面:一是提高数字签名代理的有效性; 二是防止密钥被伪造, 使攻击者更难获得签名所用的私钥。

因为组内必须有多个人才能产生数字签名, 这一点使门限签名方案具有强壮性, 即使攻击者就是组内的个别成员, 也能保证信息不被泄漏, 这项工作的实施草案可利用RSA 和DSS 数字签名方案进行设计实现。

3、面向流信息的数字签名.对信息流进行数字签名与对规则信息进行签名不同,传统的签名方案是面向消息的,接受端在收到全部信息之后才能对签名进行验证。

然而流信息是很长的(可能是无限长)的位序列,接收者必须一边接收消息, 一边获取消息内容, 不能有延迟。

如果让接收者收到全部信息之后再进行验证是不现实的, 这种流信息包括数字视频、数字音频、数据流及java applet 程序等。

对于这类签名包括两种情况:一种是发送端已知信息是有限长的(如电影) , 另一种是发送端不知道信息的长度( 可能无限长,如广播) 。

这种对流信息的签名技术还能应用于其它领域,如在通讯代价高时对长文件的高效验证, 这时可以将基于数字签名的过滤器装载代理服务器上。

4、不可否认数字签名。

数字签名是用来保密组织之间传递的秘密协议, 保证传递的个人信息的私有性,因此即使在收发双方产生了纠纷, 仍然不希望参与验证签名合法的第3 方能看到信息原文,这就需要限制验证合法性的第3方的权利。

当然限制过多会使第3 方失去判断和解决纠纷的能力, 数字签名也就失去了它的价值。

能够解决上述问题的一种签名方案是不可否认数字签名。

相关文档
最新文档