ECDHE算饭-https密钥交换算法

ECDHE

  • “短暂 - 椭圆曲线 - 迪菲 - 赫尔曼”算法(ephemeral Elliptic Curve Diffie–Hellman)

离散对数( Discrete logarithm)

  • 离散对数里的一个核心操作是模运算,取余数
    • 举例
      • 假设有模数 17,底数 5,那么“5 的 3 次方再对 17 取余数得 6”(5 ^ 3 % 17 = 6)就是在离散整数域上的一次指数运算(5 ^ 3 (mod 17) = 6)。反过来,以 5 为底,17 为模数,6 的离散对数就是 3(Ind(5, 6) = 3 ( mod 17))
      • (17,5)是离散对数的公共参数,6 是真数,3 是对数。知道了对数,就可以用幂运算很容易地得到真数,但反过来,知道真数却很难推断出对数,于是就形成了一个“单向函数”
      • 选择的是一个非常非常大的数,比如说是有 1024 位的超大素数,那么暴力破解的成本就非常高了,几乎没有什么有效的方法能够快速计算出离散对数,这就是 DH 算法的数学基础

DH 算法

  • 假设 Alice 和 Bob 约定使用 DH 算法来交换密钥

  • 首先确定模数和底数作为算法的参数,这两个参数是公开的,用 P 和 G 来代称,(P=17,G=5)

  • Alice 和 Bob 各自选择一个随机整数作为私钥(必须在 1 和 P-2 之间),严格保密。比如 Alice 选择 a=10,Bob 选择 b=5

  • 有了 DH 的私钥,Alice 和 Bob 再计算幂作为公钥,也就是 A = (G ^ a % P) = 9,B = (G ^ b % P) = 14,这里的 A 和 B 完全可以公开,因为根据离散对数的原理,从真数反向计算对数 a 和 b 是非常困难的

  • 交换 DH 公钥之后,Alice 手里有五个数:P=17,G=5,a=10,A=9,B=14,然后执行一个运算:(B ^ a % P)= 8

  • 离散对数的幂运算有交换律,B ^ a = (G ^ b ) ^ a = (G ^ a) ^ b = A ^ b,所以 Bob 计算 A ^ b % P 也会得到同样的结果 8,这个就是 Alice 和 Bob 之间的共享秘密,可以作为会话密钥使用,也就是 TLS 里的 Pre-Master。

DHE 算法

  • DH 交换密钥时就只有客户端的公钥会变,而服务器公钥不变,在长期通信时就增加了被破解的风险,使得拥有海量计算资源的攻击者获得了足够的时间,最终能够暴力破解出服务器私钥,然后计算得到所有的共享秘密 Pre-Master,不具有“前向安全”

  • DHE 算法的关键在于“E”表示的临时性上(ephemeral),每次交换密钥时双方的私钥都是随机选择、临时生成的,用完就扔掉,下次通信不会再使用,相当于“一次一密”

    • 即使攻击者破解了某一次的私钥,其他通信过程的私钥仍然是安全的,不会被解密,实现了“前向安全”

ECDHE 算法

  • ECDHE 算法,就是把 DHE 算法里整数域的离散对数,替换成了椭圆曲线上的离散对数
    在这里插入图片描述
  • ECDHE 是把连续的椭圆曲线给“离散化”成整数,用椭圆曲线上的“倍运算”替换了 DHE 里的幂运算。
  • 在 ECDHE 里,算法的公开参数是椭圆曲线 C、基点 G 和模数 P,私钥是倍数 x,公钥是倍点 xG,已知倍点 xG 要想计算出离散对数 x 是非常困难的
  • 通信时 Alice 和 Bob 各自随机选择两个数字 a 和 b 作为私钥,计算 A=aG、B=bG 作为公钥,然后互相交换,用与 DHE 相同的算法,计算得到 aB=abG=Ab,就是共享秘密 Pre-Master
  • 因为椭圆曲线离散对数的计算难度比普通的离散对数更大,所以 ECDHE 的安全性比 DHE 还要高,更能够抵御黑客的攻击

转载 极客时间-透视http协议


版权声明:本文为weixin_38805083原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。