4、非对称加密基础:公钥与私钥、RSA算法原理简介、ECC算法原理简介、密钥长度与安全强度
聊到 PKI,绕不开的一个核心就是非对称加密。说实话,我刚入行那会儿,总觉得对称加密又快又简单,干嘛非要搞这么一套复杂的玩意儿?直到我第一次在项目中需要在不安全的信道上分发密钥,才真正体会到非对称加密的价值。
它解决了一个根本问题:如何让两个从未见过面的人,安全地交换秘密。
4.1 公钥与私钥:一把锁,两把钥匙
非对称加密的核心思想,就是「一对密钥,各司其职」。这一对密钥,一个叫公钥,一个叫私钥。
- 公钥:公开的,谁都可以知道。就像你家的门牌号,全世界都能查到。
- 私钥:私密的,只有你自己知道。就像你家的钥匙,绝对不能给别人。
它们之间有一个神奇的数学关系:用公钥加密的数据,只能用对应的私钥解密;反之,用私钥加密的数据,只能用对应的公钥解密。
核心原则:
- 加密:用接收方的公钥加密数据。
- 解密:接收方用自己的私钥解密数据。
- 签名:用发送方自己的私钥签名数据。
- 验签:任何人用发送方的公钥验证签名。
你想想看,这个机制有多巧妙。我不用事先跟你约定一个共同的密码,我只需要知道你的公钥,就能给你发只有你能看懂的密文。这就是非对称加密最迷人的地方。
4.2 RSA算法原理简介
RSA 是最经典的非对称加密算法,由 Rivest、Shamir 和 Adleman 三位大佬在 1977 年提出。它的安全性建立在大整数分解这个数学难题上。
说白了,就是:两个大质数相乘很容易,但把乘积分解回两个大质数,极其困难。
RSA 的密钥生成过程,我简单梳理一下:
- 选两个大质数:p 和 q。比如 p=61, q=53(实际项目中会用几百位的大数)。
- 计算 n:n = p × q = 61 × 53 = 3233。n 就是密钥长度,比如 2048 位的 RSA,n 就是 2048 位。
- 计算欧拉函数 φ(n):φ(n) = (p-1) × (q-1) = 60 × 52 = 3120。
- 选公钥指数 e:e 需要满足 1 < e < φ(n),且 e 与 φ(n) 互质。常用 e = 65537。
- 计算私钥指数 d:d 是 e 关于 φ(n) 的模逆元,即 e × d ≡ 1 (mod φ(n))。算出来 d = 2753。
最终:
- 公钥:(n=3233, e=65537)
- 私钥:(n=3233, d=2753)
加密时,把明文 m 变成密文 c:c = m^e mod n。解密时:m = c^d mod n。
我的经验:RSA 的密钥生成其实挺慢的,尤其是生成大质数那一步。我在项目中遇到过,服务器启动时批量生成 RSA 密钥对,结果卡了好几秒。后来我们改用预生成或者异步生成,才解决了这个问题。
4.3 ECC算法原理简介
ECC(椭圆曲线密码学)是后起之秀。它的安全性建立在椭圆曲线离散对数问题上。简单说,就是在椭圆曲线上,已知一个点 G 和它的倍数 kG,求 k 非常困难。
ECC 最大的优势是:密钥短,安全性高。
举个例子,256 位的 ECC 密钥,安全强度相当于 3072 位的 RSA 密钥。这意味着什么?意味着更小的存储空间、更快的计算速度、更低的带宽消耗。
ECC 的核心参数包括:
- 椭圆曲线方程:y² = x³ + ax + b
- 基点 G:曲线上一个公开的点
- 阶 n:基点 G 的阶,是一个大质数
- 私钥 d:一个随机大整数
- 公钥 Q:Q = d × G(点的倍乘运算)
避坑指南:我曾经在项目中踩过一个坑——用了不标准的椭圆曲线参数。有些厂商为了「优化性能」,自己魔改了曲线参数,结果导致安全性大打折扣。记住,永远使用标准曲线,比如 NIST P-256、secp256k1 等。自己造轮子,在密码学里是大忌。
4.4 密钥长度与安全强度
密钥长度越长,安全强度越高,但性能也越差。这里有一个对比表格,我建议你收藏:
| 安全强度(位) | RSA 密钥长度 | ECC 密钥长度 | 说明 |
|---|---|---|---|
| 80 | 1024 | 160-223 | 已不推荐,2015 年后弃用 |
| 112 | 2048 | 224-255 | 当前最低标准 |
| 128 | 3072 | 256-383 | 推荐用于未来 10 年 |
| 192 | 7680 | 384-511 | 高安全场景 |
| 256 | 15360 | 512+ | 顶级安全 |
从表格里能看出来,ECC 在同等安全强度下,密钥长度短得多。我个人习惯,新项目优先选 ECC,除非有兼容性要求必须用 RSA。
嗯,这里要注意一点:密钥长度不是越长越好。2048 位的 RSA 对于绝大多数场景已经足够安全。用 4096 位甚至 8192 位,性能开销会翻倍,但安全增益微乎其微。你想想看,攻击者不会傻到去硬解你的 4096 位密钥,他们更可能去搞你的系统漏洞或者社会工程学攻击。
4.5 非对称加密的局限
非对称加密虽然强大,但不是万能的。它的主要问题是慢。RSA 加密比 AES 慢上千倍。所以实际应用中,我们通常用混合加密:
- 用非对称加密(如 RSA)传输一个临时生成的对称密钥。
- 用这个对称密钥(如 AES)加密实际数据。
这就是 HTTPS 的底层逻辑。我在做安全架构评审时,经常看到有人试图用 RSA 加密大文件,结果性能惨不忍睹。记住,非对称加密只适合加密小数据,比如密钥、哈希值、数字签名。
一句话总结:
- RSA:经典,兼容性好,但密钥长、速度慢。
- ECC:现代,密钥短、速度快、安全性高,推荐新项目使用。
- 密钥长度:2048 位 RSA 或 256 位 ECC 是当前黄金标准。
这张图把非对称加密的核心脉络梳理清楚了。从密钥对的概念出发,到两大主流算法 RSA 和 ECC,再到密钥长度与安全强度的权衡。我个人建议,你在做技术选型时,可以拿着这张图对照着思考,基本不会跑偏。