SSL工作原理和握手过程

1. 密码学的基本概念

4个目标属性:
机密性:指保密信息不会透漏给非授权用户或者实体;(有些加密算法已经被破解,因此机密性得不到保障)
完整性:指信息在生成、传输、存储和使用过程中发生非授权篡改,均可以被检测到;
身份认证:指一个消息的来源和消息本身被正确的标识,同时确保标识没有伪造。
不可否认性:指用户无法在事后否认曾经进行信息生成、签发和接受行为。(对称加密实现不了这个,因为大家密钥一样,都可以加密解密,不能确定信息是谁发的。)
可用性:指保障信息资源随时可以提供服务的能力特性;

2.加密类型

我们为了安全的传输数据,需要在传送数据之前加密,然后拿到数据之后解密得到原有的数据。而依据使用方式的不同,我们一般分为两类。

2.1.对称加密

对称加密,就是指 加密和解密 使用的是同一个密钥。
这就存在一个问题,就是密钥怎么传递?
如果密钥泄漏出去了,那么加密传输的数据就和明文传输没有区别了。
所以对称加密的密钥,要使用 离线传递密钥,或者使用 非对称加密的方式传递 密钥。
对称加密的问题主要是不可否认性,但是也有可取之处。对称加密的优势是,加密效率高,大约是非对称加密的1000到10000倍,也就是说同样的加密过程,对称加密的速度快的多,所以现在许多场景仍然使用,比如系统登录,ssh。

2.2.非对称加密

非对称加密,就是指 加密和解密使用不同的密钥。
依据持有密钥的范围不同,我们分为 公钥 和 私钥。也就是server持有私钥,而公钥可以明文传递给client。
这里有2个特性,就是 公钥加密的数据,只有私钥能解开,而私钥加密的数据,公钥也能解开。这是成对的,将加密和解密
私钥是不能公开的,而 公钥是可以公开的,所以这里保障的是 client 传递给 server 数据的机密性。
如果需要 保证 server 和 client 之间双向通讯的机密性,则需要 2对 密钥。即 server 将 自己的公钥传递给client,client也要把自己的公钥传给server。

这里遇到一个问题,谁都可以把自己的公钥传出去,那么你知道 这个公钥是 server的,还是别人的呢?证书就是为了解决这个问题的。
证书是由第三方机构(CA中心)签发的,server生成了自己的公钥之后,将公钥发给 CA中心,CA中心也有自己的CA私钥,他会用CA私钥在server的公钥后面加一段信息,生成的文件就是证书。其实原理也是私钥和公钥。增加的信息就是你这个机构的信息 和 信息的加密版本。client收到之后解密对比即可确定你的信息。
通常我们电脑预装系统的时候,就会自带这个机构的证书(可以理解为公钥),所以server传递过来的证书,我们可以解密对比,是对的,就是信任的,当然也可以自己签发一个证书,但是由于我们都没有预装你的证书,所以使用的时候就会警告你,这个server不可信任。
CA中心维护这些证书都是需要费用的,一般就是公司才会去申请,而且签发的时候 存在一个签发日期和有效期。这样CA中心也就可以不断的签发证书。

3. 加密算法种类

3.1 对称加密算法

只提供机密性,不提供不可否认性。
举例:
不安全对称加密算法:
DES,3DES,RC2,RC4,SKIPJACK
安全对称加密算法:
AES(建议用128位不要用),SM4,IDEA

3.2 非对称加密算法

提供机密性、完整性、身份认证和不可否认性,而且至今未被攻破。
举例:RSA, ECC, EI Gamal, SM2 和 DSA

3.3 散列算法(也称为 Hash算法,或 信息摘要)

散列算法的特点是,散列算法处理的消息很难还原出信息,且2条消息生成相同散列值的可能性几乎不存在。这种特点是单向加密,且输出长度固定。
举例:
不安全散列算法:MD2,MD4,MD5,SHA1,RIPEND,HAVAL-128
安全散列算法:SHA2,SHA3,HMAC,HAVAL-160及其以上.

4.SSL/TLS握手过程

SSL/TLS集成了各种加密算法的工具,主要是非对称算法和散列算法。

4.1 SSL/TLS属于TCP/IP的哪一层?

网上查询有2中观点,一种说是位于解释层,一种说是位于传输层,其实这是基准不一样。有人是依据OSI模型,分析SSL各种子协议方式而定位在OSI模型中的解释层。但是TCP/IP只使用了OSI模型中的5层,不包括解释层,所以在实际的TCP/IP中,我们把它定位在传输层,也就是和 TCP和UDP在一起,是一种安全的传输层协议。
我们知道 TCP是有3次握手和4次挥手的,所以SSL/TLS 也有自己的握手过程。

4.2 TLS/SSL握手协议工作原理

在讲之前,我们明确这其中有2个角色 SSLclient 和 SSLserver:我们称之为 4次握手。
https://blog.csdn.net/hherima/article/details/52469674

(1)Client_hello 消息: 客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息;
(2)Server_hello + Server_certificate + Sever_hello_done 三个消息(可能是4个消息): 服务端选择对应的加密算法 回应请求,并将 服务端的证书 传给 客户端;
(3)Client_key_exchange + Change_cipher_spec + Encrypted_handshake_message:客户端验证 服务端证书通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器;并通知服务器参数协商完成,并与服务器握手验证。(单向加密时,此步骤省略)
(4)Change_cipher_spec + Encrypted_handshake_message:服务端验证数据和密钥的正确性,验证通过之后,发送当前通信参数给客户端,握手结束。

上图中的蓝色部分是可选的,上面没有介绍,也就是是否需要双向加密,没有蓝色部分就是单项加密,也就是加密 客户端 到 服务端的通信。这里需要增加3步,也就是服务端需要验证客户端的证书。

还有其他的重建协议,会话缓存握手过程 和 重建连接 过程情况类似,本文不再介绍,详细请查看 参考文献1.

参考文献1:HTTPS协议详解(四):TLS/SSL握手过程
参考文献2:SSL工作原理
参考文献3:密码学基本概念

你可能感兴趣的:(安全设计,信息安全,安全,密码学,https)