【知识】数字签名的原理和过程以及数字证书的作用

1. 摘要

本文用图例形式介绍数字签名的原理和过程,并说明其中数字证书的作用。

2. 内容

2.1 基础知识

摘要算法

摘要算法是单向算法,明文只能转换成密文,密文却无法转换成明文,这种算法也叫HASH算法,如SHA1,MD5,CRC,SHA256等。可以这样理解,几乎很难找到两个不同的明文能生成同一个摘要。所以摘要算法能够用于验证数据的完整性,防篡改。

一般在软件发布时会同时公布软件的摘要信息,用户下载软件后再自行计算一次摘要,如果和发布者公布的值一致,则认为该软件由发布者发布未经更改过。

对称加密

即加密和解密都用同样的密钥,如 AES,DES。

非对称加密

非对称加密即有两个密钥,一个用于加密(私钥),一个用于解密(公钥),并且是成对出现。用一个加密后需用另一个解密。公钥是公开的(大家都能看到),而私钥只能自己知道。常见的算法是RSA。

RSA算法的原理是基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。即一个大数很难被因式分解。

对称加密和非对称加密的作用都是对明文进行保护,但是他们都面临着一个问题,怎样分发密钥才安全?对称加密需要在网络中传输密钥显然不安全,而非对称加密确没有该问题。由于非对称密钥的公钥是公开的,所以即使在网络中传输也无所谓,所以现在互联网上大多都使用的非对称加密。但是这又产生了新的问题,怎样保证公钥的真实性,如果通信中有中间人存在,并且它伪造了通信呢?带着这些问题,数字签名和数字证书应运而生。

数字签名

数字签名的计算方法:算出内容HASH值,然后用私钥加密,这就是数字签名。
客户收到信息后,用公钥解密数字签名得到HASH值,然后算出内容的HASH值,两者相对比。

数字签名的作用: 不可抵赖与数据完整性
不可抵赖:如果公钥能解密,则内容一定是与该公钥对应的私钥加密而来,即可证明来源。
数据完整性:数字签名的HASH值和自己计算出的HASH值一致,即可证明该内容是完整的未经修改过。

但是数字签名不能确保"公钥"的真实性,第三方可偷换"公钥",达到与伪服务器通信的目的,这样又产生了数字证书。

数字证书

由权威证书中心CA(certificate authority,简称CA)颁发,作用是证明"公钥"的真实信。
数字证书里面包含了服务器的公钥,服务器的域名以及服务器所属的公司信息等内容,并且该信息是用CA的私钥进行加密的。客户请求服务时,服务器会同时发送数字签名和数字证书给客户。证书工作流程如下:

服务器向CA中心申请证书,CA负责核实服务器的真实性,并在证书里内置服务器域名证书使用者信息
客户浏览器或操作系统里内置有权威CA的公钥信息(即CA公钥不需要在网络中传输)
客户请求服务时,服务器把自己申请的数字证书和内容的数字签名一同发给客户
客户收到信息后在本地CA列表里查找CA公钥对数字证书解密,拿到真正的签名公钥,再用该公钥去解密数字签名,拿到HASH值去对比完整性

漏洞

CA的公钥是存储在本地计算机列表的,如果手动往列表里面导入了不可信的CA公钥,那么CA就可以仿冒,失去了权威性。

2.2 数字签名过程

假设现在有通信双方A和B,两者之间使用两套非对称加密机制。

现在A向B发消息。

那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。

要解决两个问题:
1. A的身份认证
2. A发送的消息完整性
那么就要用到上面所讲的基础知识。

数字签名的过程如下图:

简单解释:
A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。
B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。

对明文进行摘要运算,得到实际收到的摘要,将两份摘要进行对比,如果一致,说明消息没有被篡改(消息完整性)。

疑问1:
摘要使用A的私钥加密,如果被拥有A的公钥的第三者截获,不就可以获取到摘要了么?会不会对安全造成威胁。
不会。因为摘要是不可逆推出原文的。

疑问2:
由于网络上通信的双方可能都不认识对方,怎么认为A,B是各自标称的对应的实体呢?

2.3 引入CA数字证书后流程

B(就是鲍勃)去找“证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥(根证书),对鲍勃的公钥和一些相关信息一起加密,生成“数字证书”(Digital Certificate)。



A用“证书中心”的公钥解开B的数字证书,获得B的公钥信息,把双方传输的对称加密算法用B的公钥加密。

然后就可以进行通信了,与上面的数字签名相似。不同的是,使用了对称加密。这是因为,非对称加密在解密过程中,消耗的时间远远超过对称加密。如果密文很长,那么效率就比较低下了。但密钥一般不会特别长,对对称加密的密钥的加解密可以提高效率。

3. 电子合同的数字签名过程

电子合同的数字签名的相对简单点,全过程分两大部分,即签名与验证。

一侧为签名,一侧为验证过程。

发方将原文用哈希算法求得数字摘要,用签名私钥对数字摘要加密得数字签名,发方将原文与数字签名一起发送给接受方;

收方验证签名,即用发方公钥解密数字签名,得出数字摘要;收方将原文采用同样哈希算法又得一新的数字摘要,将两个数字摘要进行比较,如果二者匹配,说明经数字签名的电子文件传输成功。

1、数字签名的签名过程

数字签名的操作过程需要有发方的签名数字证书的私钥及其验证公钥。 具体过程如下:首先是生成被签名的电子文件(《电子签名法》中称数据电文),然后对电子文件用哈希算法做数字摘要,再对数字摘要用签名私钥做非对称加密,即做数字签名;之后是将以上的签名和电子文件原文以及签名证书的公钥加在一起进行封装,形成签名结果发送给收方,待收方验证。

2、数字签名的验证过程

接收方收到发方的签名结果后进行签名验证,其具体操作过程如下: 接收方收到数字签名的结果,其中包括数字签名、电子原文和发方公钥,即待验证的数据。接收方进行签名验证。验证过程是:接收方首先用发方公钥解密数字签名,导出数字摘要,并对电子文件原文做同样哈希算法得出一个新的数字摘要,将两个摘要的哈希值进行结果比较,相同签名得到验证,否则无效。这就做到了《电子签名法》中所要求的对签名不能改动,对签署的内容和形式也不能改动的要求。

4.参考

(1)数字签名原理简介(附数字证书)
https://www.cnblogs.com/yaowen/p/9133048.html

(2)区块链数字签名技术的过程及原理介绍
http://www.elecfans.com/blockchain/956793.html

(3)数字签名和数字证书的原理解读(图文)
https://www.wosign.com/News/news_2018101101.htm

(4)数字签名与数字证书入门级解读
https://blog.csdn.net/lbcwnu/article/details/88569438

你可能感兴趣的:(【知识】数字签名的原理和过程以及数字证书的作用)