理解 RSA 加密算法的基本工作原理
参考资料:
RSA 算法原理(二)
数论基础
质数(素数)
质数(Prime Number),又称素数,指在大于 1 的自然数中,除了 1 和该数自身外,无法被其他自然数整除的数(也可定义为只有 1 和该数本身两个正因数的数)。
大于 1 的自然数若不是质数,则称之为合数(也称为合成数)。
0 和 1 既不是质数,也不是合数。
参考 Wiki 质数
例如 2,3,5,7,11,13... 是质数,因为它们只有 1 和自身两个正因数。
例如 4,6,8,9,10,12,14... 是合数。4 除了 1 和 4 两个正因数外,还有 2 也是其正因数。6 除了 1 和 6 两个正因数外,还有 2 和 3 两个正因数。
算术基本定理
算术基本定理,又称正整数的唯一分解定理。即,每个大于 1 的自然数,要么本身是质数,要么可以写成 2 个或以上的质数的积,而这些质数(质因子)按大小排列以后,写法只有一种形式。
参考 Wiki 算术基本定理
例如 1200 = 2^4 * 3 * 5^2
最大公约数
最大公因数(英语:highest common factor,hcf)也称最大公约数(英语:greatest common divisor,gcd)。指能够整除多个不全为 0 的整数的最大正整数。
参考 Wiki 最大公约数
例如 8 和 12 的最大公约数是 4。
欧几里德算法
欧几里德算法,又称辗转相除法。是求最大公约数的算法。
参考 Wiki 欧几里德算法
扩展欧几里德算法
互质(互素)
互质(Coprime),如果两个或两个以上的整数的最大公约数是 1,则称它们为互质。
参考 Wiki 互质
若两个整数 a 和 b 的最大公约数是 1,则称 a 和 b 互质,记作: a \perp b。
例如 15 和 32 没有除 1 以外的公约数,所以它们为互质关系(不是质数也可以构成互质关系)。
同余
当两个正整数除以同一个正整数,若余数相同,则二整数同余。
参考 Wiki 同余
若两个正整数 a 和 b 除以正整数 m 所得的余数相同,则称 a 和 b 对于模 m 同余,记作:a \equiv b \pmod m,读作:a 同余于 b 模 m,或:a 和 b 关于模 m 同余。
例如 26 和 14 除以 12 所得的余数都是 2,所以:26 \equiv 14 \pmod {12}。
积性函数
定义域为正整数 n 的函数 f,有如下性质:
f(1) = 1,且当 a \perp b 时 f(ab) = f(a) f(b),则此函数为积性函数;
f(1) = 1,且对于任意两个正整数 a 和 b 而言 f(ab) = f(a) f(b),则此函数为完全积性函数。
欧拉函数
对于正整数 n,欧拉函数是小于等于 n 的正整数中与 n 互质的数的个数,表示为:\varphi(n)。
参考 Wiki 欧拉函数
例如 n = 8,在 1 到 8 中与 8 互质的数有 1,3,5,7,所以 \varphi(8)=4。
欧拉函数的性质:
-
若 n = 1,则 \varphi(1) = 1
因为 1 与任何数(包括自身)互质
-
若 n 是质数,则 \varphi(n) = n - 1
-
若 n = p^k(p 为质数,k 为大于等于 1 的整数),则 \varphi(n) = \varphi(p^k) = p^k - p^{k - 1} = p^k (1 - \frac{1}{p})
-
若 n = p_1 p_2 且 p_1 \perp p_2,则 \varphi(n) = \varphi(p_1 p_2) = \varphi(p_1) \varphi(p_2)(可以看出欧拉函数是积性函数)
例如 \varphi(56) = \varphi(8 * 7) = \varphi(8) \varphi(7) = 4 * 6 = 24
欧拉函数:
-
把 n 质因数分解:n = p_1^{k1} p_2^{k2} \cdots p_r^{kr}
-
根据第 4 条性质得到:\varphi(n) = \varphi(p_1^{k1}) \varphi(p_2^{k2}) \cdots \varphi(p_r^{kr})
-
根据第 3 条性质得到:\varphi(n) = p_1^{k1} p_2^{k2} \cdots p_r^{kr} (1 - \frac{1}{p_1}) (1 - \frac{1}{p_2}) \cdots (1 - \frac{1}{p_r})
-
得到欧拉函数公式:
\varphi(n) = n (1 - \frac{1}{p_1}) (1 - \frac{1}{p_2}) \cdots (1 - \frac{1}{p_r})
例如:\varphi(1323) = \varphi(3^3 * 7^2) = 1323 (1 - \frac{1}{3}) (1 - \frac{1}{7}) = 756
欧拉定理
若 a 和 n 为正整数,且 a \perp n,
则 a^{\varphi(n)} \equiv 1 \pmod n。
参考 Wiki 欧拉定理
a^{\varphi(n)} \equiv 1 \pmod n
也就是说 a^{\varphi(n)} 被 n 除的余数为 1,或者说 a^{\varphi(n)} - 1 能被 n 整除。例如:
-
3 \perp 7 (3 和 7 互质)
-
\varphi(7) = 6 (欧拉函数 \varphi(7) 等于 6)
-
3^{\varphi(7)} = 3^6 = 729 (3 的 \varphi(7) 次方等于 729)
-
3^{\varphi(7)} = 3^6 = 729 \equiv 1 \pmod{7}(729 减去 1 等于 728,728 / 7 = 104,相当于 729 模 7 等于 1)
欧拉函数的特例
若 n 为质数,则 \varphi(n) = n - 1,则
a^{n - 1} \equiv 1 \pmod n
或
a^n \equiv a \pmod n
模反元素
模反元素,也称模倒数、模逆元。
参考 Wiki 模反元素
假设 a \perp n,那么一定能找到整数 b,使得 ab-1 能被 n 整除,或者说 ab 被 n 除的余数为 1。
ab \equiv 1 \pmod n
这时 b 就叫做 a 的模反元素。
例如 3 和 11 互质,3 的模反元素就是 4,因为 3 * 4 - 1 可以被 11 整除。显然模反元素不止一个,4 加减 11 的整数倍都是 3 的模反元素({...,-18,-7,4,15,26,...}),即如果 b 是 a 的模反元素,则 b + nk 都是 a 的模反元素。
欧拉定理可以证明模反元素必然存在:
a^{\varphi(n)} = a * a^{\varphi(n) - 1} \equiv 1 \pmod n
可以看到:a^{\varphi(n) - 1} 就是 a 的模反元素。
RSA 算法
RSA 密钥生成
-
随机选择两个不相等的质数 p 和 q,例如 61 和 53
实际应用中,这两个质数越大,就越难破解。
-
计算 p 和 q 的乘积 n,n = 61 * 53 = 3233
n 的长度就是密钥长度。3233 写成二进制是 110010100001,一共有 12 位,所以这个密钥就是 12 位。实际应用中,RSA 密钥一般是 1024 位,重要场合则为 2048 位。
-
计算 n 的欧拉函数 \varphi(n),\varphi(n) = \varphi(3233) = \varphi(61) \varphi(53) = 60 * 52 = 3120
-
随机选择一个 e 满足 1 < e < \varphi(n) 且 e \perp \varphi(n),例如 e = 17
实际应用中,常常选择 65537。
-
计算 e 对于 \varphi(n) 的模反元素 d,ed \equiv 1 \pmod {\varphi(n)},这里求得 d = 2753
-
公钥:(n,e) 为 (3233,17)
-
私钥:(n,d) 为 (3233,2753)
根据已知的私钥可以生成公钥(要求已知 p 和 q):
-
私钥:(n,d) 为 (3233,2753),p 为 61,q 为 53
-
ed \equiv 1 \pmod {\varphi(n)}
-
ed - 1 = k \varphi(n) = k (p - 1) (q - 1)
-
e * 2753 - 1 = k * (61 - 1) * (53 - 1)
-
用扩展欧几里德算法求得当 k = 15 时 e = 17
-
得到公钥 (n,e) 为 (3233,17)
通过公钥推导私钥:
-
公钥:(n,e) 为 (3233,17)
-
ed \equiv 1 \pmod {\varphi(n)}
-
17 * d \equiv 1 \pmod {\varphi(n)},只有知道了 \varphi(n) 才能算出 d
-
\varphi(n) = (p - 1) (q - 1),只有知道了 p 和 q 才能算出 \varphi(n)
只有将 n 质因数分解才能得到 p 和 q
所以对极大整数做因数分解的难度决定了 RSA 算法的可靠性。
RSA 加解密
RSA 加密
-
公钥:(n,e) 为 (3233,17)
-
明文:m = 65
-
加密:m^e \equiv c \pmod n
-
密文: c = m^e \mod n = 65^{17} \mod 3233 = 2790
RSA 解密
-
私钥:(n,d) 为 (3233, 2753)
-
密文:c = 2790
-
解密:c^d \equiv m \pmod n
-
明文:m = c^d \mod n = 2790^{2753} \mod 3233 = 65
推荐阅读
-
SSH 加密原理、RSA 非对称加密算法的学习和理解
-
冯-诺依曼结构计算机的基本工作原理是什么?
-
十分钟了解人工智能 AI 的基本工作原理
-
移动互联网技术》,第 3 章:无线定位技术:掌握位置服务和室内定位的基本概念和工作原理
-
TMC5160 步进电机驱动器芯片开发和使用说明-1-1.工作原理 TMC5160 提供三种基本工作模式:模式 1 :全功能运动控制和驱动器 所有步进电机逻辑完全由 TMC5160 控制。模式 2 :脉冲和方向驱动器 外部高性能 S-ramp 运动控制器或 CPU(如 TMC 4361)生成脉冲和方向信号,这些信号与系统中的其他组件(如电机)同步。 TMC5160 控制电流和运动模式,并反馈电机状态。microPlyer 会自动平滑运动。模式 3 :简单步进和方向驱动器 TMC5160 根据步进和方向信号控制电机。无需 CPU; 配置由硬件引脚完成。固定保持电流控制由 TMC 5160 完成。可选反馈信号用作错误检测和同步标志的输出。 SPI_MODE 接地,SD_MOD 为高电平以启用该模式。 1.1 关键概念
-
ElasticSearch 学习笔记 (4)--ES 集群的基本概念和构建流程及主要工作原理
-
ElasticSearch 学习笔记 (4)--ES 集群的基本概念和构建流程及主要工作原理
-
轻松理解ARM处理器的工作原理与应用
-
flexray总线的基本工作原理
-
深入理解Spring事务的Propagation机制及其工作原理