SSL/TLS中的DH算法、DHE算法、 ECDHE算法介绍

本文深入介绍了Diffie-Hellman(DH)密钥交换算法,包括其工作原理、协商流程和安全性。DH算法在不安全的网络环境中允许双方安全地协商共享密钥,无需直接交换秘密信息。在SSL/TLS协议中,DH算法用于建立安全连接,分为静态DH和动态DHE两种形式,其中静态DH因安全性问题已较少使用,而ECDH(椭圆曲线DH)因其高效性被广泛采用。DH算法的数学证明确保了其安全性,但模指数计算的高开销催生了椭圆曲线计算方式,如ECDH。

请添加图片描述

❤️SSL/TLS专栏导航页❤️



1. DH算法简介

Diffie-Hellman密钥交换算法是在1976年由这两个人发明的算法。它可以在不安全的网络中,通过交换一些公开的信息协商出共享密钥,使用此共享密钥建立安全通讯。它实际上并没有直接交换密钥,而是通过数学计算,得出共享密钥。

有限域的离散对数问题的复杂度正是支撑DH密钥交换算法的基础。

⚠️⚠️⚠️ DH算法属于非对称算法。DH算法专利已经与1997年到期

它的原理很简单:
g a m o d p = A g^amodp=A gamodp=A
已知g,a,p求解A非常简单;而根据g,p,A在[1,p]范围内求解a却非常的困难,尤其当p特别大的时候(有多大?常见的DH组的p比特位有768,1024,2048,…, 8192,…)。放心吧,穷举不过来的!!!

2. DH算法协商流程

DH
①Alice选择两个质数:p, g

p必须是一个非常大的质数,而g则是一个与p相关的数,成为生成元(Generator, 或数论中叫做本原根),g可以是一个比较小的数。

p, g是不需要保密的,即使被窃听也无关痛痒。

②Alice生成一个随机数a

a是一个位于1 ~ p-2之间的整数。这个数只能自己知道,不需要告诉Bob, 也不能让其他人知道。

③Alice计算出A
A = g a m o d p A=g^amodp A=gamodp
④Alice将p, g, A全部发送给Bob

这三个数可以让其他人知道,没有关系

⑤Bob生成一个随机数b

b是一个位于1 ~ p-2之间的整数。这个数只能自己知道,不需要告诉Alice, 也不能让其他人知道。

⑥Bob计算出B

Bob已经接收到Alice发来的g,p,因此可以计算出B。
B = g b m o d p B=g^bmodp B=gbmodp
⑦Bob只需要将B发送给Alice

B也可以让其他人知道,没有关系

⑧Alice利用Bob发来的B计算共享密钥K
K = B a m o d p K=B^amodp K=Bamodp
⑨Bob利用Alice发来的A计算共享密钥K
K = A b m o d p K=A^bmodp K=Abmodp
最后Alice和Bob计算出的共享密钥可以通过数学公式证明是同等的。因此通过DH密钥协商,最终双方协商出了只有两个人知道的共享密钥。DH算法数学原理上并不难,虽然大多数人在大学没有学过mod运算,看公式时一脸懵逼,总理解不到DH的精髓。事实上要证明此算法没有那么复杂。只需要二项式展开即可。
K = B a m o d p = ( g b m o d p ) a m o d p = g a b m o d p = ( g a m o d p ) b m o d p = A b m o d p K=B^amodp=(g^bmodp)^amodp=g^{ab} modp=(g^amodp)^bmodp=A^bmodp K=Bamodp=(gbmodp)amodp=gabmodp=(gamodp)bmodp=Abmodp

3. DH算法证明

在这里插入图片描述

4. SSL/TLS中的DH算法

DH算法分类标准有两类:第一种是基于密钥;第二类基于计算方式。
请添加图片描述

  • 静态DH是指:通信双方有一方的私有密钥是固定的,另一方临时生成,一般是服务器端固定。但是这样随着时间的验证,很容易被破解,而一旦被破解,之前所有的通讯数据都很容易被解密,不具备前向安全的特性。目前静态DH基本不同。
  • 既然静态DH算法中,一方固定一方临时生成的方式不安全,那么我们就双方都不固定。通讯双方的私有密钥都采用临时生成的方式,这中DH算法称之为DHE算法(E是指Ephemeral, 临时的

按照计算方式又可以分为:模指数DH算法和椭圆曲线DH算法模指数是指:指数运算+取模运算,前面介绍的便是这种DH算法。但是这种算法由于涉及指数运算,计算量开销非常的可观,于是后来出现了椭圆曲线计算方式,据说这种方式计算量小了很多。

🩸IPSec中的DH算法绝大多数是模指数DH算法,

🩸SSL/TLS中采用的椭圆曲线DH算法。即ECDH算法

椭圆曲线DH算法称之为ECDH。 而模指数DH好像没有专业词,非专业的应该是MODPDH

DH算法是相当的逆天的存在。有一种:“看我不爽又干不掉我的样子”,我已经把信息都给你了,但是你却无能为力…。目前在做SSL卸载功能,它根本没有办法解析DH算法进行密钥配送的TLS协议,只能解析使用RSA进行密钥配送的协议。但是:现在大部分TLS都采用DH算法进行配送协商。SSL卸载功能对此几乎毫无办法😱😱😱。

### 解决方案概述 为了增强服务器 SSL/TLS 中的瞬时 Diffie-Hellman 公共密钥强度,确保其不低于 2048 位是必要的措施之一。这可以通过调整服务器配置来实现,具体方法取决于所使用的服务器软件。 对于 Spring Boot 项目中的 Tomcat 或其他应用服务器,可以在 `application.yml` 文件中指定更强的安全参数[^5]。而对于 Nginx 和 Apache 这样的 Web 服务器,则需修改相应的配置文件并更新 OpenSSL 版本以支持更强大的加密算法[^4]。 ### 配置实例 #### 修改 Spring Boot 的 application.yml 文件 在 Spring Boot 应用程序中,通过编辑 `application.yml` 来设置启用的协议版本以及密码套件列表: ```yaml server: port: 8443 ssl: key-store: classpath:keystore.p12 key-store-password: secret keyStoreType: PKCS12 keyAlias: tomcat enabled-protocols: TLSv1.2,TLSv1.3 ciphers: | TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 ``` 上述配置不仅限定了更高的 DH 参数长度,还选择了更为现代且安全的密码组合方式。 #### 更新 Nginx 配置 如果使用的是 Nginx 作为反向代理或者负载均衡器,在 nginx.conf 中加入如下指令可提高安全性: ```nginx ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/dhparams.pem; # 自定义生成的大于等于2048 bit的DH参数文件路径 ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 加强型密码策略 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ``` 这里特别指出了要加载自定义生成的一个大于等于 2048-bit 的 DH 参数文件 (`/etc/nginx/dhparams.pem`),从而有效防止因默认较低级别的 DH 密钥带来的安全隐患。 #### 使用命令行工具生成大尺寸 DH 参数 可以利用 OpenSSL 工具创建一个新的、足够强壮的 DH 参数集用于部署到生产环境之前测试用途: ```bash openssl dhparam -out dhparams.pem 2048 ``` 此操作会花费一些时间完成计算过程,但最终产生的 `.pem` 文件即为所需的高强度 DH 参数集合。 ### 结论 通过对服务器端进行适当配置更改,并采用最新的加密技术和实践标准,能够显著提升 SSL/TLS 握手过程中临时 Diffie-Hellman 密钥交换环节的安全水平,进而满足严格的信息安全保障需求[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值