Rabin 公钥加密算法的加密与解密过程
字数 2605 2025-12-14 08:57:32

Rabin 公钥加密算法的加密与解密过程


1. 题目描述
Rabin 公钥加密算法由 Michael Rabin 在 1979 年提出,其安全性基于大整数分解的困难性(与 RSA 类似),但具有一个独特的性质:解密时会产生多个可能的明文,需要额外信息确定正确明文。本题将详解 Rabin 算法的完整过程,包括密钥生成、加密、解密步骤,并解释为何会得到多个解密结果。


2. 密钥生成
密钥生成与 RSA 类似,但公钥结构更简单:

  • 随机选择两个大素数 \(p\)\(q\),满足 \(p \equiv q \equiv 3 \ (\text{mod} \ 4)\)。这个限制是为了简化解密运算。
  • 计算 \(n = p \times q\)\(n\) 即为公钥,\((p, q)\) 为私钥。

示例
\(p = 3, q = 11\)(实际应用需数百位的大素数)。
则公钥 \(n = 33\),私钥 \((p, q) = (3, 11)\)


3. 加密过程
对明文 \(m\)(需满足 \(0 \leq m < n\) 的整数),加密为密文 \(c\)

\[c = m^2 \ \text{mod} \ n \]

示例
\(m = 4\),则 \(c = 4^2 \ \text{mod} \ 33 = 16\)

注意

  • 加密只需公钥 \(n\),计算简单。
  • 若明文较长,需分块处理。

4. 解密过程
解密是 Rabin 算法的核心,需解决同余方程 \(m^2 \equiv c \ (\text{mod} \ n)\)
由于 \(n = p \times q\),可分解为两个方程:

\[m^2 \equiv c \ (\text{mod} \ p), \quad m^2 \equiv c \ (\text{mod} \ q) \]

步骤详解
(1)计算 \(c\) 在模 \(p\) 和模 \(q\) 下的平方根。
利用条件 \(p \equiv 3 \ (\text{mod} \ 4)\),平方根公式为:

\[m_p = c^{\frac{p+1}{4}} \ \text{mod} \ p, \quad m_q = c^{\frac{q+1}{4}} \ \text{mod} \ q \]

推导:由费马小定理 \(c^{p-1} \equiv 1 \ (\text{mod} \ p)\),且 \(c\) 是模 \(p\) 的二次剩余时,有 \(c^{\frac{p-1}{2}} \equiv 1 \ (\text{mod} \ p)\)。则:

\[(c^{\frac{p+1}{4}})^2 \equiv c \cdot c^{\frac{p-1}{2}} \equiv c \ (\text{mod} \ p) \]

同理计算 \(m_q\)

(2)用中国剩余定理(CRT)组合四个解。
每个方程有两个平方根:\(\pm m_p\)\(\pm m_q\),共四种组合,对应四个解:

\[\begin{cases} m_1 = \text{CRT}(+m_p, +m_q) \\ m_2 = \text{CRT}(+m_p, -m_q) \\ m_3 = \text{CRT}(-m_p, +m_q) \\ m_4 = \text{CRT}(-m_p, -m_q) \end{cases} \]

其中 CRT 计算为:

\[m = (m_p \cdot q \cdot q^{-1} \ \text{mod} \ p + m_q \cdot p \cdot p^{-1} \ \text{mod} \ q) \ \text{mod} \ n \]

\(p^{-1}\)\(p\)\(q\) 的逆元)

