IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 数字签名与数字信封 -> 正文阅读

[网络协议]数字签名与数字信封

目录

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 签名 、数字信封、证书的关系

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

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

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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:27:49  更:2022-09-24 21:30:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:26:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码