大家都能加密,谁能打开?
怎样让大家都能寄来保密消息,却只有收件人能打开?公钥密码把“公开的加密信息”和“保管好的解密秘密”分开。
跟住一个数字:它先用公开信息变成另一个数,再用私人信息恢复。画面的信封只是帮助跟踪,不是真正装消息的盒子。
算得回来,不等于守得住秘密。 这里故意用很小的教学数字,旁观者也能猜中。真实保密还需要合适的完整方法,并确认公钥确实属于收件人。
换一个整数,逐项观察
- 跟住默认消息,先看加密,再看它怎样恢复。
- 换一个界面允许的小整数,再核对是否返回原数。
- 回看猜测一章:旁观者为什么也能在这组小数字里找到消息?不要用这个教具保存秘密。
为什么两次幂运算能回到原点?
进一步操作与数值核对
- 从三组固定教学钥匙中选择一组,输入
0到n−1的十进制整数。超出范围会拒绝,不会悄悄取模。这里不是文字加密表单。 - 试试
0、p、q和n−1。中间两个数与n不互素,仍应完整恢复。 - 切换公钥加密或私钥解密。滑条表示已经处理几项二进制幂,起始累积值是一;也能用方向键、上一步和下一步操作。
- 默认解密中,
23 = 1 + 2 + 4 + 16,因此八次幂虽然已经算出,却不乘入。那一步的累积值保持为 93,不是丢失了运算结果。 - 全部重置恢复第一组钥匙、消息 42、公钥加密方向、零项已处理,并关闭详情。
数值来自精确整数运算。影片速度不代表计算性能或破解耗时。本页没有密钥文件、密文下载、随机源、安全填充或签名功能。
想核对技术细节?
怎样让大家都能寄来保密消息,却只有收件人能打开?公钥密码把“用来加密的公开信息”和“用来解密的秘密”分开。这里用很小的数演示这种分工,也会亲眼看到:这些教学用的小数守不住真正的秘密。
这里演示的是刻意使用不安全小参数的教科书 RSA,目的在于看清整数运算,不是提供可用的加密工具。收件人公开 (n, e),任何人都能据此算出密文;对应的私人指数 d 通常由收件人保护。为了把关系讲透,本教具把素因子和私钥也全部展示出来。
取素数 p = 11、q = 17,得到 n = 187。公开指数为 e = 7,私人指数为 d = 23。跟住整数消息 42:它变成密文 15,再用私人指数恢复成 42。
信封代表一个整数消息,不是文件格式、文字编码或保密承诺。对于这组小参数,旁观者真的可以猜回消息,第七章会把猜测过程算给你看。公私钥分工参见 RSA 原始论文,整数运算及其定义域依据 RFC 8017。
私人指数是模逆元
两个素数必须是不同的奇素数。先求 λ = lcm(p−1, q−1),选择满足 3 ≤ e < n 且 gcd(e, λ) = 1 的公开指数。私人指数满足 e × d ≡ 1 (mod λ),并且 0 < d < n。本例 λ = lcm(10,16) = 80。
80 = 11 × 7 + 3
7 = 2 × 3 + 1
1 = 23 × 7 − 2 × 80
于是 d = 23。它不是普通分数 1/7,而是让乘积 7 × 23 = 161 除以 80 后余一的整数。这里采用 RFC 8017 的最小公倍数关系;欧拉函数 (p−1)(q−1) = 160 与 λ 不同,不能混用,尽管本例这一对指数也恰好满足模 160 的逆元条件。
不用先展开一个巨大的幂
每次相乘后立即取余数,不改变最后的模运算结果。42 平方得到 1764,也就是 9 × 187 + 81。再把余数平方,得到 81² mod 187 = 16。
| 选中的幂 | 余数 | 乘入并取模后的累积值 |
|---|---|---|
| 1 | 42 | 42 |
| 2 | 81 | 36 |
| 4 | 16 | 15 |
这些幂相加为七。解密从 15 出发,幂 1、2、4、8、16 对应余数 15、38、135、86、103;第四项不乘入。累积值依次为 15、9、93、93、42。画面逐项显示真实过程,没有在起点和结果之间插入虚构数字。
零与不互素的消息,也必须成立
两次运算后,结果模 n 等价于 m^(ed)。本例 ed = 161,比 10 的一个整数倍多一,也比 16 的一个整数倍多一。
分别看模 11 与模 17 的余数。模 11 的非零余数满足指数为 10 的费马关系;零余数在正整数次幂之后仍是零。模 17 的非零余数对应指数 16,零余数也单独成立。因此原消息与恢复结果在两个素数下的余数都一致,包含被某个素数整除的消息。中国剩余定理保证 0…186 中只有一个对应的整数。
于是 0 → 0 → 0、11 → 88 → 11、17 → 85 → 17、186 → 186 → 186 都能恢复。穷举 187 个输入只核对了这一组钥匙;上面的论证解释了满足条件的不同素数钥匙为何普遍成立。两者都不是安全证明。
真实加密还缺什么?
这里没有随机填充,同一个 42 每次都得到 15。旁观者用公钥就能计算猜测值,从零开始枚举,第 43 次便猜中了 42;分解 187 也很容易。信封图案与正确往返都不能保证保密。
现代 RSA 加密需要 RSA-OAEP 这类带随机填充的完整规范方案、合适的钥匙和经过检验的实现。混合加密中,公钥机制保护随机对称密钥,再用带认证的对称加密保护内容。NIST SP 800-56B 给出了基于 RSA 的密钥建立方案。最后一章明确标为架构示意,没有模拟 OAEP 或对称加密,也没有生成随机密钥。
还要确认公钥确实属于目标收件人。若拿到的是被替换的公钥,消息会被保护给错误的人。能够使用收件人的公钥,不意味着发件人身份已经得到证明。签名处理的是另一类目标,有独立规范;本篇不演示签名,也不把它称作“用私钥加密”。