扩展欧几里得

DeeLMind大约 2 分钟

扩展欧几里得

扩展欧几里得算法用于计算同余方程 de1(modϕ(n))d \cdot e \equiv 1 \pmod{\phi(n)} 中的 dd,即求解 dd 使得 de1d \cdot e - 1ϕ(n)\phi(n) 的倍数。以下是详细的计算步骤。

步骤 1:计算最大公约数

首先,需要计算 eeϕ(n)\phi(n) 的最大公约数 gcd(e,ϕ(n))\gcd(e, \phi(n))。如果 gcd(e,ϕ(n))=1\gcd(e, \phi(n)) = 1,则说明 eeϕ(n)\phi(n) 互素,存在解;否则无法解出 dd

步骤 2:使用扩展欧几里得算法

扩展欧几里得算法用于求解线性方程:

de+kϕ(n)=1 d \cdot e + k \cdot \phi(n) = 1

其中,dd 就是我们需要找到的私钥指数。

扩展欧几里得算法步骤:

  1. 初始化: 给定 eeϕ(n)\phi(n),目标是找到 ddkk

  2. 迭代步骤:使用欧几里得算法递归计算最大公约数,并逐步得到 ddkk 的值。

  3. 反向代入:从最后的余数开始反推,得到系数 ddkk

示例

假设我们要解以下方程:

d71(mod40) d \cdot 7 \equiv 1 \pmod{40}

计算 gcd(7,40)\gcd(7, 40)

使用欧几里得算法:

  • 40=57+540 = 5 \cdot 7 + 5
  • 7=15+27 = 1 \cdot 5 + 2
  • 5=22+15 = 2 \cdot 2 + 1
  • 2=21+02 = 2 \cdot 1 + 0

因为 gcd(7,40)=1\gcd(7, 40) = 1,可以继续。

反向代入:

从最后的余数开始反推:

  • 1=5221 = 5 - 2 \cdot 2
  • 1=52(715)=35271 = 5 - 2 \cdot (7 - 1 \cdot 5) = 3 \cdot 5 - 2 \cdot 7
  • 1=3(4057)27=3401771 = 3 \cdot (40 - 5 \cdot 7) - 2 \cdot 7 = 3 \cdot 40 - 17 \cdot 7

所以,d=17(mod40)d = -17 \pmod{40}

dd 转换为正数:

d=17+40=23 d = -17 + 40 = 23

因此,d=23d = 23,这是满足 d71(mod40)d \cdot 7 \equiv 1 \pmod{40} 的解。

代码示例(Python)

def extended_gcd(a, b):
    if b == 0:
        return a, 1, 0
    gcd, x1, y1 = extended_gcd(b, a % b)
    x = y1
    y = x1 - (a // b) * y1
    return gcd, x, y

def mod_inverse(e, phi_n):
    gcd, x, y = extended_gcd(e, phi_n)
    if gcd != 1:
        raise Exception('No modular inverse exists')
    else:
        return x % phi_n

# 示例:求解 d * 7 ≡ 1 (mod 40)
e = 7
phi_n = 40
d = mod_inverse(e, phi_n)
print(f"d = {d}")
上次编辑于:
贡献者: DeeLMind