数论与加密学 [9]

本篇内容

  • Dlog
  • CDH
  • Dlog 和 CDH 的安全性
  • Diffie-Hellman 密钥交换

Dlog

1. 概念

Dlog是离散对数(discrete logarithm)的简称,它定义为:对于给定的群 GGgGg\in G,以及 yGy\in G,找到满足 gx=yg^x=yxx 值。这个问题是一个重要的密码学问题,因为它是目前广泛使用的公钥加密系统和数字签名算法的基础。

具体来说,当 gg 是一个生成元, qq 是循环群 GG 的阶数, hGh\in G 时,若存在一个整数 x{0,1,,q1}x \in \{0,1,\ldots,q-1\} ,使得 gx=hg^x=h ,则整数 xx 被称为 hh 相对于基元 gg 的离散对数,用数学符号表示为:

x=logghx = \log_{g}{h}

2. 离散对数问题

在离散对数问题(Discrete Logarithm Problem,DLOG Problem)中,给定一个生成元 gg 和一个循环群 G=gG=\langle g \rangle 的阶 qq,以及 GG 中的一个元素 h=gxh=g^x,其中 xx 是一个整数,但 xx 的值未知。问题是要求解 xx 的值,即计算 hh 相对于基元 gg 的离散对数。

Input:GG and h=gxh=g^x for x{0,1,,q1}x \in \{0,1,\ldots,q-1\}

Output:fDLOG(q,G,g;h)=logghf_{DLOG}(q,G,g;h)=\log_g h


CDH

CDH是“计算Diffie-Hellman”(Computational Diffie-Hellman)的缩写,它是一种基于离散对数问题的密钥交换协议。CDH问题指的是在给定生成元 gggag^agbg^b 的情况下,计算 gabg^{ab} 的难题。

Input: G=gG=\langle g \rangle of order qq and A=gaA=g^a, B=gbB=g^b for a,b{0,1,,q1}a,b \in \{0,1,\ldots,q-1\}

Output: fCDH(q,G,g;A,B)=gabf_{CDH}(q,G,g;A,B)=g^{ab}

CDH问题是 Diffie-Hellman 密钥交换协议的基础,该协议可以让两个人在没有事先共享密钥的情况下建立起一个共享密钥,从而保证通信的机密性。具体来说,设 Alice 和 Bob 分别选择一个私钥 aabb,然后通过公共信道交换计算 gag^agbg^b,最终他们可以利用这两个值计算出共享密钥 gabg^{ab}。由于 CDH 问题的难解性,即使攻击者拥有 gggag^agbg^b 这三个值,也无法在多项式时间内计算出 gabg^{ab},因此 Diffie-Hellman 密钥交换协议是安全的。


Dlog 和 CDH 的安全性

1. Dlog

Dlog问题的困难性体现在它的计算复杂度上,具体来说,解决Dlog问题需要的时间随着循环群 GG 的阶 qq 的增长而指数级增加,即该问题是指数级时间复杂度的问题。

具体来说,如果攻击者想要暴力破解离散对数,需要遍历整个循环群 GG,尝试每一个可能的 xx 值,直到找到满足 h=gxh=g^xxx 值。但由于循环群 GG 的阶 qq 通常非常大,因此暴力破解的时间复杂度为 O(q)O(q),这在实际中是不可行的。

目前,最好的已知算法是基于数学上的数论方法,例如 Pohlig-Hellman算法、Pollard rho算法、Index Calculus算法等,目前最强的算法的时间复杂度 exp(O(lnqlnlnq))exp(O(\sqrt{\ln q \cdot \ln\ln{q}})) 为 但对于大型的循环群,仍然需要相当长的时间才能解决Dlog问题。

因此,Dlog问题的困难性是公钥密码学中基于离散对数问题的安全性的基础,许多现代加密算法,例如 Diffie-Hellman密钥交换、ElGamal加密等都依赖于该问题的困难性。

2. CDH

CDH问题的困难性基于离散对数问题的困难性。具体来说,CDH问题是指在给定生成元 gggag^agbg^b 的情况下,计算 gabg^{ab} 的难题。

假设存在一个算法 AA,可以在多项式时间内解决CDH问题,即对于任意给定的 gggag^agbg^b,算法 AA 可以在多项式时间内计算出 gabg^{ab}。那么我们可以利用算法 AA 解决离散对数问题,即对于任意给定的 gggxg^x,算法 AA 可以在多项式时间内计算出 xx。这是因为我们可以把 gxg^x 表示为 gax/b=(ga)x/bg^{ax/b} = (g^a)^{x/b},然后利用算法 AA 计算 (ga)x/b(g^a)^{x/b} 的值,最终再计算出 xx 的值。由于离散对数问题被认为是困难的,因此如果存在多项式时间算法解决CDH问题,那么离散对数问题也将被多项式时间内解决,这与离散对数问题的困难性相悖,因此CDH问题被认为是困难的。

需要注意的是,CDH问题的困难性是基于离散对数问题的困难性,但它们并不完全等价。对于某些具体的离散对数问题和CDH问题,可能存在不同的求解算法和复杂度分析方法。


Diffie-Hellman 密钥交换

当一人和另一人要进行加密通信时,他们需要一个共享密钥[1],以便在传输过程中对消息进行加密和解密。Diffie-Hellman密钥交换协议是一种常用的方法,用于在公共信道上安全地交换密钥。

过程

G=gG = \langle g \rangle 是一个阶为素数 qq 的循环群。
Alice: aZqa \leftarrow \mathbb{Z}_q, A=gaA = g^a; send (q,G,g,A)(q,G,g,A) to Bob

Bob: bZqb \leftarrow \mathbb{Z}_q, B=gbB = g^b; send BB to Alice; output k=Abk = A^b

Alice: output k=Bak = B^a

讲解

  1. Alice 和 Bob 首先公开协商两个公共参数:一个质数 qq 和一个生成元 gg,这两个参数可以公开传输。

  2. Alice 随机选择一个私有数 aa,并计算出 A=gamodqA = g^a \bmod q,然后将 (q,g,A)(q, g, A) 传输给 Bob。

  3. Bob 随机选择一个私有数 bb,并计算出 B=gbmodqB = g^b \bmod q,然后将 BB 传输给 Alice。

  4. Alice 和 Bob 使用对方传输的公共值计算出共享密钥,即 Bob 计算 K=AbmodqK = A^b \bmod q,而 Alice 计算 K=BamodqK = B^a \bmod q。这样,Alice 和 Bob 都得到了相同的共享密钥 K,而其他人无法在没有私有数 aabb 的情况下计算出它。

因此,Diffie-Hellman协议可以实现在公共信道上安全地交换密钥,因为即使一个攻击者能够截获Alice和Bob之间传输的信息,他们也无法计算出密钥 KK ,除非他们知道私有数 aabb


  1. 1.相当于不分公钥和私钥的 RSA 加密