数字签名与数字信封

发布于:2022-12-11 ⋅ 阅读:(2791) ⋅ 点赞:(2)

目录

1. 什么是数字签名?

2. 数字签名的主要功能

3. 数字签名和验签的原理

3.1 数字签名和验签的步骤流程

3.2 数字签名的制作和验证过程

3.3 RSA算法签名验签过程

3.4 SM2算法签名验签过程

4. 签名分类

4.1 PKCS #1签名

4.2 PKCS #7签名

4.3 算法分类

5. 数字信封

5.1 什么是数字信封?

5.2 数字信封机制的具体流程

5.3 签名 、数字信封、证书的关系


1. 什么是数字签名?

数字签名是电子签名技术的一种。

大多数应用场景提到的电子签名,实际指的就是数字签名。由于保持技术中立性是制订法律的一个基本原则,基于公钥密码理论的数字签名技术未必是可靠电子签名的唯一技术,因此法律上会使用更广义的概念以适应今后的技术发展。

数字签名背后的思想是模仿传统手写签名,该思想是能够以某种方式"签署"一份数字文档,该签名具有物理签名一样的法律效力。与物理世界中的手写签名相对应,数字签名可以理解为数字世界的电子签名。

简单地说,就是实现签名人身份真实、签署后的文档不可修改、签署行为不可抵赖。数字签名技术是目前最符合可靠电子签名要求、应用最普遍、可操作性最强的技术之一。

数字签名是公钥加密技术(也称为非对称加密)与数字摘要技术(也称为散列算法或哈希算法)相结合的应用。基于公钥加密技术,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意保密。结合使用公钥技术与散列算法来创建数字签名,可用作数据完整性检查并提供拥有私钥的凭据。


2. 数字签名的主要功能

数字签名目前只能使用非对称密码算法实现。

数字签名的主要功能包括:

  • 接收方能够确认发送方的签名,但不能伪造。
  • 发送方发出签过名的信息后,不能再否认。
  • 接收方对接收到的签名信息也不能否认。
  • 一旦发送方和接收方出现争执,仲裁者可有充足的证据进行审判。

由此可知,数字签名的主要作用:保证信息传输的完整性、发送者的身份认证、 防止交易中的抵赖发生


3. 数字签名和验签的原理

3.1 数字签名和验签的步骤流程

  • 信息发送者使用摘要算法对源文件data处理生成数字摘要值 A。
  • 信息发送者使用自己的私钥sk对摘要值A进行签名(加密的过程)signatureData。
  • 信息发送者把原文data和签名值signatureData一起发送出去。
  • 信息接收者使用相同的摘要算法对接收到的原文data进行摘要计算,得到新的摘要值B。
  • 信息接收者使用信息发送者的公钥pk对签名值signatureData进行验签(解密的过程),获得信息发送者的摘要值A。
  • 信息接收者比较这两个摘要值A和B是否相同,如果相同则确认信息发送者的身份和原文信息没有被修改过;否则,表示原文信息已经被修改过。

整个签名和验签流程如下图所示:

签名人的数字证书是由证书颁发机构(CA)验证申请者真实身份后颁发,证书绑定申请者真实身份信息,可验证签名者身份真实性;数字签名后,数据一旦被修改,数字签名立即失效,接受方即可发现签署后的数据已经被修改,无法在不被发现的情况下修改数据;证书私钥由证书持有者在自己本地生成的,由证书持有者自己负责保管,可确定为签名人专有,签署行为不可抵赖。

此外,《电子签名法》第16条规定,电子签名需要第三方认证的,由依法设立的电子认证服务提供者提供认证服务。 


3.2 数字签名的制作和验证过程

上图已经很清晰的概括了数字签名验签的过程。我们有个疑问:为什么要对消息摘要进行数字签名,而不是对消息直接进行数字签名呢?

签名的本质是利用私钥对消息摘要进行加密。因为签名也属于公钥密码体制,它也是模指数运算,因而,计算机效率特别低,若消息长到一定程度,根本无法计算。为解决这一问题,就计算消息摘要,因为消息摘要的长度约为 200 多比特左右,而且是固定长度(无论消息多长,其不同摘要算法对应的摘要值长度都是固定的),这一长度,是公钥密码体制可接受的范围。因此,在签名中,都是对消息的摘要进行签名。 


3.3 RSA算法签名验签过程

RSA签名:

明文加上摘要算法运算得到摘要值,然后用摘要值加上签名算法在加上RSA私钥做非对称加密运算得到签名结果。

RSA验签:

明文加上摘要算法运算得到摘要值,然后用RSA公钥加签名算法对签名结果做非对称解密得到摘要值,最后对比两个摘要值的一致性。

3.4 SM2算法签名验签过程

