【隐私计算篇】Diffie-Hellman密钥交换以及离散对数问题、群论等概念

1. 背景介绍

本篇主要关注常见的Diffie-Hellman的底层数学原理,从事隐私计算行业的同学,肯定会发现DH的身影无处不在,被广泛使用,比如基于ECDH的PSI安全求交算法【1】,因其实现简单,原理易于讲解,成为了PSI领域的LR算法般存在(形同程序员熟悉的hello word示例)。另外,还有基于DH实现隐私求并的方案【2,3】。接下来,我们以DHKE来描述DH原理以及底层数学分析。

2. Diffie-Hellman 密钥交换(DHKE)

Diffie-Hellman 密钥交换协议(Diffie-Hellman Key Exchange),简称 DHKE,是离散对数问题的一个典型应用。使用这个协议,通信双方可以在完全没有对方任何预先信息的条件下,通过不安全信道创建起一个密钥。这个密钥只有通信双方知道,其他人无法获得,可以在后续的通信中作为对称密钥来加密通信内容。

2.1 DHKE 的基本流程

选择参数

通信双方(Alice 和 Bob)首先在不安全信道中交换对群 选取的公有参数 p 和 g,其中 p 是大素数,g 是模 p 的原根,是某个子群的生成元, 该概念在前述文章有介绍,g 的不同幂次模 p 的结果可以生成群中的所有元素。该步骤可以公开进行,无需保密。

各自生成私钥和公钥

Alice 随机选择私钥 a,计算公钥 ,并将公钥 A 发送给 Bob。

Bob 随机选择私钥 b,计算公钥 ,并将公钥 B 发送给 Alice。

Alice 和 Bob 分别选择的私钥 a 和 b 是这个群中的元素,即它们取值在 1 到 p-1 之间。公钥 A 和 B 是生成元 g 的幂次模 p 的结果。

生成共享密钥

Alice 收到 B 后,计算共享密钥

Bob 收到 A后,计算共享密钥

最终,Alice 和 Bob 都计算出相同的共享密钥 S,用于后续加密通信。

图来自wikipedia【4】

2.2 安全性分析

离散对数难题

攻击者若要破解密钥 S,必须求解 的离散对数问题,这在当前计算能力下非常困难。特别是当 p 和 g 的选择合适时(例如 p 为1024比特或更大),破解这种离散对数问题会非常耗时,因此保证了 DHKE 的安全性。

目前已破解的最大离散对数记录是在一个795比特大小的素数 p 下完成的【5,6】。以 Intel Xeon Gold 6130 CPU 为例,需要 3100 个核心年(core-year)的计算量。这意味着使用2048比特的参数 p 目前仍然足够安全。

DHKE 的安全性依赖于大素数 p 和原根 g 的选择。虽然密钥交换过程中公有参数 p 和 g 是公开的,但私钥 a 和 b 是私密的,只有各自的持有者知道。即使攻击者拦截到公钥 A 和 B,在没有私钥的情况下无法计算出共享密钥 S,因此协议具备较高的安全性。

3. 离散对数问题及快速幂模运算

3.1 离散对数问题

定义

在给定群 G 中,若存在 (其中 g 是群的生成元,x 是整数),那么求解 x 的问题就是离散对数问题,记为 。也就是找到一个指数 x,使得 g 的 x次幂等于 h。这与实数域中的对数类似,但在群结构中实现。

群的选择

离散对数问题定义在群 G 上,并且当群的生成元 g 存在时,才有意义。通常在 Diffie-Hellman 密钥交换中使用的是模 p 的乘法群。密钥学中常用的群是基于质数阶 p 的乘法群 或者其子群。这种群结构保证了在没有私钥的情况下,无法在合理时间内计算出 \log_g h,即计算离散对数的逆问题难度很高。

3.2 快速幂模运算

从DH的计算流程,可以看到主要涉及形如的计算,针对这种计算,可以引入快速幂模运算(Exponentiation by Squaring),其是一种用于计算形如 的高效算法。它在时间复杂度上比直接计算幂次然后取模的方式要低很多。

3.2.1 基本思想

快速幂模运算的核心思想是将指数的幂次按二进制分解,通过不断平方和减少乘法运算的次数来实现快速计算。

例如,要计算 ,可以按以下步骤进行:

  • 如果 b 是偶数,那么 。此时,可以将问题转化为计算 并平方后取模。
  • 如果 b 是奇数,那么 。此时,可以将问题转化为计算 ,再乘上 a 后取模。

这种分解方式可以在 的时间内计算出结果,比直接计算幂次的 O(b) 要高效得多。

3.2.2 算法步骤

以下是快速幂模运算的具体实现步骤:

  1. 初始化

    • 设定结果 result = 1,表示当前的幂次结果。
    • 将基数 a 设为 a % m,将指数 b 和模数 m 保持不变。
  2. 循环操作

    当 b > 0 时,重复以下步骤:

    • b 更新为 b = b // 2,即将指数减半。
    • a 更新为 ,即计算下一次的平方。
    • 如果 b 是奇数,将 result 更新为 result = (result * a) % m
  3. 结束条件

    当 b = 0 时,循环结束,此时 result 就是 的结果。

3.2.3 代码示例

python 复制代码
import time

def mod_exp(a, b, m):
    result = 1  # 初始化结果
    a = a % m   # 取模操作,简化 a 的大小
    while b > 0:
        # 如果 b 是奇数,将 result 更新为 (result * a) % m
        if b % 2 == 1:
            result = (result * a) % m
        # 更新 a 为 a^2 % m
        a = (a * a) % m
        # 将 b 减半
        b = b // 2
    return result


