当我们谈论HTTPS时,我们在谈什么(四)TLS握手与密钥协商浅析

1,233 阅读3分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战**

书接上回,HTTPS的核心是TLS,而TLS的核心就是密码协商与生成。

密钥协商的过程,就是TLS握手的过程:

image.png

上图是TLS1.2的详细握手步骤,主要关注在密钥协商步骤:

  1. client hello提供3个关键信息:client random客户端随机码, cipher suite支持的密码组供服务器选择,signature algorithm支持的签名算法,让服务器知道自己的能力;

  2. server hello提供2个关键信息:server random服务器随机码,cipher suite选取的密码组(用来做密钥协商,签名,以及对称加密)

  3. certificate提供:服务器的公钥,证书链和签名

  4. serverKeyExchange提供:服务器端密钥生成参数(让客户端用来来生成pre-master key)和服务器签名

  5. clientKeyExchange提供:客户端密钥生成参数(让服务器来生成同样的pre-master key)

  6. 双方使用同样的参数(client random + server random + pre-master key),各自生成master key,并根据master key继续计算session key,再通过对称加密算法,对应用数据进行加密。

本文将对以上步骤中涉及的算法部分进行讲解。

ECDHE加密协商

我们先看一下密码协商所用到的相关算法,TLS目前常用的版本是1.2和1.3版,他们的密钥协商方式主要是ECDHE,中文直译是椭圆曲线DH短时密码

image.png

ECDHE的目的是,在不安全的通信条件下,通信双方能够协商出一个安全的密钥,TLS使用这个机制来生成pre-master key.

“前向安全”

目前网上很多HTTPS的文章还在讲RSA非对称加密来生成pre-master key,这个算法早已经被抛弃了,因为没有“前向安全”,如果服务器私钥被攻破,之前所有密文都可能被破译。目前RSA算法大多用于签名,不再用于加密了。

指的是长期使用的私钥Private key泄漏不会导致过去的会话密钥session key泄漏。前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁,即使系统遭到主动攻击也是如此。而我们今天的主角ECDHE就具有前向安全性。

ECDHE算法原理

  1. ECDHE是从DH加密算法(Diffie-hellman)改进而来,DH算法的核心是“离散对数”。A=g^a (mod p), 其中如果0<=a<=p-1 成立,那么指数a就称A的以g为基数的模p的离散对数。当模p是很大的质数时,从已知的A, g, p,很难求得a;

  2. 基于此,通信双方约定好了g和p,并生成自己的离散对数a,b作为私钥,将计算所得的g^a%p=A, g^b%p=B作为公钥发送给对方,各自计算A^b%p, B^a%p, 根据离散对数的交换定律,这两者相等,将这个值作为通信加密密钥,这样双方就在不传输密钥的情况下有了相同的密钥

image.png

  1. DH协商算法有两种,一种是短时的ephemeral,简称DHE一次会话产生一次公共参数g和p,用完后即丢弃,下次会话再产生新的参数,这样可以有效保证“前向安全”;另一种是fixed,即生成一次永久使用,没有在密码系统中应用;

  2. DHE的劣势是运算速度慢,因为加密强度与密钥长度正相关,DH算法的运算量与日俱增,对服务器和带宽的压力都很大;

  3. 这个时候EC椭圆曲线算法出现了,它是在DH算法的基础上应用椭圆曲线数学,通过较小的密钥长度并提供相当等级的安全性,比如256bit的ECC加密就可以达到DH 2048bit的加密强度,这就大幅缩减了加密与解密的时延。

  4. ECDHE密钥交换过程中,双方约定好椭圆曲线参数G,并生成各自的私钥m和n,计算公钥mG与nG,并发送给对方,根据椭圆权限算法,n*(mG)=m*(nG),就得到了双方的共享密钥,在TLS中,通过这种方式生成pre-master key。

image.png

ECDHE算法还有另一个重大缺陷,就是无法防止“中间人攻击"。 如果此时有一个“中间人”,假扮为另一方来与双方协商密钥,就能够破解这个算法,所以DH算法其实并不能防止中间人攻击,此时就需要非对称加密来做身份认证。这也是为什么TLS会在密钥协商时加上身份验证的算法:

image.png

以上就是最核心的密钥协商部分,下一篇我们会详细介绍服务器签名算法和最终的应用数据加密算法。

感谢阅读,如有不准确和错误之处请留言指正,我会立即修正,感谢!




总结不易,请勿私自转载,否则别怪老大爷不客气

欢迎喜欢技术的小伙伴和我交流,微信1296386616

参考资料:

浅析RSA算法 叨陪鲤 zhuanlan.zhihu.com/p/375258787

COMPARISON AND EVALUATION OF DIGITAL SIGNATURE SCHEMES EMPLOYED IN NDN NETWORK by Al Imem Ali arxiv.org/ftp/arxiv/p…

一文读懂ECDSA算法如何保护数据 Datacruiser zhuanlan.zhihu.com/p/97953640

TLS1.2 PreMasterSecret And MasterSecret by 老青菜 laoqingcai.com/tls1.2-prem…

The Transport Layer Security (TLS) Protocol Version 1.2 datatracker.ietf.org/doc/html/rf…