夜阑卧听风吹雨

铁马冰河入梦来

Loading

RSA 加密算法原理学习笔记-1

RSA算法原理(一) - 阮一峰的网络日志

RSA 加密算法

RSA 加密算法是一种非对称加密算法,加密和解密的密钥是不同的。

(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密
(3)乙方得到加密后的信息,用私钥解密

密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长 RSA 密钥是 768 个二进制位。也就是说,长度超过 768 位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024 位的 RSA 密钥基本安全,2048 位的密钥极其安全。

基础数论知识

同余定理

给定一个正整数,如果两个整数 a 和 b 满足 a - b 能够被 m 整除,即 (a-b)/m 得到一个整数,那么就称整数 a 与 b 对模 m 同余,记作 \(a \equiv b \pmod m\)。对模 m 同余是整数的一个等价关系。

  • \(a \div m = k \cdots b\) ,换句话说,就是 a 除以 m 余 b。
  • \((a - b) \div m = k,\)可以改写成:\(b = a - km\)
  • 根据定义,这个恒等式的变换可以看成:\(a \equiv b \pmod m\),b 左移:\(a - b = km\)
  • 掌握好这几个小结论,后续论证中会使用到。

互质关系

两个正整数只有 1 这个公因子,那么这两个数有互质关系。

  • 别忘了,两个相等的数是不互质的,公因数除 1 外还有本身。所以互质的两个数肯定是不等的,定义里已经排除了这种可能性。
  • 两个不等的质数一定互质(下面的第 2 点),因为他们的因数都只有 1 和本身,所以相同的因数只有 1。反过来不成立。
  • 一些结论:
  1. 1 和任意一个自然数是都是互质关系,比如 1 和 99。
  2. 任意两个质数构成互质关系,比如 13 和 61。
  1. 一个数是质数另一个数只要不是前者的倍数或者小于前者,两者就构成互质关系,比如 3 和 10、17 和 4。
  1. p 是大于 1 的整数,则 p 和 p-1 构成互质关系,比如 57 和 56。
  2. p 是大于 1 的奇数,则 p 和 p-2 构成互质关系,比如 17 和 15。
  • 质数:2,3,5,7,11,13,17,19,23,29,31,37...

欧拉函数

计算小于等于 n 的所有正整数中,与 n 有互质关系的所有正整数个数。这种算法称为欧拉函数,以 φ(n) 表示。

这个函数可以根据互质关系的相关结论计算(以下 = 为等于,不是代码中的赋值):

  1. n = 1φ(1) = 1

  2. n 为质数:φ(n) = n-1。因为小于 n 的数都与 n 互质。

  3. n 为某质数某次方,n = p^kp 为质数,k 为大于等于1的整数):
    那么,$$\phi(n) = \phi(p^k) = p^k - p^{k-1}$$

    • 比如 n = 8\(φ(8) = φ(2^3) = 2^3 - 2^2 = 8 - 4 = 4\)
    • 这是因为只有当一个数不包含因数 p,才与 n 互质。包含因数 p 的数有:\(1×p、2×p、3×p、...p^{k-1}×p\)\(p^{k-1}\) 个。
    • 可以看出上面第 2 种情况是 k = 1 时的特例。
    • 公式也可以写成:$$\phi(n) = \phi(p^k) = p^k - p^{k-1} = p^k(1-\frac1p)$$
  4. n 可以分解成两个互质的整数之积,n = p × q

