数字签名方案的实现.docx

上传人:b****8 文档编号:29643589 上传时间:2023-07-25 格式:DOCX 页数:15 大小:274.43KB
下载 相关 举报
数字签名方案的实现.docx_第1页
第1页 / 共15页
数字签名方案的实现.docx_第2页
第2页 / 共15页
数字签名方案的实现.docx_第3页
第3页 / 共15页
数字签名方案的实现.docx_第4页
第4页 / 共15页
数字签名方案的实现.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数字签名方案的实现.docx

《数字签名方案的实现.docx》由会员分享,可在线阅读,更多相关《数字签名方案的实现.docx(15页珍藏版)》请在冰豆网上搜索。

数字签名方案的实现.docx

数字签名方案的实现

数字签名方案的实现

欧家权、应用数学、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数字签名的原理

数字签名的基础是密码技术,目前较多使用公钥加密技术,如基于RSADateSecurity公司的PKCS(PublicKeyCryptographyStandards)、DSA(Digi2talSignatureAlgorithm)、PGP(PrettyGoodPrivacy)等.在1994年美国标准与技术协会公布了数字签名标准(DSS)后,公钥加密技术在数字签名中的应用更为广泛.公钥加密系统使用密钥对公钥和私钥来加密和解密信息.用户可以公布其公钥,公钥的公布不会损害系统的保密性.而私钥只有密钥对的所有者才知道,从而可把私钥作为其所有者的身份特征.发送者A用其私钥SKA对文件X进行加密,结果DSKA(X)传送给接收者B.B用已知的A的公钥PKA解密得出EPKA(DSKA(X))=X.由于除A外无人具有A的私钥SKA,所以除A外没有别人能产生密文DSKA(X),也就唯一标识了A的身份.若A要抵赖曾发送文件给B,B可将X及DSKA(X)出示给第三者.第三者很容易用PKA去证实A确实发送文件X给B.反之,若B将X伪造为X′,则B不能在第三者前出示DSKA(X′),就证明B伪造了报文.这样就实现了数字签名.为了保证传输的数据不被篡改,在现有的数字签名方案中,通常以单向函数(如Hash函数等)作用于文件,产生固定长度的二进制作为信息摘要,再将信息摘要用公钥加密作为签名与文件一起发送.由于采用单向函数,给定一个固定长度的字符串,很难找到一个具有明确意义的消息,使其函数值与该字符串的信息摘要值完全相同.所以消息一旦被修改或破坏,就会与原来的信息摘要值不匹配.接收方很容易通过计算文件的信息摘要值与传来的函数值的不同,而察觉出消息被非法用户篡改过.目前,Java开发包JDK中支持DSA签名,JDK1.3及以后的版本还支持RSA签名.而且,Java还提供了2个信息摘要函数MD5和SHA.以DSA签名算法和基于MD5的信息摘要为例,

数字签名及验证的过程签名是首先计算被签名文件的MD5码,该码经过DSA私钥和DSA加密算法加密后,形成数字签名,然后再附加到原文件之后,向外发送.收件人得到带有数字签名的文件后,要对数字签名进行鉴别.首先取出签名者的公钥,数值签名经过公钥和DSA解密算法解密后,恢复出原来的MD5码.然后计算原文件的MD5码,再与前者比较,如果相同,则文件属实,否则文件或签名已经过改动.

2.3数字证书

由于数字签名依赖于公钥的完整性,那么验证人如何确保他们获得的公钥不是来自某个冒名顶替者呢?

而且,在数字签名认证发送人的同时,接收人如何能够确保发送人值得信任呢?

这些问题的解决方案就是数字证书.由共同信任的第三方或证书授权机构CA(CertificateAuthority)颁发证书.CA不仅有签名者的公钥,还有该用户的其他信息.证书含有一个有效期.颁发机构用它的专用密钥在证书上签名.该过程隐含一个假定,即CA的公钥是广泛可用的和真实的.公钥证书以X.509标准为基础.默认情况下,Java开发包使用的是X.509证书.一个证书包括:

