为什么公钥可以公开?RSA 原理一次讲透
为什么公钥可以公开?RSA 原理一次讲透
你网购时浏览器地址栏的小锁,HTTPS 加密的底层是 RSA——一个"加密钥匙随便公开、解密钥匙自己藏好"的系统。公钥公开了为什么还安全?今天用小素数把 RSA 完整跑一遍,你就懂了。
一、核心思想:单向陷门函数
RSA 的数学核心是一句话:模幂运算 f(x) = x^e mod n 是单向陷门函数。
- 给定 x,算 f(x) 很容易(几毫秒)
- 给定 f(x),反推 x 计算上不可行——除非你知道陷门(私钥 d)
就像保险柜:谁都能把东西放进去(公钥加密),但只有持钥匙的人能打开(私钥解密)。公钥是"锁",私钥是"钥匙"——锁可以随便发,钥匙自己留好。
二、密钥怎么生成?
- 选两个大素数 p、q(真实 RSA 是 2048 位,约 600 位十进制数)
- n = p×q(公开),φ(n) = (p-1)(q-1)(保密)
- 选公钥 e(如 65537),求私钥 d = e⁻¹ mod φ(n)
安全性根基:n 公开,但分解 n 得到 p、q 计算上不可行(2048 位分解需要天文数字的算力)。知道 p、q 才能算 φ(n),才能求 d——这就是"陷门"。
三、加密解密:一个公式搞定
加密:c = m^e mod n
解密:m = c^d mod n
为什么能还原?靠欧拉定理:因为 e×d ≡ 1 mod φ(n),所以 m^(e×d) ≡ m mod n——先加密再解密,绕一圈回到原点。
四、代码演示:小素数完整跑一遍
p, q = 61, 53 # 两个素数(真实场景是 2048 位大数)
n = p * q # 3233,公开
phi = (p-1) * (q-1) # 3120,保密(由 p,q 算出)
e = 17 # 公钥(公开)
d = pow(e, -1, phi) # 私钥 = 2753(保密)
msg = 42
cipher = pow(msg, e, n) # 加密:任何人可用公钥做
dec = pow(cipher, d, n) # 解密:只有持私钥者能做
print(f"p={p}, q={q}, n={n}, φ(n)={phi}")
print(f"公钥 e={e}(公开), 私钥 d={d}(保密)")
print(f"明文 {msg} -> 加密 {cipher} -> 解密 {dec} {'✓' if dec == msg else '✗'}")
print(f"安全性: 公开 n={n} 和 e={e}, 但分解 n 得 p,q 才能算私钥")
print(f"真实 RSA: n 是 2048 位, 分解不可行 -> 公钥随便公开")
运行输出:
p=61, q=53, n=3233, φ(n)=3120
公钥 e=17(公开), 私钥 d=2753(保密)
明文 42 -> 加密 2557 -> 解密 42 ✓
安全性: 公开 n=3233 和 e=17, 但分解 n 得 p,q 才能算私钥
真实 RSA: n 是 2048 位, 分解不可行 -> 公钥随便公开
公钥 (n, e) = (3233, 17) 完全公开,别人也只能加密;只有知道 d=2753 的人能解密。 小素数你能心算分解,换成 2048 位(约 600 位十进制数)就没人能分解了——这就是"锁可以公开"的安全根基。
五、避坑清单
- RSA 不能加密大数据:模数多大就只能加密多大数据(2048 位 ≈ 256 字节),实际用 RSA 加密"会话密钥"、用 AES 加密正文(混合加密)
- 公钥加密 ≠ 数字签名:签名是"私钥加密、公钥验证"(反过来用)——用于证明"是我发的"
- 别用教科书 RSA 直接加密:需要 OAEP 填充防选择明文攻击(同样的明文会得到同样的密文,泄露信息)
- 量子计算威胁真实存在:Shor 算法能分解大数——后量子时代要换 Kyber/Dilithium(PQC)
- p、q 不能太接近:太接近可以用费马分解攻破;随机数生成器弱会导致共模攻击(ROCA 漏洞的教训)
六、想系统学密码学?
本文精选自 ima 知识号【Kruptos】《密码学与零知识证明》订阅库(第 024 期 RSA 数学基础、第 025 期 RSA-OAEP 加密与 RSA-PSS 签名等 100 期系统教程,从古典密码、RSA、椭圆曲线到零知识证明、后量子密码,每期配可运行 Python 代码)。
📚 完整系列 100 期 + 配套代码,已在 ima 知识号发布
本文只是系列的一个切片。完整系列(100 期系统教程 + 每期可运行代码)在 ima 知识号【Kruptos】持续更新中:
- 🗂 67+ 技术知识库:信号与系统、SDR 软件无线电、数字信号处理、操作系统、AI Agent、大模型微调……几乎覆盖全部软硬件技术栈
- 🧠 8 款 AI 技能:系列生产、知识库管理、CMMI 受管开发、自进化 Agent 等,已在 ima 技能广场上架,即装即用
- ✅ 全部免费订阅,后续更新自动推送
🔍 订阅方式:打开 ima(腾讯智能工作台)→ 搜索「Kruptos」→ 一键订阅。或在 ima 内直接搜索《密码学与零知识证明》等知识库名称。
💬 你还困惑过公钥密码学的哪个问题?评论区聊聊——想看数字签名还是后量子密码,点赞高的安排。
作者:Kruptos(西电毕业,13 年无线通信/DSP/嵌入式科研)|原创内容,转载注明出处
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)