\[\phi(n) = \phi(pq) = \phi(p)\phi(q) \]

  • 即:积的欧拉函数等于各个因子的欧拉函数之积
  • 比如,\(φ(56) = φ(8×7) = φ(8)×φ(7) = 4×6 = 24\)
  • 证明需要使用“中国剩余定理”。
  1. 最终通用推算:
    算术基本定理:任意一个大于 1 的正整数,都可以写成一系列质数的积:\(n = p^{k_1}_1p^{k_2}_2 \ldots p^{k_r}_r\)(它将把对自然数的研究转化为对其最基本的元素——质数/素数的研究)。
    因此根据第 4 种情况的结论(可拆),得到任意一个大于 1 的正整数的欧拉函数:\(\phi(n) = \phi(p^{k_1}_1)\phi(p^{k_2}_2)\ldots\phi(p^{k_r}_r)\)
    再根据第 3 种情况的结论(原数是质数多次方),可改写为:\(\phi(n) = p^{k_1}_1p^{k_2}_2...p^{k_r}_r(1-\frac1p_1)(1-\frac1p_2)\ldots(1-\frac1p_r)\)
    也就是:

\[\phi(n) = n(1-\frac1p_1)(1-\frac1p_2)\ldots(1-\frac1p_r) \]

这便是欧拉函数的通用计算公式。

欧拉定理

欧拉函数的应用在于欧拉定理。

欧拉定理:如果两个正整数 a 和 n 互质,则 n 的欧拉函数 φ(n) 可以让下面的等式成立:

\[a^{\phi(n)} \equiv 1 \pmod n \]

  • 即:aφ(n) 次方除以 n 的余数恒等于 1
  • 或者说:aφ(n) 次方减 1 可以被 n 整除。

比如 4 和 5:
4 的欧拉函数结果为 2,满足 \(5^2 \div 4 = 6 \cdots 1\)。也就是 \((5^2 -1 )\) 可以被 4 整除。

  • 一个小例子,7 和 10 为互质关系,因为 φ(10) = 4,所以 \(7^4 \div 10\) 最终余 1,也就是说其个位数为 1。
    那么,7 的任意 4 倍数次方个位数肯定是 1,即:\(7^{4k} \equiv 1 \pmod {10}\)(因为个位数为 1 的任意个这种数相乘个位数肯定还是 1 啊)。
    • 计算 φ(10):拆为 φ(2)φ(5)25都是质数,所以它们的欧拉函数结果是 2 - 1、5 - 1,即 φ(2) = 1φ(5) = 4。最终得到 φ(10) = 4

欧拉定理有一个特殊的情况,假设正整数 a 与质数 p 为互质关系,因为 φ(p) = p - 1,那么:

\[a^{p-1} \equiv 1 \pmod p \]

这就是费马小定理,是欧拉定理中一个数为质数的特例。

模反元素(模逆元)

如果两个正整数 a 和 n 互质,那么一定可以找到整数 b ,使得 ab-1 被 n 整除,或者说 ab 被 n 除的余数是 1,那么:

\[ab \equiv 1 \pmod n \]

称 b 为 a 的模反元素(称模反元素时,还需要另一个数 n 作为环境)。

  • 可以根据欧拉定理进行验证模反元素存在的必然性
    \(\because\) a 和 n 互质满足欧拉定理
    \(\therefore\) 根据欧拉定理得:\(a^{\phi(n)} \equiv 1 \pmod n\)
    \(a \times a^{\phi(n-1)} \equiv 1 \pmod n\)
    \(\therefore\)\(b = a^{\phi(n-1)}\),那么 b 就是 a 的一个模反元素

比如,4 和 7 互质,利用欧拉定理求:\(φ(4) = φ(2^2) = 2^2 - 2^1 = 2\),所以 \(7^2 = 1 \pmod 4\),因为不能再取 b为 7,所以就换另一边计算。
\(φ(7) = 7 - 1 = 6\),所以 \(4^6 = 1 \pmod 7\),得到 \(4 \times 4^5 = 1 \pmod 7\),可以获得 45 是 4 的一个模反元素。
显然模反元素不止一个。45加减任意个 7 均是 4 的模反元素,既满足 b + kn 即可(b 是45,n 是 7)。

  • 所以计算模反元素时可以使用方程式: \(ab - 1 = kφ(n)\)
posted @ 2020-12-15 13:42  二次蓝  阅读(229)  评论(0编辑  收藏  举报