非对称加密算法与应用场景
· 阅读需 5 分钟
简介
非对称加密需要一对密钥:公开的公钥和不公开的私钥。用其中一个加密,只能用另一个解密——连加密用的密钥本身也解不开。
两个密钥数学上相关,但知道其中一个推不出另一个,所以公钥可以任意公开,私钥必须由持有者严格保管,不通过网络传输、不交给通信对方。加解密用不同密钥,故称"非对称",区别于加解密共用同一密钥的对称加密。
加密与签名:两个核心场景
非对称加密的两个用途:数据加密和数字签名,前者保护机密性,后者保护完整性与身份。
加密与签名的区别
加密防泄露(机密性),签名防篡改并证明身份(完整性 + 身份认证 + 不可否认)。两者目的不同,常配合使用。
加密过程
- A 生成密钥对,私钥自留,公钥公开。此处 A 是接收方。
- B 要给 A 发密文,用 A 的公钥加密消息。
- A 收到后用自己的私钥解密。只有 A 的私钥能解开,密文即便被截获也无法还原。
签名过程
- A 生成密钥对,私钥自留,公钥公开。此处 A 是发送方。
- A 先对消息计算哈希摘要(如 SHA-256),再用私钥对摘要签名,得到签名值;把消息原文和签名一起发出。
- B 用 A 的公钥验签:对收到的消息重算摘要,与签名还原出的摘要比对,一致则验签通过,证明消息确实来自 A 且未被改动。
签名一定是对摘要签,不是对原文签——既绕开长度限制,也比直接签原文快。即便知道消息内容,没有私钥也无法伪造签名。
加密场景里密钥持有者是接收方(别人用你的公钥加密、你用私钥解密);签名场景里密钥持有者是发送方(你用私钥签、别人用你的公钥验)。同一对密钥在两个场景里角色对调。
常见算法
主流非对称算法按所依据的数学难题分两类:
- RSA:基于大整数分解难题,最经典、生态最全,证书兼容性最好。缺点是密钥和密文都长(2048 位起步),运算慢。
- ECC(椭圆曲线):基于椭圆曲线离散对数(ECDLP)。同等安全强度下密钥短得多、速度快。其中 ECDSA 用于签名,ECDH 用于密钥交换。
| 算法 | 数学基础 | 安全强度 | 特点 |
|---|---|---|---|
| RSA-2048 | 大整数分解 | ≈112-bit | 通用、兼容好,当前事实标准下限 |
| RSA-3072 | 大整数分解 | ≈128-bit | 对标 ECC P-256 |
| ECDSA P-256 | 椭圆曲线离散对数 | ≈128-bit | 密钥与签名短、速度快,新平台首选 |
新系统优先 ECDSA P-256 或 RSA-2048;RSA 签名方案选 RSASSA-PSS(比 PKCS#1 v1.5 更抗填充攻击)。RSA-1024 及以下、MD5、SHA-1 一律禁用。
密钥对的具体生成(openssl 命令 + Java/Go 代码)见《Rsa 密匙对生成》与《ECC 密钥对生成》。
实际应用场景
抽象流程之外,非对称加密的真实落地几乎都在这三处:
- HTTPS / TLS。握手阶段用非对称(ECDHE 协商对称密钥、RSA/ECDSA 验证证书)建立安全通道,之后的大量数据传输改用对称加密——非对称只用在建立连接这一小段,兼顾安全和性能。
- 数字证书与 CA。公钥怎么确认是某个人的?由可信的证书颁发机构(CA)用自己的私钥给公钥签名,产出数字证书。浏览器和操作系统内置 CA 根证书,据此验证服务端证书真伪,堵住中间人冒充公钥的攻击。
- SSH 登录、代码与镜像签名、PGP/GPG 邮件加密等,原理同上。
混合加密
非对称运算慢,且有长度上限:RSA-2048 单次只能加密约 245 字节,直接加密大报文既慢又不可行。所以实际从不拿非对称单独加密业务数据,而是用混合方案:
- 随机生成一次性对称密钥(AES),用它加密整段报文;
- 用接收方公钥(RSA 或 ECDH)加密这把对称密钥,连同密文一起发出;
- 接收方用私钥解出对称密钥,再解开报文。
把非对称"无需预先共享密钥"的便利和对称"快"的性能结合起来。TLS、开放平台报文加密用的都是这套混合思路。