DH算法

离散对数

DH 算法是非对称加密算法, 因此它可以用于密钥交换,该算法的核心数学思想是离散对数

对数运算:i=logabi = log_{a}bi=loga​b

离散对数是在对数运算的基础上加了「模运算」,也就说取余数,对应编程语言的操作符是「%」,也可以用 mod 表示。离散对数的概念如下图:

上图的,底数 a 和模数 p 是离散对数的公共参数,也就说是公开的,b 是真数,i 是对数。知道了对数,就可以用上面的公式计算出真数。但反过来,知道真数却很难推算出对数。

特别是当模数 p 是一个很大的质数,即使知道底数 a 和真数 b ,在现有的计算机的计算水平是几乎无法算出离散对数的,这就是 DH 算法的数学基础。

DH算法

现假设小红和小明约定使用 DH 算法来交换密钥,那么基于离散对数,小红和小明需要先确定模数和底数作为算法的参数,这两个参数是公开的,用 P 和 G 来代称。

然后小红和小明各自生成一个随机整数作为私钥,双方的私钥要各自严格保管,不能泄漏,小红的私钥用 a 代称,小明的私钥用 b 代称。

现在小红和小明双方都有了 P 和 G 以及各自的私钥,于是就可以计算出公钥:

  • 小红的公钥记作 A,A=Ga(modP)A = G ^ a \ ( mod \ P )A=Ga (mod P);
  • 小明的公钥记作 B,B=Gb(modP)B = G ^ b \ ( mod \ P )B=Gb (mod P);

A 和 B 也是公开的,因为根据离散对数的原理,从真数(A 和 B)反向计算对数 a 和 b 是非常困难的,至少在现有计算机的计算能力是无法破解的,如果量子计算机出来了,那就有可能被破解,当然如果量子计算机真的出来了,那么密钥协商算法就要做大的升级了。

双方交换各自 DH 公钥后,小红手上共有 5 个数:P、G、a、A、B,小明手上也同样共有 5 个数:P、G、b、B、A。

然后小红执行运算:$ B ^ a ( mod P )$,其结果为 K,因为离散对数的幂运算有交换律,所以小明执行运算: Ab(modP)A ^ b ( mod P )Ab(modP),得到的结果也是 K。

这个 K 就是小红和小明之间用的对称加密密钥,可以作为会话密钥使用。

可以看到,整个密钥协商过程中,小红和小明公开了 4 个信息:P、G、A、B,其中 P、G 是算法的参数,A 和 B 是公钥,而 a、b 是双方各自保管的私钥,黑客无法获取这 2 个私钥,因此黑客只能从公开的 P、G、A、B 入手,计算出离散对数(私钥)。

前面也多次强调, 根据离散对数的原理,如果 P 是一个大数,在现有的计算机的计算能力是很难破解出 私钥 a、b 的,破解不出私钥,也就无法计算出会话密钥,因此 DH 密钥交换是安全的

DHE 算法

根据私钥生成的方式,DH 算法分为两种实现:

  • static DH 算法,这个是已经被废弃了;
  • DHE 算法,现在常用的;

static DH 算法里有一方的私钥是静态的,也就说每次密钥协商的时候有一方的私钥都是一样的,一般是服务器方固定,即 a 不变,客户端的私钥则是随机生成的。

于是,DH 交换密钥时就只有客户端的公钥是变化,而服务端公钥是不变的,那么随着时间延长,黑客就会截获海量的密钥协商过程的数据,因为密钥协商的过程有些数据是公开的,黑客就可以依据这些数据暴力破解出服务器的私钥,然后就可以计算出会话密钥了,于是之前截获的加密数据会被破解,所以 static DH 算法不具备前向安全性。

既然固定一方的私钥有被破解的风险,那么干脆就让双方的私钥在每次密钥交换通信时,都是随机生成的、临时的,这个方式也就是 DHE 算法,E 全称是 ephemeral(临时性的)。

所以,即使有个牛逼的黑客破解了某一次通信过程的私钥,其他通信过程的私钥仍然是安全的,因为每个通信过程的私钥都是没有任何关系的,都是独立的,这样就保证了「前向安全」

ECDHE 算法

DHE 算法由于计算性能不佳,因为需要做大量的乘法,为了提升 DHE 算法的性能,所以就出现了现在广泛用于密钥交换算法 —— ECDHE 算法。

ECDHE 算法是在 DHE 算法的基础上利用了 ECC 椭圆曲线特性,可以用更少的计算量计算出公钥,以及最终的会话密钥。

小红和小明使用 ECDHE 密钥交换算法的过程:

  • 双方事先确定好使用哪种椭圆曲线,和曲线上的基点 G,这两个参数都是公开的;
  • 双方各自随机生成一个随机数作为私钥d,并与基点 G相乘得到公钥Q(Q = dG),此时小红的公私钥为 Q1 和 d1,小明的公私钥为 Q2 和 d2;
  • 双方交换各自的公钥,最后小红计算点(x1,y1) = d1Q2,小明计算点(x2,y2) = d2Q1,由于椭圆曲线上是可以满足乘法交换和结合律,所以 d1Q2 = d1d2G = d2d1G = d2Q1 ,因此双方的 x 坐标是一样的,所以它是共享密钥,也就是会话密钥(其实在TLS中最终的会话密钥,就是用「客户端随机数 + 服务端随机数 + x(ECDHE 算法算出的共享密钥) 」三个材料生成的)。

