RSA 算法

来自GSXAB的知识库
RSA
术语名称 RSA
英语名称 RSA
别名 Rivest-Shamir-Adleman algorithm

RSA算法指一种公钥加密系统,是根据 Euler 定理的直接推论。 其安全性基于大质数分解的困难性,目前在作为密钥的大质数足够大的情况下,未有有效破解办法公布。

算法

原理

对大整数 [math]\displaystyle{ \alpha, \beta, n }[/math] ,若有

  • [math]\displaystyle{ n = pq }[/math], 其中 [math]\displaystyle{ p,q }[/math] 是两个大质数;
  • [math]\displaystyle{ \alpha \beta \equiv 1 \pmod{\varphi(n)} }[/math][math]\displaystyle{ \alpha \beta \equiv 1 \pmod{(p-1)(q-1)} }[/math]

则有

  • 对任意整数 [math]\displaystyle{ m }[/math] ,有 [math]\displaystyle{ m^{\alpha\beta} \equiv m \pmod n }[/math] (根据欧拉定理 [math]\displaystyle{ m^{\varphi(n)} \equiv 1 \pmod{n} }[/math][math]\displaystyle{ \alpha \beta \equiv 1 \pmod{\varphi(n)} }[/math] 易得)
  • 对任意整数 [math]\displaystyle{ A }[/math] ,有 [math]\displaystyle{ 0 \leq A \lt n }[/math] ,都存在唯一 [math]\displaystyle{ B }[/math] 满足 [math]\displaystyle{ 0 \leq B \lt n }[/math][math]\displaystyle{ B \equiv A^\alpha \pmod n }[/math] ,同时有 [math]\displaystyle{ B^\beta \equiv A^{\alpha\beta} \equiv A \pmod n }[/math]

同时,如果不知道 [math]\displaystyle{ p, q }[/math] ,通过 [math]\displaystyle{ n }[/math] 得知 [math]\displaystyle{ \varphi(n) }[/math] 需要通过质因数分解。这是一个已知的困难问题。

注:由于最初论文中使用的是 [math]\displaystyle{ \alpha \beta \equiv 1 \pmod{\varphi(n)} }[/math] ,以上也使用这一表述。实际上这是要计算一个 [math]\displaystyle{ k^{\alpha \beta} \equiv 1 \pmod{n} }[/math][math]\displaystyle{ \alpha\beta }[/math] 整体, Euler 定理保证 Euler 函数 [math]\displaystyle{ \varphi(n) }[/math] 的倍数总是满足这一条件,但这是一个充分不必要条件,其充要条件是 Carmichael 函数 [math]\displaystyle{ \lambda(n) }[/math] 的倍数。

算法

密钥生成

  1. 随机选取两个大质数 [math]\displaystyle{ p, q }[/math] ,为保证难以破解,应当尽量随机、两个数较大且差也较大。
    • 选取的方式一般随机生成大数并进行质数测试直到确认两个数都是质数为止。
  2. 计算 [math]\displaystyle{ n = pq }[/math]
  3. 计算 [math]\displaystyle{ \lambda(n) = \operatorname{lcm}(\lambda(p), \lambda(q)) = \operatorname{lcm}(p-1, q-1) }[/math]
  4. 选择整数 [math]\displaystyle{ \alpha }[/math] ,要求满足 [math]\displaystyle{ 2 \lt \alpha \lt \lambda(n) }[/math] ,且与 [math]\displaystyle{ \lambda(n) }[/math] 互质。
    • 由于后续会被公开,往往会选择一个二进制位1较少的较小值来提高效率。
  5. 计算满足 [math]\displaystyle{ \alpha\beta \equiv 1 \pmod{\lambda(n)} }[/math][math]\displaystyle{ \beta }[/math]
    • 由于 [math]\displaystyle{ \alpha }[/math][math]\displaystyle{ \lambda(n) }[/math] 互质,可以直接通过扩展欧几里得算法得到。

密钥分发

[math]\displaystyle{ n, \alpha }[/math] 作为公钥通过可信信道进行分发,不要求是加密信道。同时 [math]\displaystyle{ \beta }[/math] 作为私钥被保密,不应该被分发。

这一后就能保证双方可以交接信息。

加密

发送信息 [math]\displaystyle{ M }[/math] 时,可能先通过某种随机的结构化填充,得到 [math]\displaystyle{ m }[/math]

计算 [math]\displaystyle{ c \equiv m^\alpha \pmod n }[/math] 。这里可以使用模算术版本的快速幂的算法计算。

  • 存在一些数使得 [math]\displaystyle{ c=m }[/math] 但因为概率上很难取到,实践中可以忽略。
  • 填充步骤是为了防止一些极特殊取值被推算出来,比如 [math]\displaystyle{ m }[/math] 较小时可能直接取到对应的幂,哪怕不知道模数,也可以直接开方出来。

解密

计算 [math]\displaystyle{ c^\beta \equiv m^{\alpha\beta} \equiv m \pmod n }[/math] ,即可得到被填充的信息。

按填充的方式反过来提取出原本部分,就得到了原信息 [math]\displaystyle{ M }[/math]


同余理论
同余 剩余类 互质剩余类
完全剩余系 简化剩余系Euler 函数
Fermat 小定理 Euler 定理
一元同余方程
一次 一次同余方程大衍求一术
中国剩余定理
二次 二次同余方程二次剩余
Euler 准则Legendre 符号二次互反律Jacobi 符号
高次 二项同余方程[math]\displaystyle{ n }[/math] 次剩余
质数模高次同余方程Lagrange 定理等价同余方程