RSA算法及其实现

RSA

Generation

  1. 取两个大质数 $p$ 和 $q$ ,为了安全性 $p$ 和 $q$ 长度应 大于 $2048$ 位;
  2. 设 $n = pq$;
  3. 设 $m = \phi(n) = (p-1)(q-1)$;
  4. 取 $e$,使得 $2 < e < m$且 $gcd(e, m) = 1$;
  5. 取 $d$,使得 $d \times e \equiv 1 \ (mod\ m)$;
  6. 此时,公钥为 $(n, e)$,私钥为 $(n, d)$。

Encryption

约定 $x$ 为 plaintext, $y$ 为 cyphertext

$$ y = x^e \ mod \ n $$

Decryption

$$ x = y^d\ mod \ n $$

Proof

当 $x$ 与 $n$ 互质时,有

$$ \begin{align*} x &= y^d \ mod \ n \\ x’ &= x^{ed} \ mod \ n \end{align*} $$

设 $k$ 为一自然数,则由同余的定义,有

$$ \begin{align*} x’ &= x^{km + 1} \ mod \ n \\ &= x \times (x^{\phi(n)})^k \ mod \ n \end{align*} $$

由欧拉定理,得

$$ x’ = x \ mod \ n = x $$

当 $x$ 与 $n$ 不互质时,不妨设 $x$ 为 $p$ 的倍数,记为 $x = ap$,其中 $a$ 是一正整数。

$$ \begin{align*} x^{\phi(q)} &\equiv 1 \ (mod \ q) \\ x^{k\phi(p)\phi(q)} &\equiv 1 \ (mod \ q) \\ x^{k\phi(p)\phi(q)} &= 1 + bq \end{align*} $$

$$ \begin{align*} x’ &= x^{km+1} \ mod \ n \\ &= x \times (1 + bq) \ mod \ n \\ &= (x + bqx) \ mod \ n \\ &= x \ mod\ n = x \end{align*} $$

Security

若想通过公钥推知私钥,则必须对密钥 $n$ 进行分解质因数,由于这是一个数论难题,因此只需要将 $n$ 设置的足够大,则可以确保安全性。

RSA-CRT

由于接收者同时知道 $q$ 和 $p$ ,故由中国剩余定理(CRT),将 $mod \ n$的操作拆分,可实现加速。

Decryption

$$ \begin{align*} m_1 &= y^d \ mod \ q \\ m_2 &= y^d \ mod \ p \end{align*} $$

通过预处理出 $(d \ mod \ q)$ 和 $(d \ mod \ p)$,将上式转化为

$$ \begin{align*} m_1 &= y^{d \ mod \ q} \ mod \ q \\ m_2 &= y^{d \ mod \ p} \ mod \ p \end{align*} $$

根据CRT即可在不对 $n$ 进行模运算的情况下求出原文,此处的结论是

$$ x = m_2 + q \times (p^{-1} \times (m_1 - m_2) \ mod \ q) $$

注意后面的 $mod \ q$ 括号内的操作均视为在Galois域 $GF(q)$ 内进行的操作。

参考文献

[1] “RSA —— 经典的非对称加密算法,” 知乎专栏. https://zhuanlan.zhihu.com/p/450180396

Published At