1.对称加密
- 加密方和解密方使用同一套密钥。即:发送方通过使用相应的加密算法和密钥,对将要发送的信息进行加密;对接收方来说,使用解密算法和相同的密钥解锁信息,从而有能力理解对方的信息。
- DES、IDEA、AES、SM1、SM4
2.非对称加密
- 非对称加密中,发送方和接收方使用的是不同的密钥,主要解决的问题是防止在密钥协商的过程中发泄漏。
- RSA、ECC、SM2
3.散列算法
- MD5、SHA(SHA1、SHA2)、SM3
4.非对称加密
非对称加密使用两个密钥,一个是public key,一个是private key。通过一个特殊的数学算法,使得数据的加密和解密使用不同的密钥。因为用的是不同的密钥,所以称为非对称加密。
如果使用非对称加密,一般遵从这样的原则:公钥只用来加密,私钥只用来解密。另外,我们注意到一点,因为私钥不会在公网上传播,因此,私钥也可以认为是个人身份的证明。
- 如果在发送过程中,有人(例如C)修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息也不正确,但是B并不知道。所以这里就要解决两个问题:
- (1).A的身份认证(确保消息是A发出的)
- (2).A发送的消息完整性(确保消息没有被其他人篡改)
-要解决上面两个问题就要引入一个概念:数字签名。要讲解数字签名,还需要先了解另一个概念:消息摘要。
消息摘要是将消息经过哈希转换成一个固定长度的、值唯一的字符串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要反推明文(似乎SHA1已经可以被破解了,SHA2还没有。一般认为不可破解,或者破解需要耗费太多时间,性价比低)。利用这一特性,可以验证消息的完整性。
既然消息摘要可以保证消息的完整性,而private key又可以作为身份证明,那么用private key加密过的消息摘要就同时解决了上述的两个问题——身份认证和消息完整性,这个“由private key加密的消息摘要”也就是数字签名。
- 详细过程如下所示:
(1).A和B都各有一个public key和一个private key,这些key根据相应的算法已经生成好了。private key只保留在各自的本地,public key传给对方;
(2).将数据明文进行摘要(hash)运算后得到摘要(消息完整性),再将摘要用A的private key加密(身份认证),得到数字签名;然后用B的public key加密数据加密得到密文,最后将密文和数字签名一块发给B;
(3).收到A的消息后,先将密文用自己的private key解密,得到明文。对明文进行摘要运算,得到实际收到的摘要;再将数字签名用A的public key进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。将两份摘要进行对比,如果一致,则说明消息没有被篡改(消息完整性);
5.CA
现实中,通过CA(Certificate Authority)来保证public key的真实性。CA也是基于非对称加密算法来工作。有了CA后,B会先把自己的public key(和一些其他信息)交给CA。CA用自己的private key加密这些数据,加密完的数据称为B的数字证书。现在B要向A传递自己的public key,B传递的是CA加密之后的数字证书。A收到以后,会通过CA发布的CA证书(包含了CA的public key),来解密B的数字证书,从而获得B的public key。(备注:现实的数字证书不仅包含所有者public key,还包含证书信息:过期时间和序列号,所有者信息:姓名等)
CA把自己的CA证书集成在了浏览器和操作系统里面。A拿到浏览器或者操作系统的时候,已经有了CA证书,没有必要通过网络获取,那自然也不存在劫持的问题。
6.SSL/TLS的应用
- 非对称加密算法比对称加密算法要复杂的多,处理起来也要慢得多。如果所有的网络数据都用非对称加密算法来加密,效率会很低。所以在实际应用中,非对称加密只会用来传递一条信息,那就是用于对称加密的密钥。当对称加密的密钥确定后,A和B还是通过对称加密算法进行网络通信。这样,既保证了网络通信的安全性又不影响效率,A和B也不用见面商量密钥了。所以,在现代,A和B之间要进行安全,省心的网络通信,需要经过以下几个步骤:
- (1).通过CA体系交换public key;
- (2).通过非对称加密算法交换用于对称加密的密钥;
- (3).通过对称加密算法加密正常的网络通信;