16、数字签名

数字签名背景

2004年8月28日,第十届全国人民代表大会常务委员会第十一次会议通过了《中华人民共和国电子签名法》,并于2005年4月1日开始施行。

数字签名(Digital Signature)是指签名者使用私钥对待签名数据的杂凑值做密码运算得到的结果。该结果只能使用签名者的公钥进行验证,用于确认待签名数据的完整性、签名者身份的真实性和签名行为的抗抵赖性。数字签名的目的是通过网络信息安全技术手段实现传统的纸面签字或者盖章的功能,以确认交易当事人的真实身份,以保证交易的安全性、真实性和不抗抵赖性。数字签名具有与手写签名一样的特点,是可信的、不可伪造的、不可重用的、不可抵赖的以及不可修改的。数字签名至少应满足以下三个条件:

  • 不可否认性:签名者事后不能否认自己的签名;

  • 真实性:接收者能够验证签名,其他任何人都不能伪造签名;

  • 可鉴别性:当当事人双方关于签名真伪发生争执时,第三方能够解决双方之间的争执。

数字签名就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

一个数字签名方案一般由签名验签算法、签名密钥以及验签密钥组成。签名密钥是秘密的,只有签名者掌握;而签名算法、验证密钥是公开的,以便于他人验证。典型的数字签名方案有RSA签名体制、Rabin签名体制、EIGamal签名体制、DSS标准和SM2签名体制。

数字签名原理

数字签名是对非对称加密技术与数字摘要技术的综合运用,指的是将通信内容的摘要信息H(M)使用发送者的私钥进行加密,然后将密文与原文一起传输给信息的接收者,接收者通过发送者的公钥信息来解密被加密的摘要作息,然后使用与发送者相同的摘要算法,对接收到的内容采用相同的方式产生摘要H‘(M),与解密的摘要H(M)进行对比,如果相同,则说明接收到的内容是完整的,在传输过程中没有受到第三方的篡改,否则说明通信内容已被第三方修改。

数字签名是通过一个单项函数(Hash函数)对要传送的信息进行处理,得到一个用于认证信息来源并核实信息在传递过程中是否发生变化的一个字符串;数字签名提供了对信息来源的确定并能检测信息是否被篡改。

数字签名过程

每个人都有其特有的私钥,且都是对外界保密的,而通过私钥加密的信息,只能通过其对应的公钥来进行解密。因此,私钥可以代表私钥持有者的身份,可以通过私钥对应的公钥来对私钥拥有者的身份进行校验。

通过数字签名,能够确认消息是消息发送方签名并发送过来的,因为其他人根本假冒不了消息发送方的签名,他们没有消息发送者的私钥。而不同的内容,摘要信息千差万别,通过数字摘要算法,可以确保传输内容的完整性,如果传输内容在中途被篡改了,对应的数字签名的值也将发生改变。

数字签名的产生过程:

数字签名的验证过程:

举例说明如下:

假设Alice要发送一份电子合同文件给Bob,Alice签名步骤如下:

  • Alice使用Hash函数将电子合同文件生成一个消息摘要;

  • Alice使用自己的私钥把消息摘要加密处理,形成一个数字签名;

  • Alice把电子合同文件和数字签名一同发送给Bob;

Bob收到Alice发送的电子合同文件以及数字签名后,为确信电子合同文件是Alice认可的,验证步骤如下:

Bob使用与Alice相同的Hash算法,计算收到电子文件的消息摘要;

Bob使用Alice的公钥解密来自Alice的加密消息摘要,恢复Alice原来的消息摘要;

Bob比较自己产生的消息摘要和恢复出来的消息摘要之间的异同。若两者相同,则表明电子合同文件来自Alice;反之,则表示电子合同文件已被修改。

不同的摘要算法以及不同的非对称加密方式,数字签名的算法也不尽相同。

签名验签方案

方案一:

签名方采用公钥密码算法和自己的私钥对明文进行加密,产生一个签名数据,这就是签名方的数字签名;

验签方采用公钥密码算法和签名方的公钥对签名数据进行解密,得到原文。

方案二:

发送方Alice:发送方采用某种摘要算法从报文中生成一个散列值(称为报文摘要);发送方用RSA算法(公钥算法EIGamal、SM2等)和自己的私钥对这个散列值进行加密,产生一个签名数据,这就是发送方的数字签名;将这个签名数据作为报文的附件和报文一起发送给接收方。发送方含有:签名者、原文、算法(Hash算法、公钥算法)、签名方私钥;

接收方Bob:接收方从接收到的原始报文中采用相同的摘要算法计算出一个散列值;报文的接收方用RSA算法(公钥算法EIGamal、SM2等)和发送方的公钥对报文附加的签名数据进行解密得到解密数据;如果解密数据和计算出的散列值相同,那么接收方就能确认报文是由发送方签名的。验签者、原文+签名、算法(Hash算法、公钥算法)、签名方公钥(数字证书)

方案三:

  • 签名方:签名者、原文、算法(Hash算法、公钥算法)、签名方私钥、证书

  • 原文+Hash算法->摘要1

  • 摘要1+私钥+公钥算法->签名值

  • 证书(公钥)

  • 传输:数据+签名值+证书

  • 验签方:验签者、原文、签名、算法(Hash算法、公钥算法)、签名方公钥(证书)、根证书

  • 有根证书

  • 发送方证书+证书+验签流程->验签失败或通过

  • 证书解析->公钥(验证颁发者、有效期、根证书的签名、证书作废列表)

  • 公钥+公钥密码算法+签名值->摘要1

  • 原文+摘要算法->摘要2

  • 摘要1==摘要2?相同通过,不同失败

  • 通过,数据是由证书持有者发来

  • 失败,数据校验失败,无效

数字签名报文规范

PCKS7、PCKS 1、P7b

  • Attached:P7 — 含原文数据、签名证书、签名值

  • Detached:P7 — 含签名证书、签名值

  • Raw:P1 — 含签名值

数字签名安全性

  • 中间人攻击

  • 对单向散列函数的攻击

  • 利用数字签名攻击公钥密码

  • 暴力破解找私钥

  • 尝试对RSA的N进行质数分解

数字签名应用

  • 安全信息公告

  • 软件下载

  • 公钥证书

  • SSL/TLS

数字签名无法解决的问题

无法确认公钥的合法性:数字证书

如何构建一个可信的数字签名链条?由谁来颁发可信的数字证书?PKI

猜你喜欢

转载自blog.csdn.net/weixin_42369053/article/details/129709816