网络安全1 - 数字证书,对称加密,非对称加密和数字签名

一、问题的提出

网络世界最本质的需求就是通信,我们应该如何确保通信的安全性:

问题一:如何确保数据发送方的真实可靠?

问题二:如何确保数据在传输过程中未被查看?

问题三:如何确保数据在传输过程中未经修改?

二、概念

1. 数字证书

数字证书可以理解为网络世界中的通行证,它可以表示通信双方的真实身份。

举个例子,我是人口普查人员,我要上门录入你和你家人的详细信息,这些信息都是非常私密的,当我敲开你的家门时,你肯定会质疑我的身份,但是当我给你展示了我的真实证件和目的之后,你会选择配合并拿出你的身份证、户口本等可以证明你身份的证件让我存档。在这个过程中,我需要的信息是你和你家人的居住信息,我的证件就是一种“证书”,你和你家人的身份证也是一种“证书”,这些证书都可以表名各自的真实身份。这里存在一个问题“如何确保双方提供的证书是真实的?”,这个问题需要证书认证机构(CA)和数字签名联合来解决。

(1) 如何查看数字证书

目前,主流的浏览器都在地址栏的左侧显示当前网站的认证状态,以Sougou浏览百度为例:

凡是显示绿色盾牌图标的均是已认证过的站点,可以放心访问。点击这个盾牌即可查看证书内容:

(2) 数字证书-常规

(3) 数字证书-详细信息

(4) 数字证书-证书路径

2. 对称加密和非对称加密

这两个概念属于密码学的范畴,它们均属于加密算法,数字证书和签名使用了这种技术来保证数据传输的安全性。

(1) 对称加密是加密过程和解密过程使用相同的密钥,如下图:

(2) 非对称加密是加密过程和解密过程使用不同的密钥,如下图:

显然,后者难度远高于前者,后者的计算对性能的消耗也远高于前者,在安全性方面也是如此。

值得注意的是,非对称加密的两个密钥分别是公钥(Public Key)和私钥(Private Key),公钥是可以公诸于众的密钥(上面第二张图中包含百度的公钥),它的作用是加密信息和验证签名(解密);私钥是需要自己保管不能公布的密钥,它的作用是解密由公钥加密的数据和签名(加密)。所以,人人都可以使用公钥加密,但只有私钥持有者可以解密信息,这种设计天生适合应用于C/S这种多对一的架构。

3. CA (Certificate Authority)

CA又称数字证书认证机构,它是一个第三方的具备公信力的数字证书和数字签名颁发机构。简言之,CA负责为实体(网站、邮件、公司、组织或个人)签发数字证书,并利用数字证书生成数字签名,以便客户验证实体的身份。为了实现这一目标,CA拥有自己的公钥和私钥,而且CA的公钥已经安装在了绝大多数操作系统上。

目前,全球有多家Root CA(根证书认证机构),Root CA下又有若干分支机构,这些分支机构也是可信的。

我们以百度的数字证书路径为例,百度的证书是GlobalSign RSA OV SSL CA 2018颁发的,它在Windows10的路径是"Internet->内容->证书->中间证书颁发机构->GlobalSign RSA OV SSL CA 2018",如下图:

GlobalSign RSA OV SSL CA 2018的证书由GlobalSign Root CA颁发,它的路径在隔壁的"Internet->内容->证书->受信任的根证书颁发机构->GlobalSign Root CA",如下图:

4. 数字签名

数字签名是使用特定的加密算法对数据摘要进行加密生成的一串字符串,由CA生成的数字签名可以防止数据在传输过程中被篡改。

(1) 数字签名的生成

以上面百度的数字证书为例,百度在向CA申请数字证书时会提交域名、公司名、国家、地点等数据信息,CA生成数字签名的过程大致如下:

a. 从数字证书中提取摘要信息并拼接成字符串;

b. 将摘要字符串进行Hash计算得到Hash值;

c. 使用CA的私钥将Hash值加密成数字签名;

d. CA将数字签名设置在证书中颁发给百度。

(2) 数字签名的使用

当某浏览器需要访问百度时需要建立与百度服务器的链接,百度服务器需要将自己的证书(包含公钥)返回给浏览器,为了防止数据传输过程中数字证书内容被修改(比如公钥)。

这里存在一种“中间人篡改”的可能,如下图:

刚才说过证书认证机构(CA)和数字签名联合解决了防止数据被篡改的问题,那么具体是如何实现的呢,浏览器在收到网站返回的证书之后会进行以下校验:

a. 浏览器使用CA的公钥解密证书中的数字签名,如果不能解密说明数字签名被修改过;

b. 浏览器提取数字证书的摘要,经过Hash之后得到摘要Hash值;

c. 将a中解密的摘要Hash值和b中计算出的摘要Hash值进行比对,如果不同说明数字证书的内容被篡改过;

d. 数字证书有效期校验,还要确认数字证书中的域名是否是浏览器需要访问的域名,如果不是则说明中间人用某个合法的CA证书替换了网站的CA证书,注意,这里两个证书都是合法的,但是对应的域名不同。

数字签名和验证签名的整个流程可参考下图:

纵览整个流程,网络世界是通过以下因素共同保障了通信的安全可信:

a. 权威的CA机构,以及它所拥有的公钥和私钥;

b. 公开的摘要生成算法;

c. 数字证书;

d. 数字签名;

e. 提供服务的应用(比如网站),及其所拥有的公钥和私钥;

f. 浏览器。

三、答案

最后,我们来正面回答一下开篇提到的三个问题:

问题一:如何确保数据发送方的真实可靠?

答: 使用CA的公钥验证签名,提取证书摘要,比对摘要,确认目标域名。

问题二:如何确保数据在传输过程中未被查看?

答: 发送端加密数据,接收端解密数据。

问题三:如何确保数据在传输过程中未经修改?

答:公钥加密,私钥解密;私钥加密,公钥解密。无法解密,即为修改。

在HTTPS的实现中,实际上在会话双方确认对方身份之后,会产生一个“会话密钥”,然后使用对称加密技术进行数据加密解密。这样做既可以保证安全,又可以节省计算资源。

四、参考

https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

https://blog.csdn.net/update7/article/details/111187245

posted @ 2022-11-20 14:47  白马黑衣  阅读(765)  评论(0编辑  收藏  举报