抓包分析TLS握手(ECDHE)

算法基础

DH算法

Diffie-Hellman密钥交换算法(简称DH算法)是一种基于离散对数问题的密钥交换协议。该协议是由Whitfield Diffie和Martin Hellman于1976年发明的。

DH算法的基本思想是:两个通信方在不事先共享任何密钥的情况下,通过互相交换信息来生成一个共享密钥。DH算法的核心在于,通信双方基于离散对数问题在有限域内进行加密。

DH算法的公式如下:
g x ( m o d   p ) = y g^x (mod~p)=y gx(mod p)=y

其中 g g g底数 p p p模数(一般是一个比较大的素数), x x x我们可以认为是私钥,是不公开的, y y y我们可以认为是公钥,是可以公开的。

这个算法依据的就是,已知 p p p g g g,用 x x x计算得到 y y y比较简单,但是从 y y y反推 x x x就非常困难,至少在目前计算机的算力水平下几乎是无法办到的,这就是DH算法的数学基础。

具体地说,DH算法的步骤如下:

  1. AliceBob协商选定一个大素数 p p p和一个原根 g g g,公开发送 g g g p p p给对方。

  2. AliceBob各自选择一个私有秘密数 a a a b b b,并计算出公开的半个DH密钥公式,即: A = g a ( m o d   p ) A = g^a(mod~p) A=ga(mod p) B = g b ( m o d   p ) B = g^b(mod~p) B=gb(mod p)此过程不公开。

  3. Alice将自己的公开密钥 A A A发送给BobBob收到后利用自己的私钥 b b b计算出半个密钥: K = A b ( m o d   p ) K = A^b(mod~p) K=Ab(mod p)

  4. Bob将自己的公开密钥 B B B发送给AliceAlice收到后利用自己的私钥 a a a计算出半个密钥: K = B a ( m o d   p ) K = B^a(mod~p) K=Ba(mod p)

  5. AliceBob最后计算出的密钥 K K K就是他们的共享密钥,可以用于后续的加解密过程。

离散对数的幂运算满足交换律吗?

在离散对数的幂运算中,如果我们要计算 a b   m o d   p a^b \ mod \ p ab mod p,其中 a a a p p p 是两个正整数, b ∈ Z p − 1 b\in Z_{p-1} bZp1 p − 1 p-1 p1 的非负整数幂。模运算有一个重要的性质:对于所有 a , b , a,b, a,b, c ∈ Z c\in \mathbb{Z} cZ,如果 a ≡ b   ( mod  c ) a\equiv b \ (\text{mod } c) ab (mod c),那么 a  mod  c = b  mod  c a\text{ mod }c = b\text{ mod }c a mod c=b mod c

因此,如果我们要计算 ( a b   m o d   p ) c   m o d   p (a^b \ mod \ p)^c \ mod \ p (ab mod p)c mod p,可以先计算 a b   m o d   p a^b \ mod \ p ab mod p 得到结果
s s s,然后再计算 s c   m o d   p s^c \ mod \ p sc mod p,即为最终结果。另一方面,如果我们要计算 ( a c   m o d   p ) b   m o d   p (a^c \ mod \ p)^b \ mod \ p (ac mod p)b mod p,可以先计算 a c   m o d   p a^c \ mod \ p ac mod p 得到结果 t t t,然后再计算 t b   m o d   p t^b \ mod \ p tb mod p,同样得到最终结果。

由于模运算满足交换律,因此离散对数的幂运算也满足交换律。也就是说, ( a b   m o d   p ) c   m o d   p = ( a c   m o d   p ) b   m o d   p (a^b \ mod \ p)^c \ mod \ p = (a^c \ mod \ p)^b \ mod \ p (ab mod p)c mod p=(ac mod p)b mod p,因此离散对数的幂运算有交换律。

因为离散对数的幂运算有交换律,所以AliceBob分别计算出的 K K K是相等的,如下式子所示:
K = A b ( m o d   p ) = ( g a ( m o d   p ) ) b ( m o d   p ) = ( g b ( m o d   p ) ) a ( m o d   p ) = B a ( m o d   p ) = K K = A^b(mod~p)=(g^a(mod~p))^b(mod~p)=(g^b(mod~p))^a(mod~p)=B^a(mod~p)=K K=Ab(mod p)=(ga(mod p))b(mod p)=(gb(mod p))a(mod p)=Ba(mod p)=K

DH算法是一种非对称加密算法,因此在交换公钥时不需要保证通信的安全性。

DHE算法

DHE (Diffie-HellmanEphemeral)算法是一种基于Diffie-Hellman密钥交换的加密算法。与Diffie-Hellman算法不同,DHE算法中的私钥是临时生成的,这增加了算法的安全性,因为即使密钥泄露,攻击者也无法获得通信的历史数据或未来数据。

在DHE算法中,通信双方每次会临时生成一个私钥,并使用一个公共参数来计算出公钥,然后通过公钥交换建立一个临时的加密密钥。因为每次生成的私钥都是不同的,所以即使攻击者获得了一个临时密钥,也无法使用它来计算出其他的加密密钥。这种方法称为前向保密,是DHE算法的一大优势。

ECDHE 算法

ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) 算法是一种基于椭圆曲线密钥交换的加密算法。与传统的DHE算法不同,ECDHE算法使用椭圆曲线来计算密钥交换,这使得它在相同的安全级别下,使用比DHE算法更短的密钥,从而提高了密钥交换的效率和速度。

