RSA 加密实验室 STATION 02 · 交互实验室 · 全程本地运行
STATION 02 · 四个实验台

动手实验室:
亲手做一次 RSA

下面四个实验台对应 RSA 的完整生命周期:① 生成密钥 → ② 加密 → ③ 解密 → ④ 窃听者破解。所有计算都在你的浏览器里完成,数据不会离开本机。建议先读一遍原理详解,再来亲手验证。

使用两位数素数教学版 · 数学流程与真实 RSA 完全一致

STEP 1 生成密钥对

挑两个不同的素数(这是你的最高机密),再选一个公钥指数 e,然后点击生成。

为什么 d 可以算出来、外人却算不出?——因为 d 依赖 φ(n)=(p−1)(q−1),而 φ(n) 需要把 n 拆回 p×q。你手里有 p、q,所以一步到位;窃听者只有 n,得先「拆大数」。

STEP 2 用公钥加密

把想发送的内容交给Alice,她用你公布的公钥 (e, n) 加密。每个字母会被换成数字 m,再做 me mod n

STEP 3 用私钥解密

你收到密文,用只有你有的私钥 d 做 cd mod n。也可以故意用错钥匙,看会发生什么。

STEP 4 窃听者 Eve 的视角

Eve 在网络上只看得到:公钥 (e, n) 和密文 c——仅此而已。她能破解吗?试试暴力拆解 n。

公开发送的
(先完成上面三步)
Eve 截获的密文
(—)
先猜一下:你的两位数 n 会被瞬间拆开——这正是教学版用小素数的原因。真实 RSA 的 n 有 617 位十进制(2048 比特),同样的算法要运行数百万年。实验结束后记得回到这个对比。
观察清单

做完实验,回来核对这五件事

  1. 换 e 试试同一组素数下换一个公钥指数 e,d 会跟着变——但加解密照样闭环。锁换了,钥匙必须重配。
  2. 密文对内容极敏感把明文改一个字母,整段密文全变。真实 RSA 配合随机填充后更是「同样的话每次密文都不同」。
  3. 错误钥匙解出乱码d+1 只差 1,解出来却完全对不上——私钥的正确性是「一个数都不能差」。
  4. Eve 只靠公开信息就破解了她用的算法和第 1 步完全一样,唯一障碍是「拆 n」。小 n 一瞬间拆开;n 越大越不可能。
  5. 你从未传输过任何钥匙回看全程:公网只流动过公钥和密文。这就是非对称加密的精髓——不需要事先分享秘密。
SCALE

从实验室到真实世界差多远?

密钥规模n 的大小拆解 n 的预期耗时用途
本实验室(两位数素数)≤ 1849不到 1 毫秒教学演示
512 位(古典 RSA)约 155 位十进制数小时~数天已被淘汰
1024 位约 309 位十进制大型算力集群数月~数年已不推荐
2048 位(当前主流)约 617 位十进制已知最好算法也要数百万年HTTPS / 签名主流
4096 位约 1234 位十进制更加遥不可及(更慢,按需选用)高安全场景

注意「规模增长」的恐怖:素数从两位数涨到几百位,密钥长度只翻了约 100 倍,破解难度却从毫秒涨到宇宙年龄级别——因为拆解的难度增长远快于数字本身的增长。这正是复杂度悬崖在密码学里的样子。

FAQ

实验后的常见疑问

我把明文和密文放一起看了,怎么每次都解得回来?

d 不是随便挑的数:生成时就按 (e×d) mod φ(n) = 1 配套。数学(欧拉定理)保证 m 的 e·d 次方 mod n 必然回到 m。你换 e、换 p、q 再玩,闭环依然成立。

为什么明文只能用字母、数字和空格?

教学版的字母表只有 37 个刻度(0–36),保证每个 m 都小于 n。真实 RSA 的 n 有 2048 比特,一次能装下 256 字节的任意数据块,配合填充方案处理一切内容。

Eve 的破解算法也太笨了吧?

对,她用的是「从 2 开始挨个试除」的笨办法。数学家有更聪明的算法(数域筛等),但再聪明也只把「不可能」变成「天文数字的不可能」——2048 位下依然要数百万年。聪明算法 + 巨大密钥 = 现实安全。

我想自己写一遍这个实验,用什么语言都行吗?

完全可以,60 行代码以内:一个 modpow(快速幂取模)、一个扩展欧几里得求逆元、编码表、两段循环。唯一提醒:真实项目请永远使用成熟密码库,不要手写生产级加密。