数字签名和数字证书

今天看了一篇写关于数字签名和数字证书的文章,觉得写的特别好,虽然自己也知道一些,但总是无法把相关概念的真正作用完全理解清楚,今天就试着依照自己看后的理解来复原一下数字签名和数字证书的作用。原文连接如下:https://mp.weixin.qq.com/s/tce0N_lsIJBazKCwuhPNbA

首先加密分为两种:对称加密和非对称加密。二者的区别在于加密和解密所使用的密钥是否一样,对称加密的加密和解密使用相同的密钥,非对称加密使用公钥加密,私钥解密,公钥和私钥不一样,且通常情况下无法通过其中任何一个来推出另一个。常用的公钥算法有RSA、ECC、SM2等。公钥算法都是基于数学上的难题来设计的,比如RSA依据数学上大整数因式分解的困难性来设计的,ECC基于椭圆曲线的离散对数问题等等。

那么问题来了,为什么会有两种加密方式,使用其中一种不就可以了吗。原因在于,对称加密的密钥分发是一个无法解决的问题。即我们使用对称加密来加密消息,但是前提是双方必须提前协商好密钥。而如果双方无法见面如何来传送密钥呢?非对称加密算法可以解决这个问题。非对称加密的公钥是公开的,任何人都可以获得,私钥只能自己藏好。假设Alice要给Bob发消息,Alice只需要使用Bob的公钥来加密信息,因为私钥只有Bob自己有,因此即使被他人截获,也没有办法解密信息。Bob收到信息后使用私钥解密,拿到明文信息。既然非对称加密那么好,为什么还要用对称加密呢?因为非对称加密算法复杂,计算量大,耗时长,因此只用来加密密钥这种比较短的信息。

到目前为止,似乎可以顺利通信了。但是还有一个问题:Bob如何确定此时通信的是Alice而不是Eve呢?因为Eve也具有Bob的公钥,完全可以冒充Alice来与Bob通信。那么如何来解决这个问题呢?即如何向Bob证明Alice是Alice呢?我们可以想到必须要将Alice自己独有且对方可以验证的东西发给对方,那什么是Alice独有对方又可以验证的呢?当然是Alice的私钥,此时不需要将私钥传给Bob,只需要将加密后的摘要用私钥签名然后加上加密的密文发给对方即可,Bob使用Alice的公钥来验证签名从而确定是Alice,并且通过对密文使用同样的Hash算法,计算出的结果与摘要比对可以确定数据是否被篡改。(这里对摘要签名有两个原因,一个是签名计算量大,直接对密文签名,耗时长,签名摘要可以起动同样的作用且用时短;另外一个原因就是签名摘要可以保证数据是否完整,防篡改)。现在Alice可以使用自己的私钥来对加密后的摘要进行签名了,从而证明通信的的确是Alice。那么通信就安全了吗?答案是不安全,因为Bob不能确定Bob手里的公钥就是Alice的?在传送公钥的过程中,Eve可以将Alice的公钥替换成自己的说这就是Alice的公钥,那以后Bob与Alice的通信岂不全被Eve看到啦?如何解决这个问题呢?答案是利用数字证书。即找一个第三方权威机构来证明这个公钥确实是Alice的。这时候只要Alice去向CA(证书颁发机构)申请一个证书(证书中包含证书的颁发机构、有效期、公钥、持有者等信息),CA用自己的私钥对这些信息进行签名,将签名结果和这些信息放在一起,这就叫做数字证书。这样,Alice将这个证书发给Bob,Bob利用CA的公钥进行验签。另外证书颁发机构是有层级关系的,下级CA的证书是需要由上级CA签名的,那么一定存在根证书颁发机构,他们的证书由自己来签。那么如何保证根证书的可靠性?这是操作系统和浏览器预装的,由微软、苹果等操作系统厂商来选择根证书。到此就讲完了。

其实只要知道如何解决下面的问题,数字签名和数字证书就全都明白了。(还是以Alice向Bob通信来说明)

1、Bob如何确定收到的信息来自Alice而不是Eve等其他人?数字签名

2、Bob如何确定自己手上的公钥确实来自Alice而不是由Eve等其他人冒充的?数字证书

好多地方讲的不细,不过那些地方我自己明白,没看明白的请看这篇文章:https://mp.weixin.qq.com/s/tce0N_lsIJBazKCwuhPNbA

原文地址:https://www.cnblogs.com/zgang/p/13715019.html