跳到主要内容

非对称加密算法与应用场景

· 阅读需 5 分钟

简介

非对称加密需要一对密钥:公开的公钥和不公开的私钥。用其中一个加密,只能用另一个解密——连加密用的密钥本身也解不开。

两个密钥数学上相关,但知道其中一个推不出另一个,所以公钥可以任意公开,私钥必须由持有者严格保管,不通过网络传输、不交给通信对方。加解密用不同密钥,故称"非对称",区别于加解密共用同一密钥的对称加密。

加密与签名:两个核心场景

非对称加密的两个用途:数据加密数字签名,前者保护机密性,后者保护完整性与身份。

加密与签名的区别

加密防泄露(机密性),签名防篡改并证明身份(完整性 + 身份认证 + 不可否认)。两者目的不同,常配合使用。

加密过程

  1. A 生成密钥对,私钥自留,公钥公开。此处 A 是接收方
  2. B 要给 A 发密文,用 A 的公钥加密消息。
  3. A 收到后用自己的私钥解密。只有 A 的私钥能解开,密文即便被截获也无法还原。

签名过程

  1. A 生成密钥对,私钥自留,公钥公开。此处 A 是发送方
  2. A 先对消息计算哈希摘要(如 SHA-256),再用私钥对摘要签名,得到签名值;把消息原文和签名一起发出。
  3. 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 字节,直接加密大报文既慢又不可行。所以实际从不拿非对称单独加密业务数据,而是用混合方案:

  1. 随机生成一次性对称密钥(AES),用它加密整段报文;
  2. 用接收方公钥(RSA 或 ECDH)加密这把对称密钥,连同密文一起发出;
  3. 接收方用私钥解出对称密钥,再解开报文。

把非对称"无需预先共享密钥"的便利和对称"快"的性能结合起来。TLS、开放平台报文加密用的都是这套混合思路。