一个公钥;一个唯一的名字实体(个人或公司),它是证书的所有者,包括用户名字、公司、组织、城市、地址、国家代码、省份等信息;数字签名:

一个证书被一个分发者的实体签名,保证证书确实包含另一个实体(所有者)的公钥;分发者的标识名信息.

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

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

证书的有效期超过后,必须重新签发,如果私钥丢失或被非法使用,则应废止证书。

数字签名流程如图所示:

三:

数字签名的实现方式

由于数字签名的实现方式多种多样,可以在不同的应用平台上采用数字签名,所以下面列举两种比较常见的实现方式进行讨论。

3.1:

ASP.NET中数字签名的实现

密码系统是WEB应用程序的安全通讯的基础,主要目的是保护数据,保护用户的标识或数据不被泄漏,保护数据不遭受未授权篡改或者损坏。

保证接收的数据来自某特定的用户。

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

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

在使用.NET技术创建WEB应用程序的过程中,可以通过编程方式使用密码系统来加强WEB应用程序的安全性。

根据所使用的编程平台,可以使用几种加密库中的一种,给WEB应用程序添加加密、散列和数字签名功能。

签名数据处理:

.NETFramework为签名数据和文件提供了RSACryptoServiceProvider和DSACryptoServiceProvider类。

使用RSACryptoServiceProvider和DSACryptoServiceProvider类,有两个可用于签名数据的选项,如表:

签名数据的第一步是创建RSACryptoServiceProvider类的新实例以生成公钥/私钥对。

可以在应用程序中创建一个RSACryptoServiceProvider类的新实例,它从计算机密钥证书存储区中读取公钥/私钥对,并把密钥对保存到一个名为SignKeyContainer的新的密钥容器中:

CspParametersparam=newCspParameters();

Param.KeyContainerName=”SignKeyContainer”

Param.Flags=CspProviderFlags.UseMachineKeyStore;

RSACryptoServiceProviderobjRSA=newRSACryptoServiceProvider(param);

注意,当使用RSACryptoServiceProvider对象时,必须指定计算机的密钥证书存储区,它是只有ASPNET用户才有访问权的证书存储区。

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

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

使用System.Text命名空间中的UnicodeEncoding类把字符串转换为字节数组:

UnicodeEncodingUE=newUnicodeEncoding();

byte[]arTextTOSign=UE.GetBytes(txtClear.Text);

最后,调用SignData方法对数据进行散列和签名。

DSACryptoServiceProvider类使用SHA1哈希算法。

如果使用RSACryptoServiceProvider类,可以在SignData方法的第二个参数中指定哈希算法,如下面的代码所示,其中使用MD5哈希算法:

byte[]arDigitalSignature;

arDigitalSignature=objRSA.SignData(arTextTOSign,”MD5”);

解密数据处理:

解密已经过数字签名的数据时,要完成下列步骤:

1)接收方使用发送方的公钥解密签名,得到原来的哈希值。

如果签名可以解密,则接收方可以确信数据来自发送方(或私钥的所有者)。

2)对数据应用哈希算法来生成第二个哈希值。

3)比较两个哈希值。

如果哈希值匹配,则接收方可以确信数据没有被修改过。

要验证数字签名,必须拥有:

签名数据的用户所持有的公钥

数字签名

已签名的数据

签名者使用的哈希算法

例如由前面签名数字第一步中SignKeyContainer密钥容器创建的一个RSACryptoServiceProvider类的新实例,为了验证签名,需要调用VerifyData或VerifyHash方法,这依赖于签名是如何创建的。

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

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

在此例中,arTextTOSign和arDigitalSignature都是由远程用户提供的字节数组:

if(objRSA.VerifyData(arTextTOSign,”MD5”,arDigitalSignature))

lblVerify.Text=”Validsignature”;

else

lblVerify.Text=”InValidsignature”

