前言:


网络之间的通信通过传递报文的方式实现,在传递这些报文的过程中,为了保护报文内容不随意被窃取和修改,对报文进行加密就起到了至关重要的作用。

 

加密和解密:传统加密方法、现代加密方法。

 

传统加密算法:替换加密算法、置换加密算法。

现代加密方法:现代块加密方法。

加密和解密都依赖于算法的实现,但加密的安全性不能依赖于算法本身,因为算法是公开的,人人都可以知道。所以就需要通过另一种更安全的方式实现对数据报文的封装,这就需要密钥来实现。

 

密钥算法和协议:对称加密、公钥加密、单向加密、认证协议。


对称加密:加密解密使用同一个密钥,加密算法和解密算法有可能不同。

     常见的对称加密算法:DES、3DES、AES

     特性:(1)加密、解密使用同一个密钥;

          (2)将原始数据分割为固定大小的块,逐个进行加密。

     缺陷:(1)密钥过多;

          (2)密钥分发困难;

      算法:DES、3DES、AES

公钥加密:密钥分为公钥与私钥

     公钥:从私钥中提取产生;可公开给所有人;pubkey

     私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key

     特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;

     用途:数字签名(主要在于让接收方确认发送方的身份);

          密钥交换(发送方用对方公钥加密一个对称密钥,并发送给对方);

          数据加密;

     算法:RSA,DSA,ELGamal


单向加密:即提取数据指纹(特征码);只能加密,不能解密;

     特性:定长输出、有雪崩效应(初始数据的微小改变将导致加密结果的巨大变化);

     功能:测试数据完整性;

     算法:md5,sha1,sha224,sha256,sha384,sha512;


密钥交换(IKE):

     公钥加密、DH算法。

 


单对单加密解密

单对单加密解密机制:

加密阶段:

第一步:B生成数据。

第二步:B使用单向加密算法提取数据的特征码。

第三步:B使用自己的私钥对特征码进行加密并附于数据的后面进行数字签名。

第四步:B生成一个随机密码使用对称加密的方法对数据和加密的特征码进行统一加密。

第五步:B获取A的公钥。

第六步:B使用A的公钥对对称加密使用的密码进行加密并附于数据后面。

解密阶段:

第一步:A收到数据后,先使用自己的私钥对对称加密的密码进行解密,获得对称加密的密码。

第二步:A使用解密的得到的密码对数据进行解密,得到数据和B加密的特征码。

第三步:A使用B的公钥对特征码进行解密,从而验证了数据来源的可靠性(能够解密该特征码说明此数据来源于B)。

第四步:A使用同样的单向加密的算法提取数据里的特征码,并于解密得到特征码进行比对,从而验证数据的完整性(A提取特征码和B加密的特征码比对结果如果一样,说明数据是完整的,在传输过程中并没有被随意修改)。

 

此种加密解密的方式虽然为数据的传输提供了加密解密的机制,保证了数据传输中的安全性,但在此种机制中,有一个环节是有漏洞的。在B获得A的公钥对数据进行加密时,B并不知道获得的公钥是否真正来源于A,同样的A解密特征码时获得B的公钥时也并不能确定该公钥是否真正来源于B,这就在数据传输中存在了危险性,在传输过程中就会有第三方的插入,但传数据的双方却并不知情。这就是中间人***。为了弥补这种危险性,就需要第三方的存在来验证传输数据双方的真身。这个第三方验证机构就是CA。

 

CA就是为了保证通信双方都能可靠的拿到对方公钥,而且双方都公信的第三方通信机构。

PKI(公钥基础设施):Public Key Infrastructure:

             签证机构(CA)

             注册机构(RA)

             证书吊销列表(CRL)

             证书存取库。


   x.509v3:定义了证书的结构以及认证协议标准。

         ( 版本号、序列号、签名算法ID、发行者名称、有效期限、主体名称、主体公钥、发行者的唯一标识、主体的唯一标识、扩展、发行者的签名)

  CA会根据x.509协议所规定的内容进行单向加密生成特征码,再用CA自己的私钥对特征码进行加密附加到证书后面生成发行者的数字签名。

 