这个过程中,双方的私钥都是随机、临时生成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G)也是很难计算出椭圆曲线上的离散对数(私钥)。

DH、DHE、ECDHE加密算法相关推荐

  1. TLS中密码交换协议:RSA/DH/DHE/ECDH/ECDHE等说明

    以下是学习笔记: 一:首先来看TLS的密钥交换构成涉及到的消息,如下图所示: 二: RSA交互介绍: 9. PKI - 三种密钥交换算法详解(RSA& DHE& ECDHE)及他们在S ...

  2. 9. PKI - 三种密钥交换算法详解(RSA DHE ECDHE)及他们在SSL/TLS协议中的应用

    9. PKI - 三种密钥交换算法详解(RSA& DHE& ECDHE)及他们在SSL/TLS协议中的应用 RSA密钥交换算法 DHE密钥交换算法 ECDHE密钥交换算法 参考 密钥交 ...

  3. 数据加密 三种密钥交换算法详解(RSA DHE ECDHE)

    一.RSA密钥交换算法 RSA算法流程文字描述如下: (1)任意客户端对服务器发起请求,服务器首先发回复自己的公钥到客户端(公钥明文传输). (2)客户端使用随机数算法,生成一个密钥S,使用收到的公钥 ...

  4. JAVA加密解密→术语、密码分类、OSI与TCP/IP安全体系、Base64、消息摘要算法MD/SHA/MAC、对称加密算法DES/AES/PBE、非对称加密算法DH/RSA/EIGamaI

    术语 密码分类 OSI与TCP/IP安全体系 JAVA安全 Base64算法 消息摘要算法MD 消息摘要算法MD图解 消息摘要算法SHA 消息摘要算法SHA图解 消息摘要算法MAC 消息摘要算法MAC ...

  5. HTTPS 加密算法原理详解

    本文讲的是HTTPS 加密算法原理详解, 前言 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一 ...

  6. HTTPS 加密算法过程

    文章目录 一.HTTPS协议概念 二.加密算法 三.HTTP访问过程 一.HTTPS协议概念 1.HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览 ...

  7. 常用加密算法之非对称加密算法

    非对称加密算法 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加 ...

  8. 带你了解数仓安全测试的TLS协议

    摘要:SSL/TLS协议是业界常用的加密通信协议,通过该协议可以完成通信双方身份认证,会话密钥协商,通信内容加密和完整性保护. 本文分享自华为云社区<GaussDB(DWS)安全测试之TLS协议 ...

  9. nginx ssl 漏洞 修复

    如果nginx ssl 存在以下几种漏洞 CVE-2015-2808 SSL弱加密算法 CVE-2016-2183 CVE-2016-2183 请修改nginx.conf 增加以下配置,亲测有效!!! ...

最新文章

  1. jQuery的无new构建
  2. POSIX条件变量API函数
  3. MySQL笔记(八)存储过程procedure
  4. lr0文法分析表示例_详解自然语言处理(NLP)5大语义分析技术及14类应用(建议收藏)...
  5. UIUC CS241 系统编程中文讲义校对活动 | ApacheCN
  6. vue create 新项目时,命令行工具卡死(npm卡死)
  7. 【MySQL】MySQL中的查询语句的详解----等值连接、左连接、右连接、全连接
  8. 【java】Java泛型
  9. matlab中 nntwarn off,network的subsindex的定义问题
  10. Web UI自动化测试之元素定位
  11. 各种免费在线工具收集
  12. 项目管理(二)责任划分
  13. 【扩频通信】基于matlab GUI扩频通信系统仿真【含Matlab源码 772期】
  14. sd卡写保护解除工具_手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)...
  15. Linux查看网卡是千兆还是万兆网卡
  16. php启用 兼容性视图,新版Edge浏览器兼容性视图设置及添加兼容性站点教程(图示)...
  17. python 视频加字幕_Python追风者之视频编辑moviepy
  18. 【设计模式】模板模式——jdbc案例
  19. ubuntu基本操作命令超全(上)
  20. 字符编码在项目中的应用(一)

热门文章

  1. 高等代数学习心理辅导
  2. Dialog(对话框窗口)
  3. window11 latex 解决找不到字体的问题
  4. 宝塔php socket,宝塔开启websocket 小程序聊天功能开发
  5. js 获取与设置cookie
  6. ChatGPT 与未来软件开发的关系
  7. java modbus 规约_Modbus RTU的规约详细资料详解
  8. 深富策略:极限反转 行情反攻开启
  9. 阿里云盘TV版本,用电视看云盘资源.
  10. JDBC简介(Statement接口)