ECDHE算法的基本原理与DHE算法类似,通信双方使用临时生成的私钥来计算出公钥,并通过公钥交换建立一个临时的加密密钥。不同之处在于,ECDHE算法使用椭圆曲线上的点来计算公钥和交换密钥,而不是使用传统的整数运算。这使得ECDHE算法在相同的安全级别下,可以使用更短的密钥,从而提高了密钥交换的效率和速度。

ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)算法是基于椭圆曲线的密钥交换算法,它是一种非对称加密算法,与传统的DHE算法类似。ECDHE算法的基本原理是,通信双方使用临时生成的私钥来计算出公钥,并通过公钥交换建立一个临时的加密密钥。

具体来说,ECDHE算法的实现步骤如下:

  1. 首先,通信双方确认使用的椭圆曲线参数,包括曲线方程、曲线上的基点(参数G)、曲线阶数等等。
  2. 接着,通信双方每个人各自生成一个临时私钥,记为a和b。
  3. 然后,每个人使用私钥生成一个公钥,公式为K = a * G 或 K = b * G。
  4. 接下来,每个人将自己的公钥发送给对方。
  5. 此时,通信双方都已经获取了对方的公钥。他们使用对方的公钥和自己的私钥计算出共享的密钥,公式为:S = a * K 或 S = b * K。
  6. 最后,双方都会得到同样的共享密钥S,该密钥可以用于加密通信中的数据。

在ECDHE算法中,每次通信都会生成新的私钥和公钥。也就是说,这些密钥只在当前通信会话中使用,不会在其他的通信中再次使用,因此又称为“临时密钥交换算法”。

与DHE算法类似,ECDHE算法也具有发送者的前向保密性,即不同临时密钥之间是相互独立的,即使有一个密钥被攻击者获取,也不会影响其他的密钥的安全性。

ECDHE抓包过程

应用安装和wireshark的设置参考这篇文章抓包分析TLS握手(RSA)

打开终端,输入命令:

curl https://blog.csdn.net

抓包情况如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GtWWxXTE-1683256405079)(null)]

第一次握手

客户端发送Client Hello,主要提供三个信息:

  • TLS版本
  • Random客户端产生的随机数
  • Cipher Suite客户端支持的加密套件

第二次握手

第二次握手为图中划线部分,这两个包实际上是服务端一次返回的,之所以是两个包,是因为在TCP层进行了分段处理(可以看到框起来的这句TCP segment of a reassembled PDU)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kgPk3fSt-1683256405191)(null)]

服务端发送Server Hello,主要有三个信息:

  • 选用的TLS版本
  • Random服务端产生的随机数
  • Cipher Suite服务端选用的加密套件

至此,客户端和服务端写上了好TLS版本和使用的加密套件,以及共享了各自产生的随机数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNAip8QR-1683256405109)(null)]

服务端证书

与RSA握手一样,服务端会将证书发给客户端,客户端根据证书链,验证证书有效性。

服务端交换key

这一步就跟RSA不一样了,在这个步骤中,服务端干了以下几件事:

  • 生成一个随机数作为私钥Privatekey
  • 选定椭圆为secp256r1,椭圆选好,G点也就确定了,再加上Privatekey就可以生成PubKey
  • 使用签名算法为PubKey做个签名Signature

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-il7ILZ4Q-1683256405145)(null)]

Server Hello Done

服务端信息提供完毕,打招呼结束。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyqtYiEs-1683256405135)(null)]

第三次握手

Client Key Exchange

客户端生成一个随机数作为客户端的私钥,然后根据前面给的信息,生成客户端的公钥,再发送给服务端。

至此,双方都有对方的公钥、自己的私钥、椭圆曲线基点G,根据这些信息,双方最后可以算出一个相同的会话密钥用于后续会话数据的加密了。

Change Cipher Spec 和 Encrypted Handshake Message

接下来就是客户端通过Change Cipher Spec消息告诉服务端后续改用对称加密通信。通过Encrypted Handshake Message消息将之前握手协商的内容做一个摘要,然后用会话密钥加密发给服务端,让服务端校验一下。

第四次握手

Change Cipher Spec 和 Encrypted Handshake Message

服务端也是一样,通过Change Cipher Spec消息告诉客户端端后续改用对称加密通信。通过Encrypted Handshake Message消息将之前握手协商的内容做一个摘要,然后用会话密钥加密发给客户端,让客户端校验一下。

总结

ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)是一种利用椭圆曲线加密算法的密钥交换协议。在TLS握手过程中,ECDHE与其他密钥交换算法(如RSA)相比有以下特点:

  1. 秘钥安全性更高:ECDHE使用椭圆曲线算法,具有更高的安全性,可以减少中间人攻击所造成的风险。

  2. 密钥协商效率更高:ECDHE对密钥的协商过程只需要进行一次,而RSA或DHE需要进行两次,因此ECDHE在密钥协商效率上比其他算法更具优势。

  3. 密钥不可破解:ECDHE生成的临时密钥是基于二元组(G,g^b),其中g为基点,b为私钥。由于基点是公开的,私钥也只是临时生成的,因此生成的临时密钥是不可破解的。

  4. Diffie-Hellman密钥交换算法的缺点得到优化:Diffie-Hellman密钥交换算法的主要缺点是可以通过中间人攻击来获取密钥。而使用椭圆曲线算法后,这种攻击方式被大大减弱。

  5. 较少的网络带宽:ECDHE生成的临时密钥较小,因此在密钥传输的过程中所需的网络带宽较少。

综上所述,ECDHE握手机制在密钥交换、安全性、时延等方面都比传统的密钥交换算法更具优势。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值