Deffie-Hellman 算法

Deffie-Hellman算法是一种早期的密钥交换协议,基于数论中的离散对数问题,允许通信双方在不安全的通道中安全地协商一个共享密钥,用于后续的加密通信。该算法的关键在于计算的不可逆性,确保即使信息被截获,攻击者也无法轻易推算出密钥。
摘要由CSDN通过智能技术生成

Deffie-Hellman 算法简介

Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安全的信道中安全的交换密钥,用于加密后续的通信消息。 Whitfield Diffie 和 Martin Hellman 于 1976 提出该算法,之后被应用于安全领域,比如 Https 协议的 TSL(Transport Layer Security) 和 IPsec 协议的 IKE(Internet Key Exchange) 均以 DH 算法作为密钥交换算法。


数论知识

理解 DH 算法前,先介绍一些必要的数论领域知识,分别是离散对数问题和一个求模公式。

离散对数问题

假定 a, p 均是素数,下面两个集合相等,证明过程请参考 Cryptography and Network Security 第八章:

{ a^1 mod p, a^2 mod p, ..., a^(p-1) mod p } = {1, 2, ... , p-1 }   {} 表示集合

上述式子可概括成以下三点,对于 1 <= x,y <= p - 1,有:

  • a^x mod p 一定属于 {1, 2, …, p -1 }

  • 如果 x != y,则 a^x mod p != a^y mod p

  • 对于 1 <= b <= p - 1,一定存在唯一的 1 <= x <= p-1,使得 b = a^x mod p

第三点在求解上有这么一个特点:已知 x 求 b 非常容易,已知 b 求 x 非常困难,特别当 p 很大时,求解的复杂度非常高,所以它又被称为离散对数问题 (Discrete logarithm),它是 DH 算法能够安全交换密钥的基础!

求模公式

假设 q 为素数,对于正整数 a,x,y,有:

(a^x mod p)^y mod p = a^(xy) mod p

证明如下:

令 a^x = mp + n, 其中 m, n 为自然数, 0 <= n < p,则有
C = (a^x mod p)^y mod p
  = ((mp + n) mod p)^y mod p
  = n^y mod p
  = (mp +n)^y mod p
  = a^(xy) mod p

Deffie-Hellman 算法原理

本文参考 Cryptography and Network Security 一书,介绍 DH 算法原理,在掌握上节数论知识的基础上,理解 DH 算法原理非常容易。

假设 A, B 两方进行通信前需要交换密钥,首先 A, B 共同选取 p 和 a 两个素数,其中 p 和 a 均公开。之后 A 选择一个自然数 Xa,计算出 Ya,Xa 保密,Ya 公开;同理,B 选择 Xb 并计算出 Yb,其中 Xb 保密,Yb 公开。之后 A 用 Yb 和 Xa 计算出密钥 K,而 B 用 Ya 和 Xb 计算密钥 K,流程如下:

+-------------------------------------------------------------------+
|                    Global Pulic Elements                          |
|                                                                   |
|       p                               prime number                |
|       a                               prime number, a < p         |
+-------------------------------------------------------------------+
+-------------------------------------------------------------------+
|                    User A Key Generation                          |
|                                                                   |
|       Select private Xa               Xa < p                      |
|       Calculate public Ya             Ya = a^Xa mod p             |
+-------------------------------------------------------------------+
+-------------------------------------------------------------------+
|                    User B Key Generation                          |
|                                                                   |
|       Select private Xb               Xb < p                      |
|       Calculate public Yb             Yb = a^Xb mod p             |
+-------------------------------------------------------------------+
+-------------------------------------------------------------------+
|               Calculation of Secret Key by User A                 |
|                                                                   |
|       Secret Key K                    K = Yb^Xa mod p             |
+-------------------------------------------------------------------+
+-------------------------------------------------------------------+
|               Calculation of Secret Key by User B                 |
|                                                                   |
|       Secret Key K                    K = Ya^Xb mod p             |
+-------------------------------------------------------------------+

下面证明,A 和 B 计算出来的密钥 K 相同。

K = Yb^Xa mod p
  = (a^Xb mod p)^Xa mod p
  = a^(Xa * Xb) mod p          根据上述求模公式
  = (a^Xa mod p)^Xb mod p
  = Ya^Xb mod p

上面一共出现了 a, p, Xa, Ya, Xb, Yb, K 共 7 个数,其中:

  • 公开的数:a, p, Ya, Yb

  • 非公开数:Xa, Xb, K

通常情况下,a 一般为 2 或 5,而 p 的取值非常大,至少几百位,Xa 和 Xb 的取值也非常大,其复杂度至少为 O(p^0.5)。对于攻击者来说,已知 Ya,Xa 的求解非常困难,同理 Xb 的求解也很困难,所以攻击者难以求出 K,所以 DH 能够保证通信双方在透明的信道中安全的交换密钥。下图非常形象的描述密钥交换流程:

可参考:

1、再谈Diffie-Hellman算法 | skypacer的博客

2、http://wsfdl.com/algorithm/2016/02/04/理解Diffie-Hellman密钥交换算法.html

3、https://zh.wikipedia.org/wiki/迪菲-赫爾曼密鑰交換

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值