#测试示例:计算 3^130000 mod 7

# 普通方法
s_t = time.time()
a = 3**130000 % 7
print(a)
print(time.time() - s_t)  # time cost: 0.006815910339355469

# 快速幂模运算
s_t = time.time()
print(mod_exp(3, 130000, 7)) 
print(time.time() - s_t)  # 7.867813110351562e-06

4 群论基础以及整数模 n 乘法群

【6,7】讨论了群论相关的基础知识,这里做一些笔记,帮助自己更好的理解。

4.1 群的定义

群(Group):群是一个集合和一个满足四条群公理的二元运算组成的代数结构。它必须满足以下四个基本公理:

封闭性(Closure)

对于群 G 中任意的两个元素 a 和 b,其运算结果 也必须属于群 G。这意味着在群内进行运算时不会跳出该集合。

结合律(Associativity)

对于任意 ,满足 。结合律保证了运算的结果不依赖于运算的顺序。

单位元(Identity Element)

存在一个特殊的元素 ,使得对于任意 ,有 。这个元素 e 被称为群的单位元或恒等元。

逆元(Inverse Element)

对于每个元素 ,存在一个元素 ,使得 ,其中 e 是单位元。这个元素 b 称为 a 的逆元,记作

4.2 群的阶(Order of a Group and an Element)

群的阶(Order of a Group)

一个群 G 的阶(order)表示群中元素的总数,记作 |G| 或 ord(G)。群的阶可以是有限的(有限群)或者无限的(无限群)。

元素的阶(Order of an Element)

群中一个元素 a 的阶是指满足 的最小正整数 m,其中 e 为单位元。若不存在这样的 m,则称 a 的阶为无限大。

4.3 子群(Subgroup)

子群的定义

一个群 H 是群 G 的子群,如果 H 是 G 的一个子集,并且 H 本身也是一个群。即 H 必须满足封闭性、结合律、单位元和逆元存在的四条群公理。

子群的记号为,表示 H 是 G 的子群。

子群检验准则(Subgroup Test)

若要验证一个非空集合 H 是否为群 G 的子群,只需满足以下三条:

对于任意 ,则 (封闭性)。

对于任意 ,则 (逆元存在)。

H 包含 G 的单位元 e。

4.4 求幂(Exponentiation in Groups)

在群 G 中,求幂表示对某个元素 a 进行 n 次二元运算,即 (共 n 个 a)。注意在不同的群中,幂的定义和性质可能有所不同。

当 n 为负数时, 表示 a 的逆元 的 n 次幂。

在乘法群中,幂次指代通常的乘法运算,例如

在加法群中(如整数群),幂次对应重复的加法运算,例如

4.5 阿贝尔群(Abelian Group)

定义

一个群 G 被称为阿贝尔群,如果它的群运算满足交换律,即对于任意 ,有

特性

阿贝尔群的所有元素之间的运算都是可交换的。经典例子包括整数加法群、实数加法群 等。

4.6. 循环群(Cyclic Group)

定义

循环群是由一个元素 g的幂生成的群。若 G 的每个元素都可以表示为 g 的某个幂次 ,则称 G 是由 g 生成的循环群,记作

生成元

g 称为循环群 G 的生成元。若 G 是一个有限群,则它的阶等于生成元 g 的阶。若 G 是无限群,则 g 的阶也为无限。

结构

循环群可以是有限的,如 ​ 表示的整数模 n 加法群,也可以是无限的,如

例子

模 n 的加法群,它是一个有限的循环群,生成元为 1。

4.7 整数模 n 乘法群

4.7.1 整数模 n 乘法群的定义

模 n 的整数乘法群(Multiplicative group of integers modulo nnn)由模 n 的所有与 n互质的整数构成。在这个乘法群中,元素是模 n 的不同同余类,例如整数 a的同余类表示为

符号表示 :整数模 n 乘法群通常记作 ,表示所有与 n 互质的模 n 的同余类的集合。

4.7.2 整数模 n 乘法群的元素

一个整数 a 在模 n 中的同余类可以表示为 。如果 ,则 a 和 n 是互质的,a 的模 n 同余类形成一个单位元在模 n 中的乘法群元素。例如,当 n = 8 时,模 8 的乘法群元素 ,即所有与 8 互质的正整数同余类。

4.7.3 模 n 乘法群的证明

模 n 乘法群是一个群的证明,具体包含以下四条公理:

  1. 封闭性

    对于任意 ,它们的乘积 仍然是模 n 乘法群的元素。这是因为 ,根据数论性质,

  2. 结合性

    整数模 n下的乘法运算满足结合律,因此模 n 的乘法群也自然满足结合律。

  3. 存在单位元

    单位元在群中总是存在的,单位元即同余类 ,它在所有元素 a 中满足

  4. 存在逆元

    每个元素 都存在一个逆元素 ,满足 。由于 ,根据数论中的Bézout's identity,可以找到整数 x 和 k,使得:, 意味着存在整数 x,使得 ,因此 x 就是 a 的模 n 逆元,即

5. 参考材料

【1】The semi-honest DH-PSI protocol

【2】Private Matching for Compute

【3】Vertical Federated Learning without RevealingIntersection Membership

【4】Diffie--Hellman key exchange

【5】RSA, integer factorization, Diffie--Hellman, discrete logarithm computatio

【6】Group Theory

【7】离散对数问题与Diffie-Hellman密钥交换

相关推荐
yunteng52118 天前
零知识证明-公钥分发方案DH((六)
算法·区块链·零知识证明·密钥分发·dh