1.加密方式
1.1对称加密
对称加密的秘钥只有一个:
data^x=result;
result^x=data;
将data使用x进行加密得到result,再使用x进行解密得到data。称x为对称加密的秘钥。
1.2非对称加密
非对称加密的秘钥有两个,一个称为公钥,一个称为私钥。公钥是公开的在网络中进行传输的,私钥是不公开的。 可以用公钥加密私钥解密,也可以使用私钥加密公钥解密。不能使用公钥加密,公钥解密,或者私钥加密,私钥解密。
1.3防止文本内容被篡改
首先将文本内容使用哈希散列形参一个字符序列(对文本有任何修改,哪怕一个标点,都会形成差异非常大的哈希结果),然后使用加密算法对字符序列进行加密形成一个数字签名。 当传输文本的时候,会将文本和数字签名一起传输出去,对方收到后将文本和数字签名进行拆分,文本按照哈希散列的形式生成字符序列,数字签名使用解密算法形成字符序列,然后对该字符序列进行比较即可,若一样则文本没有被修改,若不同则文本被修改了。 字符序列我们有时称之为数据摘要。
2.https的加密
2.1若使用对称加密
可以看到这是一个相当不安全的数据加密形式,一旦被拦截数据就会流失,对方可以使用公钥X来解密数据。
2.2若使用非对称加密
当客户端向服务端发送数据传输申请的时候,服务端会给客户端发送一个公钥,客户端使用该公钥对数据进行加密,并将加密之后的数据发送给服务端,服务端接收到数据使用与该公钥配对的私钥进行解密,从而拿到数据。 注意,使用这种方式进行通信,一对公钥私钥只能保证单向数据的可靠性,如果保证双向通信,需要有两对公钥和私钥。即服务端和客户端分别有自己的公钥和私钥,在通信阶段互换公钥即可。 同时,这种方式依旧有被非法窃取的风险,非对称加密特别浪费时间,没有对称加密效率高。
2.3对称与非对称加密结合
首先客户端发出通信申请,服务端将非对称公钥发给客户端,客户端使用非对称公钥对对称公钥X进行加密,再发送回服务端,服务端使用非对称私钥对其进行解密,拿到对称公钥X,从而来进行通信,这就避免了对称公钥X在网络中的非加密传输。而且使用对称加密进行数据传输,大大提高了效率。
3.中间人攻击
3.1中间人攻击原理
就算是使用对称与非对称加密结合,也不能保证数据的安全的,因为存在被中间人攻击的风险。 当用户端发起通信请求的时候,服务端将公钥S发送给客户端的过程中被拦截,中间人将公钥S替换为非对称公钥M,然后发给客户端,客户端将使用收到的M公钥来对对称公钥X进行加密,并发送给服务端,此时中间人再进行拦截,使用M’进行解密拿到公钥X,再使用S对X进行加密,并发送给服务端,服务端使用S’进行解密,此时客户端和服务端都不知道X已经被泄漏了,它们之后的通信中间人都可以使用X进行解密并获取。
3.2解决方案
中间人攻击的本质问题就是,客户端无法判断发来的秘钥协商报文是不是从合法的服务方发来的。因此引入CA证书机构来解决这一问题。 CA证书机构是一个合法的服务商,企业会向CA证书机构来申请证书: CA机构也有自己的公钥和私钥,它会将企业的基本信息(包括服务器公钥)转化为数据摘要,并使用CA机构自己的私钥来进行加密,形成该企业信息的数字签名。 并将该信息以及数字签名作为一个整体进行发送,客户端收到之后,会将信息生成数据摘要,将数字签名使用CA机构的公钥进行解密得到数据摘要,将两份数据摘要进行对比,判断信息是否被修改。 如果中间人拦截到了数据,对服务器公钥进行了修改,但由于数据签名是由CA机构的私钥生成的,拿不到CA机构的私钥就无法生成修改之后的数据签名,客户端进行对比一定会发现问题。 客户端在解密时如何得到CA机构的公钥信息呢?一般是浏览器内置的,或者会提示你下载。
|