基于二次剩余的Rabin公钥算法
同余方程求解
1. 单个线性同余方程
方程 \(ax = b \mod m\) 有解的充要条件是 \(\gcd(a, m) \mid b\),此时有 \(\gcd(a, m)\) 个解。
若 \(x_0\) 是一个特解,则通解为:
\(x_i = x_0 + \frac{m}{\gcd(a, m)} \cdot i \mod m \quad (i = 0, 1, \dots, \gcd(a, m)-1)\)
2. 中国剩余定理(CRT)
对于同余方程组:
\(
\begin{cases}
a_1 x \equiv b_1 \mod m_1 \\
\vdots \\
a_n x \equiv b_n \mod m_n
\end{cases}
\)
其中 \(m = m_1 m_2 \cdots m_n\),\(M_i = m / m_i\),且 \(M_i'\) 满足 \(M_i' \cdot M_i \equiv 1 \mod m_i\),则解为:
\(x = M_1' M_1 b_1 + \cdots + M_n' M_n b_n \mod m\)
二次剩余有解判定
1. 定义
若 \((n, m) = 1\) 且存在 \(x\) 使得 \(x^2 \equiv n \mod m\),则称 \(n\) 是模 \(m\) 的 二次剩余
2. 二次剩余的判定
- Legendre 符号(\(m\) 为素数):\(\left( \frac{n}{m} \right)\)
- Jacobi 符号(\(m\) 为合数):\(\left( \frac{n}{m} \right)\)
详细计算方法:https://www.cnblogs.com/luminescence/p/18638517
集合表示
- 二次剩余集合:\(QR_n = \{ x \in \mathbb{Z}_n^* \mid \exists y \text{ 使 } y^2 \equiv x \mod n \}\);
- Jacobi 集合:\(J_n = \{ x \in \mathbb{Z}_n^* \mid \left( \frac{x}{n} \right) = 1 \}\)。
性质(当 \(n = pq\) 时)
\(|QR_n| = |J_n| = \frac{(p-1)(q-1)}{4}\)
二次同余方程的求解
对于形如 \(x^{2} = a \mod n\) 的二次同余方程,当 \(n = pq\)(\(p, q\) 为素数)时,可以将原方程分解为:
分类讨论不同情况下解:
1. 当 \(p = 4k + 3\)(即 \(p = 3 \mod 4\))时
解:\(x = \pm a^{\frac{p+1}{4}} \mod p\)
推导过程:
- 由费马小定理:\(a^{p-1} = 1 \mod p\)
- 即 \(a^{\frac{p-1}{2}} = 1 \mod p\)
- \(a^{\frac{p+1}{2}-1} = 1 \mod p\)
- \(a^{\frac{p+1}{2}} = a \mod p\)
- \((a^{\frac{p+1}{4}})^2 = a \mod p\)
2. 当 \(p = 4k + 1\)(即 \(p = 1 \mod 4\))时
2.1 当 \(k = 2m + 1\)(即 \(p = 5 \mod 8\))时
情况1:若 \(a^{\frac{p-1}{4}} = 1 \mod p\)
- 解为:\(x = \pm a^{\frac{p+3}{8}} \mod p\)
情况2:若 \(a^{\frac{p-1}{4}} = -1 \mod p\)
- 解为:\(x = \pm 2a(4a)^{\frac{p-5}{8}} \mod p\)
2.2 当 \(k = 2m\)(即 \(p = 1 \mod 8\))时
- 需要另外讨论(Tonelli-Shanks算法)
3. 组合解
分别求出模 \(p\) 和模 \(q\) 的解后,使用中国剩余定理将解组合起来,得到原方程 \(x^{2} = a \mod n\) 的解
首先需要验证 \(a\) 是否为模 \(p\) 的二次剩余
实际应用中,当 \(n\) 很大时,分解 \(n = pq\) 本身就是困难问题
Blum整数
定义:若 \(p, q\) 为素数且满足 \(p = 3 \mod 4\),\(q = 3 \mod 4\),则 \(n = pq\) 称为 Blum整数
性质:模 \(n^2\) 平方剩余有四个平方根,且其中一个也是模 \(n\) 的平方剩余(称为原平方根)
BBS伪随机数生成器:https://www.cnblogs.com/luminescence/p/19225827
Rabin 公钥算法
1. 密钥生成
- 公钥:\(n = pq\)(\(p, q\) 为 Blum 素数);
- 私钥:\((p, q)\)。
2. 加密(E)
明文 \(m\) 加密为密文 \(c\):
\(c = m^2 \mod n\)
3. 解密(D)
通过私钥 \((p, q)\) 计算:
- 先求 \(a, b\) 满足 \(ap + bq = 1\)(扩展欧几里得算法);
- 计算 \(r = c^{(p+1)/4} \mod p\),\(s = c^{(q+1)/4} \mod q\);
- 计算 \(x = aps + bqr\),\(y = aps - bqr\);
- 密文 \(c\) 的四个平方根为 \(\pm x, \pm y\),故明文 \(m \in \{ \pm x, \pm y \}\)
无法直接确定明文是哪个,所以需要对明文进行约束
例如加上校验码或者加上哈希值等
Rabin 算法的攻击方式
1. 恢复明文攻击
求解同余方程 \(x^2 = a \mod n\) 与分解 \(n\) 等价。
设 \(x_1, x_2\) 是 \(x^2 = a \mod n\) 的两个解,则:
\((x_1 + x_2)(x_1 - x_2) = 0 \mod n\)
因此 \(\gcd(n, x_1 \pm x_2) = p\) 或 \(q\)
2. 选择密文攻击
有解密预言机(能对任意密文 \(c\) 输出解密结果 \(y\)):
- 攻击者选择密文 \(c\),通过解密预言机得到 \(y\);
- 由于 \(c = y^2 \mod n\),而 \(c = m^2 \mod n\),故 \(\Pr[y \neq m] = 1/2\);
- 若 \(y \neq m\),则 \(\gcd(m - y, n) = p\) 或 \(q\)(可分解 \(n\))
填充方案(OAEP)
OAEP (Optimal Asymmetric Encryption Padding) 是一种针对公钥加密算法的填充方案
抵抗选择密文攻击 (CCA)
OAEP 的原理
通过引入随机性,将明文消息与随机数进行混合,从而隐藏明文消息的统计特性,并增加攻击者获取明文信息的难度
OAEP 的步骤
消息填充: 将明文消息 m 填充到固定长度 k,通常使用 0 填充
生成随机数: 生成一个随机数 r
计算掩码: 使用两个掩码函数 G 和 H,分别计算掩码 \(m_0\) 和 \(m_1\):
\(m_0 = G(r) ⊕ m\) $
\(m_1 = H(m_0) ⊕ r\)
组合消息: 将 \(m_0\) 和\(m_1\) 组合成一个新的消息 \(m’\)
Rabin 算法的改进
- Williams 改进;
- KIT 改进。

浙公网安备 33010602011771号