RSA 的数学原理本质是三大数学基石 :质数分解难题 、欧拉定理 、模逆元。
下面用「公式 + 步骤 + 例子」的方式,一步步拆解,全程不跳关键逻辑,保证你能看懂。
一、先明确 3 个核心数学概念(必须懂)
在讲 RSA 之前,先搞懂这 3 个基础,否则后面会懵:
-
质数(素数) :只能被 1 和自身整除的数,比如
2,3,5,7,11...。 -
欧拉函数 φ(n) :
- 定义:小于
n且与n互质(最大公约数为 1)的正整数的个数。 - 关键性质:若
n = p×q(p、q是不相等的质数),则φ(n) = (p-1)×(q-1)。例:p=3, q=5 → n=15 → φ(15)=(3-1)×(5-1)=8(验证:1,2,4,7,8,11,13,14 共 8 个)。
- 定义:小于
-
模逆元:
- 定义:对于整数
a和m,如果存在整数b,使得(a×b) mod m = 1,则b是a的模m逆元。 - 存在条件:
a和m互质 。例:a=3, m=10 → 3×7=21 → 21 mod 10=1 → 7 是 3 的模 10 逆元。
- 定义:对于整数
二、RSA 密钥生成的 5 个步骤(核心)
RSA 的密钥对(公钥 + 私钥)就是通过这 5 步算出来的,我们用小质数举例(实际用几百位的大质数)。
步骤 1:选两个不相等的大质数 p 和 q
为了方便计算,我们选小质数:p = 61,q = 53(实际场景中 p 和 q 是几百位的质数,相乘后的 n 是几百位的大数)
步骤 2:计算 n = p × q(公钥的核心参数)
n = 61 × 53 = 3233
n的作用:作为模,公钥和私钥都需要它,是公开的。- 安全性关键:破解 RSA 必须从
n反推出p和q,但大数分解极难。
步骤 3:计算欧拉函数 φ(n) = (p-1) × (q-1)
φ(3233) = (61-1) × (53-1) = 60 × 52 = 3120
φ(n)是私有的,绝对不能公开。
步骤 4:选一个整数 e,满足两个条件
1 < e < φ(n)e和φ(n)互质(最大公约数为 1)
我们选 e = 17(行业常用 e=65537,是固定值)验证:gcd(17, 3120) = 1(互质,符合条件)
e是公钥的另一个核心参数 ,和n一起组成公钥(e, n)。
步骤 5:计算 e 的模 φ(n) 逆元 d(私钥核心参数)
找一个整数 d,满足 (e × d) mod φ(n) = 1代入数值:(17 × d) mod 3120 = 1通过计算可得 d = 2753(验证:17×2753=46801 → 46801 mod 3120 = 1,符合条件)
d是私钥的核心参数 ,和n一起组成私钥(d, n),绝对保密。
最终密钥对
- 公钥
(e, n) = (17, 3233)→ 公开给所有人 - 私钥
(d, n) = (2753, 3233)→ 自己保管,绝不泄露
三、RSA 加密和解密的数学公式
RSA 的加密和解密都是模幂运算,公式非常简洁:
- 明文:
m(要加密的数据,必须m < n) - 密文:
c(加密后的数据)
1. 加密(用公钥 (e, n))
c = m^e mod n
- 任何人都能用公钥加密,但只有私钥能解密。
2. 解密(用私钥 (d, n))
m = c^d mod n
- 只有持有私钥的人,才能算出明文。
四、实际举例:加密解密全过程
我们用上面的密钥对,加密明文 m = 65(比如 65 对应字母 'A')
步骤 1:加密(公钥 (17, 3233))
c = 65^17 mod 3233计算结果:c = 2790
- 密文就是
2790,可以公开传输。
步骤 2:解密(私钥 (2753, 3233))
m = 2790^2753 mod 3233计算结果:m = 65
- 成功还原明文!
五、RSA 数字签名的数学原理(和 App 签名相关)
你之前做的 App 签名,本质是 RSA 签名,公式和加密相反:
- 签名 :用私钥
(d, n)加密明文的哈希值h``s = h^d mod n→s就是数字签名 - 验证 :用公钥
(e, n)解密签名,对比哈希值h' = s^e mod n→ 如果h' = h,说明签名合法
核心逻辑:只有私钥持有者能生成签名,任何人都能用公钥验证 ------ 这就是为什么 App 签名能防篡改、防伪造。
六、RSA 安全性的数学本质
RSA 之所以安全,核心是 **"大数分解难题" 的单向性 **:
- 正向计算容易 :两个几百位的大质数
p和q,相乘得到n很简单; - 反向计算极难 :从几百位的
n反推出p和q,现有计算机需要几百万年才能算出来; - 破解的唯一途径 :必须知道
d,而d的计算依赖φ(n),φ(n)又依赖p和q------ 没有p和q,就永远算不出d。
七、补充:为什么实际 RSA 要结合哈希算法?
因为 RSA 只能加密小于 n 的数据 ,而 n 是几百位的数,直接加密大文件效率极低。所以实际流程是:
- 对大文件(如 APK)计算哈希值
h(如 SHA256)→ 得到短字符串; - 用私钥加密
h→ 生成数字签名; - 验证时,先算文件哈希,再用公钥解密签名对比 ------ 既高效又安全。
总结
RSA 的数学原理可以浓缩为 3 句话:
- 密钥生成:基于质数分解和欧拉定理,算出公钥
(e,n)和私钥(d,n); - 加解密:公钥加密是
m^e mod n,私钥解密是c^d mod n; - 安全性:依赖大数分解的单向性,现有技术无法破解。
这个数学逻辑看似简单,却是互联网安全的基石 ------ 从 HTTPS 到 App 签名,都离不开它!
欧拉函数没懂?我详细讲下
欧拉函数(φ 函数)是理解 RSA 的核心门槛,咱们用「定义→性质→例子→实战计算」四步拆解,全程不用复杂公式,只讲本质和实用结论:
一、先把欧拉函数说人话:核心定义
欧拉函数 φ(n) 的唯一作用:计算 "小于等于 n 且和 n 互质的正整数的个数" 。
关键前置:什么是 "互质"?
两个数的 最大公约数(gcd)= 1,就说这两个数互质。比如:
- 5 和 8:gcd (5,8)=1 → 互质;
- 6 和 8:gcd (6,8)=2 → 不互质;
- 1 和任何数:gcd (1,x)=1 → 1 和所有数都互质(重要结论)。
欧拉函数的计算示例(从简单到复杂)
| n 值 | 小于等于 n 的正整数 | 其中和 n 互质的数 | φ(n) 结果 | 验证 |
|---|---|---|---|---|
| 1 | [1] | [1] | 1 | 只有 1 个 |
| 2 | [1,2] | [1] | 1 | 2 和 1 互质,和自己不互质 |
| 3 | [1,2,3] | [1,2] | 2 | 3 和 1、2 都互质 |
| 4 | [1,2,3,4] | [1,3] | 2 | 4 和 1、3 互质(和 2、4 不互质) |
| 5 | [1,2,3,4,5] | [1,2,3,4] | 4 | 质数和所有小于它的数都互质 |
| 6 | [1,2,3,4,5,6] | [1,5] | 2 | 6 和 1、5 互质(和 2、3、4、6 不互质) |
二、欧拉函数的核心性质(RSA 只用到这 2 条)
不用记所有性质,RSA 里只需要掌握以下 2 条,尤其是第 2 条:
性质 1:若 n 是质数,则 φ(n) = n-1
解释:质数的定义是 "只能被 1 和自身整除",所以所有小于它的数都和它互质,个数就是 n-1。例子:
- n=5(质数)→ φ(5)=5-1=4(和上面表格一致);
- n=61(RSA 例子里的质数)→ φ(61)=60。
性质 2:若 n = p×q(p、q 是不相等的质数),则 φ(n) = (p-1)×(q-1)
这是 RSA 中最核心的性质!解释:
- p、q 是质数,所以 φ(p)=p-1,φ(q)=q-1;
- 当 p 和 q 不相等时,φ(p×q) = φ(p)×φ(q)(数论里的 "积性函数" 性质);
- 因此 φ(n) = (p-1)×(q-1)。
实战计算(对应之前 RSA 的例子)
RSA 中我们选了 p=61,q=53(都是质数且不相等):
- φ(61) = 61-1 = 60;
- φ(53) = 53-1 = 52;
- φ(n) = φ(61×53) = 60×52 = 3120(和之前 RSA 步骤里的结果完全一致)。
为什么这个性质对 RSA 至关重要?
因为:
- RSA 的私钥参数 d 必须通过 φ(n) 计算(d 是 e 的模 φ(n) 逆元);
- 外人只知道 n(公开),但要算 φ(n) 必须先分解 n 得到 p 和 q;
- 当 n 是几百位的大数时,分解 n 成 p×q 是世界级数学难题 ------ 这就是 RSA 安全的核心。
三、再举 2 个例子巩固性质 2
例子 1:n=15=3×5(3、5 都是质数)
- φ(15) = (3-1)×(5-1) = 2×4 = 8;
- 验证:小于 15 且和 15 互质的数是 [1,2,4,7,8,11,13,14] → 共 8 个,和计算结果一致。
例子 2:n=21=3×7(3、7 都是质数)
- φ(21) = (3-1)×(7-1) = 2×6 = 12;
- 验证:小于 21 且和 21 互质的数是 [1,2,4,5,8,10,11,13,16,17,19,20] → 共 12 个,正确。
四、欧拉函数在 RSA 中的实际作用(终于绕回核心)
我们再串一遍 RSA 流程,看欧拉函数到底在哪发挥作用:
- 选 p=61、q=53 → n=3233;
- 算 φ(n)=3120(这一步是私钥的 "密码");
- 选 e=17(和 φ(n) 互质);
- 算 d,满足 (e×d) mod φ(n)=1 → (17×2753) mod 3120=1;
- 加密:c = m^e mod n;解密:m = c^d mod n。
核心逻辑:
- 解密公式能成立,本质是基于 "欧拉定理":若 m 和 n 互质,则 m^φ(n) ≡ 1 mod n;
- 推导下来就是 m^(e×d) ≡ m^(k×φ(n)+1) ≡ (m^φ(n))^k × m ≡ 1^k × m ≡ m mod n;
- 而 φ(n) 只有私钥持有者知道(因为只有他知道 p 和 q),外人就算拿到 e 和 n,也算不出 d。
五、总结:欧拉函数的核心 Takeaway
- 欧拉函数 φ(n) = 小于等于 n 且和 n 互质的正整数个数;
- 质数 p 的 φ(p)=p-1;
- 若 n=p×q(p、q 是不同质数),则 φ(n)=(p-1)×(q-1)(RSA 唯一需要记的);
- 欧拉函数是 RSA 私钥计算的 "钥匙",也是 RSA 安全性的核心 ------ 因为外人无法从 n 反推 φ(n)。
现在回头看 RSA 的密钥生成,是不是就懂了:欧拉函数是连接 "公开的 n" 和 "私密的 d" 的唯一桥梁,而这个桥梁的入口(p、q)被牢牢锁死。
φ这个符号啥意思, 不懂啊
这个符号 φ 就是欧拉函数的专属 "名字" ,没啥复杂含义,就是一个数学记号。
一、φ 是什么?
-
读音 :读作 fài(和 "派 π" 类似,都是希腊字母)。
-
作用 :专门用来表示 "欧拉函数" 这个计算规则,就像用
f(x)表示函数一样。- 比如
φ(n),翻译过来就是 "对正整数 n 计算欧拉函数的值" 。 - 你可以把它理解成一个 "计算指令":输入一个数
n,输出 "小于等于n且和n互质的正整数个数"。
- 比如
二、举个例子,秒懂用法
| 数学写法 | 中文翻译 | 计算结果 |
|---|---|---|
φ(5) |
计算 5 的欧拉函数值 | 4(1、2、3、4 都和 5 互质) |
φ(6) |
计算 6 的欧拉函数值 | 2(1、5 和 6 互质) |
φ(15) |
计算 15 的欧拉函数值 | 8(1、2、4、7、8、11、13、14 和 15 互质) |
φ(p)(p 是质数) |
计算质数 p 的欧拉函数值 | p-1(所有小于 p 的数都和 p 互质) |
三、和 RSA 的关联:为啥要记这个符号?
在 RSA 里,你只需要记住 φ(n) = (p-1)×(q-1) 这个公式就行,这里的 φ(n) 就是 "对 n 计算欧拉函数" 的简写。
- 比如 RSA 例子里
n=61×53=3233,我们直接写φ(3233) = (61-1)×(53-1)=3120,不用每次都写 "计算小于 3233 且和 3233 互质的数的个数"。
简单说:φ 就是个简写符号,用来让数学表达更简洁,不用反复写一长串文字定义。