做完实验,回来核对这五件事
- 换 e 试试同一组素数下换一个公钥指数 e,d 会跟着变——但加解密照样闭环。锁换了,钥匙必须重配。
- 密文对内容极敏感把明文改一个字母,整段密文全变。真实 RSA 配合随机填充后更是「同样的话每次密文都不同」。
- 错误钥匙解出乱码d+1 只差 1,解出来却完全对不上——私钥的正确性是「一个数都不能差」。
- Eve 只靠公开信息就破解了她用的算法和第 1 步完全一样,唯一障碍是「拆 n」。小 n 一瞬间拆开;n 越大越不可能。
- 你从未传输过任何钥匙回看全程:公网只流动过公钥和密文。这就是非对称加密的精髓——不需要事先分享秘密。
从实验室到真实世界差多远?
| 密钥规模 | n 的大小 | 拆解 n 的预期耗时 | 用途 |
|---|---|---|---|
| 本实验室(两位数素数) | ≤ 1849 | 不到 1 毫秒 | 教学演示 |
| 512 位(古典 RSA) | 约 155 位十进制 | 数小时~数天 | 已被淘汰 |
| 1024 位 | 约 309 位十进制 | 大型算力集群数月~数年 | 已不推荐 |
| 2048 位(当前主流) | 约 617 位十进制 | 已知最好算法也要数百万年 | HTTPS / 签名主流 |
| 4096 位 | 约 1234 位十进制 | 更加遥不可及(更慢,按需选用) | 高安全场景 |
注意「规模增长」的恐怖:素数从两位数涨到几百位,密钥长度只翻了约 100 倍,破解难度却从毫秒涨到宇宙年龄级别——因为拆解的难度增长远快于数字本身的增长。这正是复杂度悬崖在密码学里的样子。
实验后的常见疑问
我把明文和密文放一起看了,怎么每次都解得回来?
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(快速幂取模)、一个扩展欧几里得求逆元、编码表、两段循环。唯一提醒:真实项目请永远使用成熟密码库,不要手写生产级加密。