基于二次剩余的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\) 为素数)时,可以将原方程分解为:

\[\begin{cases} x^{2} = a \mod p \\ x^{2} = a \mod q \end{cases} \]

分类讨论不同情况下解:

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 改进。
posted @ 2025-11-17 15:04  lumiere_cloud  阅读(1)  评论(0)    收藏  举报