3.2Java实现方式:

Java开发包中包含了一系列工具用来提供加密、信息融合、密钥管理、认证、存取控制和数字签名等功能,可以很方便地实现对Java应用程序和JavaApplet小程序的数字签名和客户端认证.JavaApplet小程序简单、短小,非常适合网络传输的要求,而且不受平台限制.以签名Applet小程序为例说明数字签名的具体实现过程.

实现签名的工具:

密钥和证书管理工具(Keytools):

它主要是负责公私密钥对、向CA发证书申请、接受CA的回复、记录信任的公钥——实体对应表,维护密钥库(Keystore).Java文档处理工具(jar):

如果要对代码签名,需要先用jar将其打包,然后用jarsigner来签名.Java文档签名及验证工具(jarsigner):

该工具通过密钥库中的数据来对jar文件进行签名和认证.策略编辑器(policytool):

编辑系统安全策略的文件.

实现签名的步骤:

在客户端安装JRE1.3.001(Java运行环境.3.0.1版本)以取代IE的JVM(Java虚拟机).在服务器端的调用Applet的HTML文件中也需要将它包含进来,以便没有事先安装JRE的客户端下载.

具体实现步骤如下:

服务器端(代码分发端):

(1)开发Java源程序并编译,生成myfile.class文件.

(2)用JAR对类文件和资源文件进行封装:

jarcvfmyfile.jarmyfile.class

(3)用Keytool产生公钥ö密钥对(DSA是Keytool程序缺省的算法),生成X.509V1证书,键入命令:

keytoolgenkeykeystoremyfile.keystorealiasmyfile

(4)使用(3)生成的密钥对jar文件进行签名:

jarsignerkeystoremyfile.keystoremyfile.jarmyfile

(5)输出公钥证书.

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

keytoolexportkeystoremyfile.keystorealiasmyfilefilemyfile.cer此命令将生成名为myfile.cer证书文件,这个cer文件就是要拷贝到客户端的唯一文件.这样就完成了服务器端的设置.这时就可以将jar文件和keystore文件以及cer文件(在这里使用的是myfile.jar,myfile.keystore,myfile.cer)拷贝到服务器的目录下了.

客户端(代码接收端):

(1)安装好JRE1.3.001后,将服务器端生成的myfile.cer文件拷贝到jre的特定目录下.

(2)输入证书并视其为可信任,将公钥倒入到jre的cacerts(这是jre的默认keystore):

keytoolimportaliasmyfilefilemyfile.cerkeystorecacerts注意这里要输入的cacerts的密码是changeit,而不是自己设定的keystore的密码.

(3)修改安全策略配置文件.运行命令policytool.系统会自动弹出一个poli

cytool的对话框,选择file菜单的open项,打开客户端目录下的java.poliy文件,然后在edit菜单中选择Changekeystore,在对话框的newkeystoreurl栏中输入密钥库cacerts在客户机中的路径,在newkeystoretype中输入JKS,这是cacerts的固定格式,然后单击AddPolicyEntry,在出现的对话框中Code

Base中输入Applet程序在服务器端的位置:

http:

URL:

8080其中的URL是服务器的IP地址,8080是服务器(这里用的是Tomcat)端口.在SignedBy中输入别名(alias):

这里是myfile.然后单击addpermission按钮,在出现的permission对话框中选择你想给这个Applet的权限,最后保存.

(4)从服务器端取得字节码,验证字节码的合法性与完整性,根据策略文件分配相应的权限,执行代码,完成后被垃圾回收器回收内存.

四:

数字签名的应用

数字签名是互联网上不可缺少的安全处理技术,目前已有很多人在研究新算法,以适应于特定领域内数字签名的需求,其中包括以下几个研究方面。

1、高效可验证的安全数字签名方案。

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

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

我们可以分3步证明它的安全性:

首先随机构造一个预测模型,且能够描述并证明这个模型是可靠的,然后证明所构造的模型可以用一个满足

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1