通信的双方在通信之前都要获取对方的公钥信息,通过CA来获取公钥就会变得安全很多,为了实现此种安全,双方拿到对方的公钥时验证证书就显得尤其重要,所以我们就要了解CA的工作模式。

CA是如何工作的:

第一步: 要用CA的公钥解密CA的签名,如果能解密说明证书来源可靠。

第二步:用同样的单向加密算法提取证书内容特征码,并与CA的数字签名进行比对,如果一样,证书内容的完整性就得到了保证。

第三步:检查证书的有效期限是否过期。

第四步:验证主体名称是否为通信对方本身。

第五步:检查证书是否被吊销,也就是查看证书吊销列表。

        

           这里就又会出现一个不可靠的环节,当用户拿到CA的公钥解密CA的签名时,怎么确定拿到的CA公钥就是CA本身的公钥。


  注:CA的公钥证书由CA自身给自己签发,所有CA首先就要为自己自签证书。

 

以上讲解到都为单对单用户的手动通信,如果上升到网络层面的通信,进行加密解密的方式都不需要用户进行手动通信,所以基于服务器和客户端之间的通信机制更为复杂。

 




服务器和客户端之间通信的协议主要有两种

SSL:安全套接字层(SSL 1.0,SSL 2.0, SSL 3.0)

TLS:传输层安全(TLS 1.0, TLS 1.1 ,TLS 1.3)

 

服务器和客户端之间的通信(基于SSL的通信):

SSL会话基本过程:

(1)客户端向服务器端索要并验证证书。

(2)双方协商生成“会话密钥”。

(3)双方采用“会话密钥”进行加密通信。

SSL协议通信握手模型

 

第一阶段:客户端发出请求(ClientHello)

首先客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。

在这一阶段,客户端主要向服务器发送以下信息:

(1)客户端支持的协议版本。比如TSL1.2

(2)客户端生成一个随机数,稍后用于生成“会话密钥”

(3)客户端支持的加密算法,比如AES,RSA

(4)客户端支持的压缩算法


第二阶段:服务器回应(ServerHello)

服务器收到客户端请求后,向客户端发出回应,这叫做ServerHello。

在这一阶段。服务器主要向客户端回应如下信息:

(1)确认使用的加密通信协议版本,比如TSL1.2,如果客户端与服务器支持的版本不一致,服务器将关闭加密通信

(2)服务器端生成一个随机数,稍后用于生成"会话密钥”

(3)服务器确认使用的加密算法

(4)服务器的证书

(在此阶段,如果服务器需要验证客户端身份,就会再发出一个请求,要求客户端提供“客户端的证书”,用来验证客户端身份。)


第三阶段:客户端回应:

客户端收到服务器端回应之后,首先验证服务器的证书(发证机构、证书完整性、证书持有者、证书有效期、吊销列表),确认无误后取出其公钥,如果验证内容有不一致的就会向访问者显示警告信息。

如果证书验证通过,客户端会发送以下信息给服务器端:

(1)客户端生成第三个随机数(pre-master-key),该随机数用服务器的公钥加密。

(客户端会用事先协商好的算法利用这三个随机数生成会话密钥)

(2)编码改变通知,表示随后的信息都将采用双方商定的加密算法和密钥发送

(3)客户端握手结束通知

(如果上一个阶段服务器要验证客户端身份的话,客户端会在这一步发送自己的证书及相关信息)


第四阶段:服务器的回应:

服务器端收到客户端的第三个随机数pre-master-key并用自己的密钥解密之后,利用事先协商好的算法对三个随机数生成和客户端一样的“会话密钥”

然后向客户端最后发送如下信息:

(1)编码改变通知,表示随后的信息都将采用双方协定好的加密算法和密钥发送

(2)服务器端握手结束通知

 

至此,整个握手阶段全部结束,接下来,客户端和服务器端进入加密通道进行通信,所有的通信内容也就被“会话密钥”进行加密,通信内容也就变得安全多了。