欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科普文章

数字签名

科普小知识2022-09-27 16:54:12
...

数字签名(又称公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证,但法条中的电子签章与数字签名,代表之意义并不相同,电子签章用以辨识及确认电子文件签署人身分、资格及电子文件真伪者。而数字签名则是以数学算法或其他方式运算对其加密,才形成电子签章,意即使用数字签名才创造出电子签章。数位签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。数位签名了的文件的完整性是很容易验证的(不需要骑缝章、骑缝签名,也不需要笔迹鉴定),而且数位签名具有不可抵赖性(即不可否认性),不需要笔迹专家来验证。

1、原理简介

所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码*和私钥密码*都可以获得数字签名,主要是基于公钥密码*的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou-Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦*基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。


数字签名

数字签名(DigitalSignature)技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。

2、原理特点

每个人都有一对“钥匙”(数字身份),其中一个只有她/他本人知道(密钥),另一个公开的(公钥)。签名的时候用密钥,验证签名的时候用公钥。又因为任何人都可以落款声称她/他就是你,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用你的密钥签发的文件。

鉴权

公钥加密系统允许任何人在发送信息时使用公钥进行加密,数字签名能够让信息接收者确认发送者的身份。当然,接收者不可能百分之百确信发送者的真实身份,而只能在密码系统未被破译的情况下才有理由确信。鉴权的重要性在财务数据上表现得尤为突出。举个例子,假设一家银行将指令由它的分行传输到它的*管理系统,指令的格式是(a,b),其中a是账户的账号,而b是账户的现有金额。这时一位远程客户可以先存入100元,观察传输的结果,然后接二连三的发送格式为(a,b)的指令。这种方法被称作重放攻击。

完整性

传输数据的双方都总希望确认消息未在传输的过程中被修改。加密使得第三方想要读取数据十分困难,然而第三方仍然能采取可行的方法在传输的过程中修改数据。一个通俗的例子就是同形攻击:回想一下,还是上面的那家银行从它的分行向它的*管理系统发送格式为(a,b)的指令,其中a是账号,而b是账户中的金额。一个远程客户可以先存100元,然后拦截传输结果,再传输(a,b3),这样他就立刻变成百万富翁了。

不可抵赖

在密文背景下,抵赖这个词指的是不承认与消息有关的举动(即声称消息来自第三方)。消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源。

3、签名过程

发送方用自己的密钥对报文X进行Encrypt(编码)运算,生成不可读取的密文Dsk,然后将Dsk传送给接收方,接收方为了核实签名,用发送方的公用密钥进行Decrypt(解码)运算,还原报文。

当发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。

数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。

4、主要功能

保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。  

数字签名可以解决否认、伪造、篡改及冒充等问题。具体要求:发送者事后不能否认发送的报文签名、接收者能够核实发送者发送的报文签名、接收者不能伪造发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者。数字签名的应用范围十分广泛,在保障电子数据交换(EDI)的安全性上是一个突破性的进展,凡是需要对用户的身份进行判断的情况都可以使用数字签名,比如加密信件、商务信函、定货购买系统、远程金融交易、自动模式处理等等。

5、个人邮件证书

具有数字签名功能的个人安全邮件证书是用户证书的一种,是指单位用户收发电子邮件时采用证书机制保证安全所必须具备的证书。个人安全电子邮件证书是符合x.509标准的数字安全证书,结合数字证书和S/MIME技术对普通电子邮件做加密和数字签名处理,确保电子邮件内容的安全性、机密性、发件人身份确认性和不可抵赖性。具有数字签名功能的个人安全邮件证书中包含证书持有人的电子邮件地址、证书持有人的公钥、颁发者(CA)以及颁发者对该证书的签名。个人安全邮件证书功能的实现决定于用户使用的邮件系统是否支持相应功能。MSOutlook、OutlookExpress、Foxmail及CA安全电子邮件系统均支持相应功能。使用个人安全邮件证书可以收发加密和数字签名邮件,保证电子邮件传输中的机密性、完整性和不可否认性,确保电子邮件通信各方身份的真实性。

6、如何识别病毒

查看数字签名的详细信息

点击“详细信息”按钮即可。我们会发现正常EXE和感染(或捆绑木马)后的EXE数字签名的区别正常EXE的数字签名详细信息被篡改后的EXE数字签名信息无效6.2使用数字签名验证程序sigcheck.exe数字签名异常的结果为:

C:\DocumentsandSettings\litiejun\??\modify.exe:

Verified:Unsigned

Filedate:15:462008-5-23

Publisher:n/a

Description:n/a

Product:n/a

Version:n/a

Fileversion:n/a

数字签名正常的结果为:

C:\DocumentsandSettings\litiejun\??\che.exe:

Verified:Signed

Signingdate:16:282008-4-29

Publisher:n/a

Description:n/a

Product:n/a

Version:n/a

Fileversion:n/a

原因分析

精心:设计的感染:当EXE被感染时,是很容易破坏文件的数字签名信息的,如果攻击者感染或破坏文件时,有意不去破坏EXE中有关数字签名的部分,就可能出现感染后,数字签名看上去正常的情况。但认真查看文件属性或校验文件的HASH值,你会发现该EXE程序已经不是最原始的版本了。

该软件发行商的数字签名文件被盗,攻击者可以把捆绑木马或感染病毒后的EXE程序,也打包上数字签名,这种情况下就更严重了。企业如果申请了数字签名证书,一定要妥善保管,否则后患无穷。

7、实现方法

数字签名算法依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以*发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。一般来说普通的数字签名算法包括三种算法:

第一种:密码生成算法;

第二种:标记算法;

第三种:验证算法建立在公钥密码技术上的数字签名方法有很多,有RSA签名、DSA签名和椭圆曲线数字签名算法(ECDSA)等等。

下面对RSA签名进行详细分析。 

RSA签名的整个过程可以用下图表示:


RSA签名过程

发送方采用某种摘要算法从报文中生成一个128位的散列值(称为报文摘要);

发送方用RSA算法和自己的私钥对这个散列值进行加密,产生一个摘要密文,这就是发送方的数字签名;

将这个加密后的数字签名作为报文的附件和报文一起发送给接收方;

接收方从接收到的原始报文中采用相同的摘要算法计算出128位的散列值;

报文的接收方用RSA算法和发送方的公钥对报文附加的数字签名进行解密;

如果两个散列值相同,那么接收方就能确认报文是由发送方签名的。

最常用的摘要算法叫做MD5(MessageDigest5),它的作者R.L.Rivest正是提出RSA公钥密码系统中的R。MD5采用单向Hash函数将任意长度的“字节串”变换成一个128位的散列值,并且它是一个不可逆的字符串变换算法,换言之,即使看到MD5的算法描述和实现它的源代码,也无法将一个MD5的散列值变换回原始的字符串。这一个128位的散列值亦称为数字指纹,就像人的指纹一样,它就成为验证报文身份的“指纹”了。

数字签名是如何完成与手写签名类同的功能的呢?如果报文在网络传输过程中被修改,接收方收到此报文后,使用相同的摘要算法将计算出不同的报文摘要,这就保证了接收方可以判断报文自签名后到收到为止,是否被修改过。如果发送方A想让接收方误认为此报文是由发送方B签名发送的,由于发送方A不知道发送方B的私钥,所以接收方用发送方B的公钥对发送方A加密的报文摘要进行解密时,也将得出不同的报文摘要,这就保证了接收方可以判断报文是否是由指定的签名者发送。同时也可以看出,当两个散列值相同时,发送方B无法否认这个报文是他签名发送的。

在上述签名方案中,报文是以明文方式发生的。所以不具备保密功能。如果报文包含不能泄漏的信息,就需要先进行加密,然后再进行传送。具有保密机制的RSA签名的整个过程如下图所示:


有保密机制的RSA签名过程

发送方选择一个对称加密算法(比如DES)和一个对称密钥对报文进行加密;

发送方用接收方的公钥和RSA算法对第1步中的对称密钥进行加密,并且将加密后的对称密钥附加在密文中;

发送方使用一个摘要算法从第2步的密文中得到报文摘要,然后用RSA算法和发送方的私钥对此报文摘要进行加密,这就是发送方的数字签名;

将第3步得到的数字签名封装在第2步的密文后,并通过网络发送给接收方;

接收方使用RSA算法和发送方的公钥对收到的数字签名进行解密,得到一个报文摘要;

接收方使用相同的摘要算法,从接收到的报文密文中计算出一个报文摘要;

如果第5步和第6步的报文摘要是相同的,就可以确认密文没有被篡改,并且是由指定的发送方签名发送的;

接收方使用RSA算法和接收方的私钥解密出对称密钥;

接收方使用对称加密算法(比如DES)和对称密钥对密文解密,得到原始报文。

8、数字签名在电子商务中的应用

下面用一个使用SET协议的例子来说明数字签名在电子商务中的作用。SET协议(SecureElectronicTransaction,安全电子交易)是由VISA和MasterCard两大信用卡公司于1997年联合推出的规范。

SET主要针对用户、商家和银行之间通过信用卡支付的电子交易类型而设计的,所以在下例中会出现三方:用户、网站和银行。对应的就有六把“钥匙”:用户公钥、用户私钥;网站公钥、网站私钥;银行公钥、银行私钥。

这个三方电子交易的流程如下:

用户将购物清单和用户银行账号和密码进行数字签名提交给网站:(图中“用户账号明文”包括用户的银行账号和密码。)


提交

网站签名认证收到的购物清单:


网站签名认证

网站将网站申请密文和用户账号密文进行数字签名提交给银行:(网站申请明文包括购物清单款项统计、网站账户和用户需付金额。)


将申请提交到银行

银行签名认证收到的相应明文:


银行签名认证

从上面的交易过程可知,这个电子商务具有以下几个特点:

网站无法得知用户的银行账号和密码,只有银行可以看到用户的银行账号和密码;

银行无法从其他地方得到用户的银行账号和密码的密文;

由于数字签名技术的使用,从用户到网站到银行的数据,每一个发送端都无法否认;

由于数字签名技术的使用,从用户到网站到银行的数据,均可保证未被篡改。可见,这种方式已基本解决电子商务中三方进行安全交易的要求,即便有“四方”、“五方”等更多方交易,也可以按SET议类推完成。

9、JAVA签名过程

第一步:将applet的class文件打包成*.jar(不会的可以在命令行中输入jar查看帮助)

第二步:首先我们要生成一个keystore否则在签名的时候报如下错误jarsigner错误:

java.lang.RuntimeException:密钥库装入:C:\DocumentsandSettings\ij2ee\.keystore(系统找不到指定的文件。).(这边的ij2ee是我当前系统用户名)

生成keystore的语句:keytool-genkey-alias别名你可以自己写-keyalgRSA-keystore.keystore

比如keytool-genkey-aliasij2ee-keyalgRSA-keystore.keystore

下面是会出现的数字签名的一些步骤操作:

输入keystore密码:

再次输入新密码:您的名字与姓氏是什么?

:ij2ee

您的组织单位名称是什么?

:mtk

您的组织名称是什么?

:mtk

您所在的城市或区域名称是什么?

:suzhou

您所在的州或省份名称是什么?

:jiangsu

该单位的两字母国家代码是什么

:cnCN=ij2ee,OU=mtk,O=mtk,L=suzhou,ST=jiangsu,C=cn正确吗?

:y

输入的主密码

(如果和keystore密码相同,按回车):

这时候会在jdk的bin目录下生成.keystore。把这个.keystore文件移动到C:\DocumentsandSettings\当前系统用户的目录下面。

第三步:创建一个数字证书

在命令行中输入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天数,就是10年左右,在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,都是中文,一看就懂。

keytool-genkey-aliaspeakCA-keyalgRSA-keysize1024-keystorepeakCALib-validity3650

第四步:将证书导出到证书文件中

在命令行中输入如下指令,peakCA和peakCALib自己起名字好了,******是你输入的密码

keytool-export-aliaspeakCA-filepeakCA.cer-keystorepeakCALib-storepass******-rfc

第五步:授权jar文件,在命令行中输入如下指令

jarsigner-keystorepeakCALibmyapplet.jarpeakCA

10、Office签名步骤

第一步:要保护文档内容的真实性,可以添加不可见的数字签名。已签名文档的底部有“签名”按钮。

第二步:单击“文件”选项卡。

第三步:单击“信息”。

第四步:在“权限”下,单击“保护文档”、“保护工作簿”或“保护演示文稿”。

第五步:单击“添加数字签名”。

第六步:阅读Word、Excel或PowerPoint中显示的消息,然后单击“确定”。

第七步:在“签名”对话框中的“签署此文档的目的”框中,键入目的。

第八步:单击“签名”。

第九步:在对文件进行数字签名后,将出现“签名”按钮,并且文件会变为只读以防止修改。

上一篇:代理签名

下一篇:阿尔泰“金山”