TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256算法组合中的ECDHE

举报
黄生 发表于 2022/08/24 13:25:32 2022/08/24
【摘要】 对 PKI:TLS握手 的补充TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS : protocol that this cipher suite is forECDHE : key exchange algorithm being used.RSA : authentication mechanism during the handshake.AES : s...

PKI:TLS握手 的补充

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS : protocol that this cipher suite is for
ECDHE : key exchange algorithm being used.
RSA : authentication mechanism during the handshake.
AES : session cipher.
128 : session encryption key size (bits) for cipher.
GCM : type of encryption (cipher-block dependency and additional options).
SHA : hash function. For a digest of 256 and higher. Signature mechanism. Indicates the message authentication algorithm
256 : Digest size (bits).

在网络中安全的传送密钥是很难的问题。
所以为了缓解这个问题,可以使用动态密钥,动态密钥就具有前向安全性。也就是说,即使泄露或攻破,只会泄露本次会话的数据。
之前会话的数据即使被保存,也无法使用本次密钥来破解。
动态密钥,也叫会话密钥,它不用存储落盘,一旦双方的连接关闭,密钥就会被销毁。
会话密钥的协商可以使用RSA算法,和DH算法。(Diffie-Hellman,2个人的名字,1976年公布的公开密钥算法,历史比RSA悠久)

DH算法协商会话密钥的时候,是双方参与,而不是一方说了算。这也是它的原理和优势。

简单介绍:

  1. 参数

p,g是参数,公开的。p是很大的质数,建议长度1024bit以上;g是生成器,2或者5.

image.png

  1. 计算

image.png

服务器根据公开参数生成随机数b,即私钥。计算Ys=(g ^ b) mod p,即公钥
客户端根据公开参数生成随机数a,即私钥。计算Yc=(g ^ a) mod p,即公钥
服务器计算Z = (Yc ^ b) mod p
客户端计算Z = (Ys ^ a) mod p
Z就是会话密钥。协商完成。
这里是幂运算,和求模过程,所以运算上破解,就面临离散对数,和因式分解的问题。
其安全性与密钥长度正相关。

DH算法有静态DH算法,和临时DH算法(Ephemeral EDH算法、DHE算法)
静态DH算法,p,g,Ys永远固定,没有前向安全性。好处是初始化连接时免去频繁生成p,g
EDH算法,不固定,密钥对只在有效的时空内存在(每次连接)

openssl的dhparam和genpkey可以进行DH算法实践,这里略过。

前面说了,DH算法安全性与密钥长度正相关。长度越长,越安全,同时缺点是性能越低,
所以这时ECC(Elliptic Curve Cryptography 椭圆曲线密码学)就要出场了。
它是比离散对数类算法(RSA,DH)更复杂的算法,本身也是一个复杂的结构体,ECC模型这里不说了。
系统预先定义了一系列的曲线,叫做命名曲线(name curve),比如secp256k1
对于使用者来说,知道命名曲线和参数文件即可。openssl的ecparam可以进行ECC相关操作。

将ECC和DH结合,就得到了ECDH协商算法
ECDH首先取得一个随机数k,就是私钥。然后不同点来了:kg的结果就是公钥。
g是椭圆曲线上的基点,公钥也是椭圆曲线上的一个点。对于ETC密码学来说,通过公钥很难破解私钥。
openssl的ecparam和genpkey pkey pkeyutl可以进行ECDH算法实践,这里略过。

ecc本质上是一个数学公式,任何人基于公式都可以设计出椭圆曲线,如果实现不当,那么就存在安全问题。对于使用者来说,如果要使用ECC椭圆曲线,要做的就是选择一条安全并且性能高的命名曲线。

常见的命名曲线:
image.png

选择的标准就是尽量选择性能高,安全好,兼容性好的。(简直是废话)

使用openssl显示系统支持的命名曲线:

[root@ecs-hce ~]# openssl ecparam -list_curves
  secp112r1 : SECG/WTLS curve over a 112 bit prime field
  secp112r2 : SECG curve over a 112 bit prime field
  secp128r1 : SECG curve over a 128 bit prime field
  secp128r2 : SECG curve over a 128 bit prime field
  secp160k1 : SECG curve over a 160 bit prime field
  secp160r1 : SECG curve over a 160 bit prime field
  secp160r2 : SECG/WTLS curve over a 160 bit prime field
  secp192k1 : SECG curve over a 192 bit prime field
  secp224k1 : SECG curve over a 224 bit prime field
  secp224r1 : NIST/SECG curve over a 224 bit prime field
  secp256k1 : SECG curve over a 256 bit prime field
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field
  prime192v2: X9.62 curve over a 192 bit prime field
  prime192v3: X9.62 curve over a 192 bit prime field
  prime239v1: X9.62 curve over a 239 bit prime field
  prime239v2: X9.62 curve over a 239 bit prime field
  prime239v3: X9.62 curve over a 239 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field
  wap-wsg-idm-ecid-wtls6: SECG/WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls7: SECG/WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls12: WTLS curve over a 224 bit prime field
  brainpoolP160r1: RFC 5639 curve over a 160 bit prime field
  brainpoolP160t1: RFC 5639 curve over a 160 bit prime field
  brainpoolP192r1: RFC 5639 curve over a 192 bit prime field
  brainpoolP192t1: RFC 5639 curve over a 192 bit prime field
  brainpoolP224r1: RFC 5639 curve over a 224 bit prime field
  brainpoolP224t1: RFC 5639 curve over a 224 bit prime field
  brainpoolP256r1: RFC 5639 curve over a 256 bit prime field
  brainpoolP256t1: RFC 5639 curve over a 256 bit prime field
  brainpoolP320r1: RFC 5639 curve over a 320 bit prime field
  brainpoolP320t1: RFC 5639 curve over a 320 bit prime field
  brainpoolP384r1: RFC 5639 curve over a 384 bit prime field
  brainpoolP384t1: RFC 5639 curve over a 384 bit prime field
  brainpoolP512r1: RFC 5639 curve over a 512 bit prime field
  brainpoolP512t1: RFC 5639 curve over a 512 bit prime field
  SM2       : SM2 curve over a 256 bit prime field

最后总结一下,ECDHE就是ECC和DHE的结合。因为ECC所以保证安全的同时性能还好,因为DHE所以协商出的会话密钥具有前向安全性。二者珠联璧合,郎情妾意,如鱼得水。

最后推荐书籍《深入浅出HTTPS:从原理到实战》。作者:虞卫东著。很不错,推荐。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。