HTTPS = HTTP + TLS
建立TCP连接后,开始TLS认证和协商加密密钥,然后传输数据。
TLS从1.0、1.1、1.2到1.3。除了减少RTT,还有安全性上的升级。
TLS:认证、保密性、完整性。
TLS使用非对称密钥算法交换用于加密的对称密钥。
TLS1.2及之前使用RSA交换密钥,TLS1.3使用DH算法升级版交换密钥。
RSA密钥交换不是前向安全算法(私钥泄漏后,之前抓包的报文都能被解密)。前向不安全,私钥参与了密钥交换,安全性取决于私钥是否安全保存。
一、RSA密钥交换过程
客户端发送client_hello,包含一个随机数random1;
服务器回复server_hello,包含一个随机数random2,同时回复certificate,携带了证书公钥P;
客户端验证证书有效性后,使用随机数算法生成pre-master key,用服务器公钥P将pre-master key加密后发给服务器;
服务器使用私钥解密得到pre-master key;
客户端和服务器根据pre-master key、random1、random2生成session key。
(初始化向量IV)XOR(session key)= 一次性密钥1
初始化向量IV)XOR(一次性密钥1)= 一次性密钥2
……
问题:
1、RSA的IV如何生成的,明文or密文传输?
2、假设私钥泄露,如何解密所有历史报文?
3、密钥协商过程需要2个RTT?说好的1.5和1?
二、DH密钥交换过程
客户端根据私钥a生成公钥A,将公钥A和random1发送给服务器;
服务器根据私钥b和公钥A生成公钥B,将公钥B和random2发送给客户端;
服务器和客户端根据自己的私钥和对方的公钥,以及random值,生成相同的session key;
后续步骤同RSA。
DH密钥交换时,服务器私钥仅用于签名,不参与密钥交换过程。也就是说,私钥即使泄漏,也不会导致会话加密密钥S被第三方解密。
DH算法有一个比较大的缺陷就是需要提供足够大的私钥来保证安全性,所以比较消耗CPU计算资源。ECC椭圆曲线算术能够很好的解决这个问题,224位的密钥长度就能达到RSA2048位的安全强度。 所以常用ECDHE进行密钥协商。
问题:
1、为什么根据自己的私钥和对方的公钥,以及random值,生成相同的session key?
DH算法原理:https://blog.csdn.net/mrpre/article/details/52608867
2、RSA密钥分发+RSA认证,DH密钥分发+RSA认证?
3、为什么DH私钥泄露只影响当前会话,历史会话不会泄露?
一次一密
学习资料来源:
1、公众号车小胖谈网络
2、mrpre的CSDN博客
网友评论