RSA 的核心原理

RSA 的数学原理本质是三大数学基石质数分解难题欧拉定理模逆元

下面用「公式 + 步骤 + 例子」的方式,一步步拆解,全程不跳关键逻辑,保证你能看懂。

一、先明确 3 个核心数学概念(必须懂)

在讲 RSA 之前,先搞懂这 3 个基础,否则后面会懵:

  1. 质数(素数) :只能被 1 和自身整除的数,比如 2,3,5,7,11...

  2. 欧拉函数 φ(n)

    • 定义:小于 n 且与 n 互质(最大公约数为 1)的正整数的个数。
    • 关键性质:若 n = p×qpq 是不相等的质数),则 φ(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 个)。
  3. 模逆元

    • 定义:对于整数 am,如果存在整数 b,使得 (a×b) mod m = 1,则 ba 的模 m 逆元。
    • 存在条件:am 互质 。例:a=3, m=10 → 3×7=21 → 21 mod 10=1 → 7 是 3 的模 10 逆元

二、RSA 密钥生成的 5 个步骤(核心)

RSA 的密钥对(公钥 + 私钥)就是通过这 5 步算出来的,我们用小质数举例(实际用几百位的大质数)。

步骤 1:选两个不相等的大质数 pq

为了方便计算,我们选小质数:p = 61q = 53(实际场景中 pq 是几百位的质数,相乘后的 n 是几百位的大数)

步骤 2:计算 n = p × q(公钥的核心参数)

n = 61 × 53 = 3233

  • n 的作用:作为,公钥和私钥都需要它,是公开的。
  • 安全性关键:破解 RSA 必须从 n 反推出 pq,但大数分解极难。

步骤 3:计算欧拉函数 φ(n) = (p-1) × (q-1)

φ(3233) = (61-1) × (53-1) = 60 × 52 = 3120

  • φ(n)私有的,绝对不能公开。

步骤 4:选一个整数 e,满足两个条件

  1. 1 < e < φ(n)
  2. 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 签名,公式和加密相反:

  1. 签名 :用私钥 (d, n) 加密明文的哈希值 h``s = h^d mod ns 就是数字签名
  2. 验证 :用公钥 (e, n) 解密签名,对比哈希值h' = s^e mod n → 如果 h' = h,说明签名合法

核心逻辑:只有私钥持有者能生成签名,任何人都能用公钥验证 ------ 这就是为什么 App 签名能防篡改、防伪造。

六、RSA 安全性的数学本质

RSA 之所以安全,核心是 **"大数分解难题" 的单向性 **:

  1. 正向计算容易 :两个几百位的大质数 pq,相乘得到 n 很简单;
  2. 反向计算极难 :从几百位的 n 反推出 pq,现有计算机需要几百万年才能算出来;
  3. 破解的唯一途径 :必须知道 d,而 d 的计算依赖 φ(n)φ(n) 又依赖 pq------ 没有 pq,就永远算不出 d

七、补充:为什么实际 RSA 要结合哈希算法?

因为 RSA 只能加密小于 n 的数据 ,而 n 是几百位的数,直接加密大文件效率极低。所以实际流程是:

  1. 对大文件(如 APK)计算哈希值 h(如 SHA256)→ 得到短字符串;
  2. 用私钥加密 h → 生成数字签名;
  3. 验证时,先算文件哈希,再用公钥解密签名对比 ------ 既高效又安全。

总结

RSA 的数学原理可以浓缩为 3 句话:

  1. 密钥生成:基于质数分解和欧拉定理,算出公钥 (e,n) 和私钥 (d,n)
  2. 加解密:公钥加密是 m^e mod n,私钥解密是 c^d mod n
  3. 安全性:依赖大数分解的单向性,现有技术无法破解。

这个数学逻辑看似简单,却是互联网安全的基石 ------ 从 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 中最核心的性质!解释:

  1. p、q 是质数,所以 φ(p)=p-1,φ(q)=q-1;
  2. 当 p 和 q 不相等时,φ(p×q) = φ(p)×φ(q)(数论里的 "积性函数" 性质);
  3. 因此 φ(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 至关重要?

因为:

  1. RSA 的私钥参数 d 必须通过 φ(n) 计算(d 是 e 的模 φ(n) 逆元);
  2. 外人只知道 n(公开),但要算 φ(n) 必须先分解 n 得到 p 和 q;
  3. 当 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 流程,看欧拉函数到底在哪发挥作用:

  1. 选 p=61、q=53 → n=3233;
  2. 算 φ(n)=3120(这一步是私钥的 "密码");
  3. 选 e=17(和 φ(n) 互质);
  4. 算 d,满足 (e×d) mod φ(n)=1 → (17×2753) mod 3120=1;
  5. 加密: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

  1. 欧拉函数 φ(n) = 小于等于 n 且和 n 互质的正整数个数;
  2. 质数 p 的 φ(p)=p-1;
  3. 若 n=p×q(p、q 是不同质数),则 φ(n)=(p-1)×(q-1)(RSA 唯一需要记的);
  4. 欧拉函数是 RSA 私钥计算的 "钥匙",也是 RSA 安全性的核心 ------ 因为外人无法从 n 反推 φ(n)。

现在回头看 RSA 的密钥生成,是不是就懂了:欧拉函数是连接 "公开的 n" 和 "私密的 d" 的唯一桥梁,而这个桥梁的入口(p、q)被牢牢锁死

φ这个符号啥意思, 不懂啊

这个符号 φ 就是欧拉函数的专属 "名字" ,没啥复杂含义,就是一个数学记号。

一、φ 是什么?

  1. 读音 :读作 fài(和 "派 π" 类似,都是希腊字母)。

  2. 作用 :专门用来表示 "欧拉函数" 这个计算规则,就像用 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 互质的数的个数"。

简单说:φ 就是个简写符号,用来让数学表达更简洁,不用反复写一长串文字定义。

相关推荐
重生之后端学习6 小时前
56. 合并区间
java·数据结构·后端·算法·leetcode·职场和发展
历程里程碑7 小时前
C++ 5:模板初阶
c语言·开发语言·数据结构·c++·算法
leoufung7 小时前
LeetCode 74. Search a 2D Matrix
数据结构·算法·leetcode
Kiri霧7 小时前
Go数据类型介绍
java·算法·golang
Mxsoft6198 小时前
AR远程定位偏差救场!某次现场故障,SLAM算法精准对齐设备模型!
算法·ar
Hello娃的8 小时前
【量子力学】Hohenberg-Kohn 定理
人工智能·算法
老马啸西风8 小时前
成熟企业级技术平台 MVE-010-IGA(Identity Governance & Administration,身份治理与管理)平台
人工智能·深度学习·算法·职场和发展
老马啸西风8 小时前
成熟企业级技术平台 MVE-010-app 管理平台
人工智能·深度学习·算法·职场和发展