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 的修改版)使用。