对称加密

对称加密是最早的加密方式,对称加密只有一个密钥,解密和加密都用这个密钥

加密方式也比较简单,比如:A要发送消息给B

A用密钥把原文加密
B拿到加密后的消息用密钥解密,得到原文

caba8a9eda3805d819d8f7322d6ebd07.png

如果A要和多方进行加密通讯,那就必须把密钥交给很多人,这样就增加了密钥泄露的几率,别人拿到密钥后就能破解加密的消息了。

这就是对称加密最大的问题:密钥容易泄露。为了解决这个问题,出现了一种叫非对称加密的方法。

非对称加密

非对称加密中,有两个密钥:公钥和私钥

非对称算法的特性,可以简单但是不太严谨的理解为:
用公钥加密的文件,可以用私钥解密;用私钥加密的文件,可以用公钥解密
c1a267155677bb80968c4a522b0dc770.png

其中公钥是公开的,所有人都可以拿到公钥;私钥自己保管,只有自己知道
57ad33041589f42c45746bb49474e036.png

若B想要发送消息给A,过程如下:

B使用公钥把消息加密,然后将加密后的消息发送给A
A收到消息后使用私钥解密,得到原始消息

3895740b37b8af4cceaa9261c60e111d.png

若A收到消息后,要给B回复,过程如下:

A使用私钥将消息加密,然后将加密后的消息发送给B
B收到消息后使用公钥解密,得到原始消息

这时A突然想起来有些消息不能发给B,然后就告诉B说这个消息不是我发的。B就说不可能啊,我用你的公钥解开了加密的消息,这就是你发的。

这就是非对称加密新的使用场景,称为增信或信任,又因为所有人都能拿到公钥,所以我们不称A的行为叫加密,而是称之为签名,B的行为叫验签

正确的理解为:

公钥加密,私钥解密。
私钥签名,公钥验签。

上述A回复B的过程就变为:

A使用私钥对消息进行签名,然后将签名后的消息发送给B
B使用公钥对消息进行验签,得到原始消息

这样可以证明这个消息就是A发的

那这种加密方式是不是就安全了呢?我们看下面这个场景:

B手上的公钥被黑客掉包了,B使用黑客的公钥加密了消息
黑客又把B发送给A的消息拦截了,就可以用自己的私钥来解密这个文件

由于这种公钥不可靠问题的存在,所以就出现了CA机构

CA机构

CA机构的全称叫做证书授权中心(Certificate Authority),他的作用就是给公钥做认证。

CA机构是如何保证B拿到的公钥是A的公钥,而不是黑客的公钥呢?CA机构是这么做的:

CA机构用自己的私钥对A的公钥进行签名,这样就能证明这个公钥被CA机构验证过了
然后CA机构把这种签名了的数据发布到网上,这种数据我们称之为"证书"
证书可以通过一些官方渠道下载,证书中就包含已经被授权过的A的公钥
下载到了证书之后,通过CA机构的公钥来验签,通过之后我们就能放心地使用A的公钥了

但是如果CA机构的公钥被人掉包了怎么办
CA机构是经过严格审核和认证的第三方独立机构,大部分CA机构的公钥会作为一个证书或者根证书被直接内置在操作系统当中,只有具备极高权限的管理员级别的用户才可以调整操作系统中的证书。

在Windows系统中,被写入操作系统的证书可以通过WIN+R,然后输入certmgr.msc运行后查看
ac89c64395dde920add9dd89991dd799.png

这些证书处理着个人计算机与加密信任有关的方方面面,比如我们访问https的网站,实际上就是要接收那个网站的公钥,然后通过公钥建立加密通信的通道,在通道中进行网络数据的传输,网站的公钥也是要被CA机构签名的,这个公钥就包含在网站的证书中。

所以说电脑中内置的根证书就是互联网信任体系的一个根节点,如果说这里的证书不可靠的话,电脑中的信息就可能被窃取。由于这个原因,2013年,XX宝通过他的程序获得管理员权限,将他的根证书写入操作系统,这个行为在当时也是广受质疑。详细八卦可以查看知乎的相关话题

如果网站不安全,在访问https网站时,会有以下提示,说明和网站的连接虽然是https加密通道,但是相应的证书并没有被CA机构信任
4e661268398e00efc0b5be5b9e12f9ad.png

HTTPS

实际上https是非对称加密和对称加密综合应用的场景:

用户先准备一个对称加密密钥,再使用网站的公钥加密这个对称密钥,然后把数据发送过去
网站使用自己的私钥解密,得到对称密钥
后面的通讯都是使用对称加密进行通讯
连接结束以后对称密钥就会被销毁,下一次客户端连接的时候,又会准备一个新的对称密钥

为什么不全部使用非对称加密的方式
非对称加密,对于系统的消耗来说还是很大的,在https中只使用一次非对称加密,主要的数据传输还是使用对称加密去完成的,这样在性能占用尽量少的情况下,也保证了网络通讯的安全。