示例(接上例 \(c=16, p=3, q=11\)):

  • \(p=3\)\(m_p = 16^{\frac{3+1}{4}} \ \text{mod} \ 3 = 16^1 \ \text{mod} \ 3 = 1\)
  • \(q=11\)\(m_q = 16^{\frac{11+1}{4}} \ \text{mod} \ 11 = 16^3 \ \text{mod} \ 11 = 4\)(因 \(16 \equiv 5\)\(5^3=125 \equiv 4 \ \text{mod} \ 11\))。
  • 四种组合计算(简化计算):
    \(m_1 = \text{CRT}(1,4) = 4\)(正确明文)
    \(m_2 = \text{CRT}(1,-4) = 26\)(因 \(-4 \equiv 7 \ \text{mod} \ 11\)
    \(m_3 = \text{CRT}(-1,4) = 7\)
    \(m_4 = \text{CRT}(-1,-4) = 29\)

5. 确定正确明文
解密得到四个整数 \(\{4, 26, 7, 29\}\),但只有一个对应原始明文。常用方法:

  • 在明文中添加固定格式冗余(如尾部重复位),解密后筛选。
  • 或通过额外信息(如明文的语义校验)识别。

注意:若明文空间小于 \(n\),可能仅有一个解在合理范围内。


6. 安全性说明

  • 攻击者要从 \(c\)\(n\) 恢复 \(m\),需计算模 \(n\) 的平方根,这等价于分解 \(n\)(已知 \(p, q\) 才能高效计算)。
  • 与 RSA 相比,Rabin 加密具有可证明安全性:破解加密等价于分解大整数(RSA 无严格证明)。
  • 缺点:解密不唯一,需冗余信息;速度略慢于 RSA 解密。

7. 总结
Rabin 算法是经典的非对称加密方案,其加密为平方模 \(n\),解密需解二次同余方程并通过 CRT 得到多个候选。它在理论上具有“攻破等价于分解”的优势,但实践中因解密歧义需结合填充方案(如 PKCS#1 的修改版)使用。

Rabin 公钥加密算法的加密与解密过程 1. 题目描述 Rabin 公钥加密算法由 Michael Rabin 在 1979 年提出,其安全性基于 大整数分解的困难性 (与 RSA 类似),但具有一个独特的性质:解密时会产生多个可能的明文,需要额外信息确定正确明文。本题将详解 Rabin 算法的完整过程,包括密钥生成、加密、解密步骤,并解释为何会得到多个解密结果。 2. 密钥生成 密钥生成与 RSA 类似,但公钥结构更简单: 随机选择两个大素数 \( p \) 和 \( q \),满足 \( p \equiv q \equiv 3 \ (\text{mod} \ 4) \)。这个限制是为了简化解密运算。 计算 \( n = p \times q \),\( n \) 即为公钥,\( (p, q) \) 为私钥。 示例 : 选 \( p = 3, q = 11 \)(实际应用需数百位的大素数)。 则公钥 \( n = 33 \),私钥 \( (p, q) = (3, 11) \)。 3. 加密过程 对明文 \( m \)(需满足 \( 0 \leq m < n \) 的整数),加密为密文 \( c \): \[ c = m^2 \ \text{mod} \ n \] 示例 : 若 \( m = 4 \),则 \( c = 4^2 \ \text{mod} \ 33 = 16 \)。 注意 : 加密只需公钥 \( n \),计算简单。 若明文较长,需分块处理。 4. 解密过程 解密是 Rabin 算法的核心,需解决同余方程 \( m^2 \equiv c \ (\text{mod} \ n) \)。 由于 \( n = p \times q \),可分解为两个方程: \[ m^2 \equiv c \ (\text{mod} \ p), \quad m^2 \equiv c \ (\text{mod} \ q) \] 步骤详解 : (1)计算 \( c \) 在模 \( p \) 和模 \( q \) 下的平方根。 利用条件 \( p \equiv 3 \ (\text{mod} \ 4) \),平方根公式为: \[ m_ p = c^{\frac{p+1}{4}} \ \text{mod} \ p, \quad m_ q = c^{\frac{q+1}{4}} \ \text{mod} \ q \] 推导 :由费马小定理 \( c^{p-1} \equiv 1 \ (\text{mod} \ p) \),且 \( c \) 是模 \( p \) 的二次剩余时,有 \( c^{\frac{p-1}{2}} \equiv 1 \ (\text{mod} \ p) \)。则: \[ (c^{\frac{p+1}{4}})^2 \equiv c \cdot c^{\frac{p-1}{2}} \equiv c \ (\text{mod} \ p) \] 同理计算 \( m_ q \)。 (2)用中国剩余定理(CRT)组合四个解。 每个方程有两个平方根:\( \pm m_ p \) 和 \( \pm m_ q \),共四种组合,对应四个解: \[ \begin{cases} m_ 1 = \text{CRT}(+m_ p, +m_ q) \\ m_ 2 = \text{CRT}(+m_ p, -m_ q) \\ m_ 3 = \text{CRT}(-m_ p, +m_ q) \\ m_ 4 = \text{CRT}(-m_ p, -m_ q) \end{cases} \] 其中 CRT 计算为: \[ m = (m_ p \cdot q \cdot q^{-1} \ \text{mod} \ p + m_ q \cdot p \cdot p^{-1} \ \text{mod} \ q) \ \text{mod} \ n \] (\( p^{-1} \) 是 \( p \) 模 \( q \) 的逆元) 示例 (接上例 \( c=16, p=3, q=11 \)): 模 \( p=3 \):\( m_ p = 16^{\frac{3+1}{4}} \ \text{mod} \ 3 = 16^1 \ \text{mod} \ 3 = 1 \)。 模 \( q=11 \):\( m_ q = 16^{\frac{11+1}{4}} \ \text{mod} \ 11 = 16^3 \ \text{mod} \ 11 = 4 \)(因 \( 16 \equiv 5 \),\( 5^3=125 \equiv 4 \ \text{mod} \ 11 \))。 四种组合计算(简化计算): \( m_ 1 = \text{CRT}(1,4) = 4 \)(正确明文) \( m_ 2 = \text{CRT}(1,-4) = 26 \)(因 \(-4 \equiv 7 \ \text{mod} \ 11\)) \( m_ 3 = \text{CRT}(-1,4) = 7 \) \( m_ 4 = \text{CRT}(-1,-4) = 29 \) 5. 确定正确明文 解密得到四个整数 \( \{4, 26, 7, 29\} \),但只有一个对应原始明文。常用方法: 在明文中添加固定格式冗余(如尾部重复位),解密后筛选。 或通过额外信息(如明文的语义校验)识别。 注意 :若明文空间小于 \( n \),可能仅有一个解在合理范围内。 6. 安全性说明 攻击者要从 \( c \) 和 \( n \) 恢复 \( m \),需计算模 \( n \) 的平方根,这等价于分解 \( n \)(已知 \( p, q \) 才能高效计算)。 与 RSA 相比,Rabin 加密具有 可证明安全性 :破解加密等价于分解大整数(RSA 无严格证明)。 缺点:解密不唯一,需冗余信息;速度略慢于 RSA 解密。 7. 总结 Rabin 算法是经典的非对称加密方案,其加密为平方模 \( n \),解密需解二次同余方程并通过 CRT 得到多个候选。它在理论上具有“攻破等价于分解”的优势,但实践中因解密歧义需结合填充方案(如 PKCS#1 的修改版)使用。