SM2签名:

明文加上摘要算法和SM2公钥运算得到摘要值,然后摘要值加上签名算法和SM2私钥做非对称加密得到签名结果。

SM2验签:

明文加上摘要算法和SM2公钥运算得到摘要值,然后摘要值加上签名算法和SM2公钥做非对称加密得到签名结果,最后比较两个签名结果得一致性。


4. 签名分类

4.1 PKCS #1签名

  • P1签名:签名结果中不带公钥证书和原文内容。
  • P1签名也称为裸签名,因此在验签的时候,需要提供签名值、原文和签名证书三种数据。

PKCS #1 规范规定了使用RSA算法进行签名时摘要格式。摘要格式用ASN.1描述:

DigestInfo::=SEQUENCE{

        digestAlgorithm DigestAlgorithm,

        digest   OCTET STRING

}

4.2 PKCS #7签名

  • P7签名:分为Attach和Detach
  • P7Attach签名:

        将原文数据、签名证书、签名证书算法、签名数据封装成P7签名格式的数据结构。

        因此,在验签的时候只提供签名结果就可以。

  • P7Detach签名

        将签名证书、签名算法、签名数据封装成签名数据。

        注:没有原文信息,因此,在验签的时候不光提供签名结果,还要提供明文。

PKCS #7 和RFC2315 规范规定了使用数字签名消息的具体封装格式。数字签名消息封装格式用ASN.1描述:

SignedData::=SEQUENCE{

       version Version,

        digestAlgorithm DigestAlgorithmIdentifiers,

        contentInfo ContentInfo,

        certificates[0] IMPLICIT ExtndedCertificatesAndCertificates OPTIONAL,

        crls[0] IMPLICIT CertificatesRevocationLists OPTIONAL,

        signerInfos SignerInfos

}

4.3 算法分类

  • 常见对称加密算法:DES、3DES、AES、SM1、SM4
  • 常见非对称加密算法:RSA、SM2、ECC
  • 常见摘要算法:MD5、SHA1、SHA256、SM3

5. 数字信封

5.1 什么是数字信封?

对称密码算法的优点是加解密运算非常快,适合处理大批量数据,但其密钥的分发与管理比较复杂。而非对称密钥算法的特点是公钥与私钥分离,非常适合密钥的分发与管理;但其运行速度不快,又不适合处理大批量数据。

如果将对称密码算法和非对称密码算法的优点结合起来,则既能处理大批量数据,又能简化密钥分发与管理,于是数字信封机制应运而生。

数字信封并不需要分发和管理对称密钥,而是随机产生对称密钥,采用对称密码算法对大批量数据进行加密,并采用非对称密钥算法对该对称密钥进行加密;解密时,先用非对称密码算法解密后获得对称密钥,然后再使用对称密码算法解密密文数据后获得数据明文。

数字信封的功能类似于普通信封,采用对称密码算法对消息进行加密类似于信纸上的内容,采用非对称密码算法对对称密钥加密类似于外层的信封,信封将信纸包装起来,保证了消息的安全性。

对上述进行总结,我们知道数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。数字信封是实现信息完整性验证的技术。


5.2 数字信封机制的具体流程

数字信封机制的具体流程如下:

  1. 消息发送方A和消息接收方B需要预先交换对方的非对称公钥。
  2. 消息发送方A随机产生对称密钥,并用该密钥和对称算法对消息进行加密。
  3. 消息发送方A用消息接收方B的公钥和非对称算法对上述对称密钥进行加密.
  4. 消息发送方A将消息密文和对称密钥密文一起发送给消息接收方B。
  5. 消息接收方B收到消息密文和对称密钥密文。
  6. 消息接收方B使用自己的私钥和非对称算法解密对称密钥密文后,获得对称密钥明文。
  7. 消息接收方B使用上述对称密钥和对称算法对消息密文进行解密后,获得消息明文。

数字信封的生成和解开过程如下图所示:

 PKCS #7 规范定义了数字信封消息的具体封装格式。数字信封消息封装格式用ASN.1描述如下:

EnvelopeData::=SEQUENCE{

       version Version,

        recipientInfos RecipientInfos,

        encryptedContentInfo EncryptedContentInfo

}

 RecipientInfos::=SET OF RecipientInfos

EncryptedContentInfo::=SEQUENCE{

        contentType ContentType,

        contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,

        encryptedContent[0] IMPLICIT EncryptedContent OPTIONAL

}


5.3 签名 、数字信封、证书的关系

三者没有任何的关系!!它们三个的作用是不同的。

  • 签名:为了验证身份的;
  • 信封:为了传输信息的;
  • 证书:承载公钥和发布者一些信息的。

他们作用不同,所以没有必然的联系!!!

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到