非对称加密(Asymmetric Cryptography),又称公钥加密(Public-Key Cryptography),是现代密码学的基石。它使用一对数学相关的密钥——公钥(Public Key)和私钥(Private Key),从根本上解决了对称加密长期面临的密钥分发难题。自1976年Diffie和Hellman提出公钥密码学概念以来,RSA、ECC、ElGamal等算法已成为HTTPS、数字签名、加密货币和证书体系的信任根基。
对称加密(如AES)最大的弱点可以用一个简单场景说明:Alice要给Bob发一封加密邮件,两人必须事先共享同一个密钥。但——
这就是著名的密钥分发问题(Key Distribution Problem)。在互联网这种开放信道上,双方从未谋面,却需要安全交换密钥——看似不可能完成的任务。
非对称加密通过一个精妙的数学设计解决了这个问题:
通信时,发送方用接收方的公钥加密消息,只有持有对应私钥的接收方能解密。即使攻击者截获了密文和公钥,也无法还原原文。
Alice ──→ [公钥加密] ──→ 密文 ──→ [私钥解密] ──→ Bob
↑
Eve能看见密文
和公钥,但解不开
数学上,非对称加密的核心是单向函数(One-Way Function):正向计算容易,逆向求解在计算上不可行。
RSA(Rivest-Shamir-Adleman)于1977年由三位MIT教授提出,是历史上最经典、应用最广泛的公钥算法。它基于大整数分解难题(Integer Factorization Problem):两个大素数的乘积很容易计算,但从乘积反推出两个素数极其困难。
RSA密钥对的生成分为以下步骤:
步骤1:选择两个大素数
随机选择两个大素数 和 。以小型演示为例:
在实际系统中, 和 的长度至少为1024位(约308位十进制数)。
步骤2:计算模数
的长度即为RSA的密钥长度。 被公开作为公钥的一部分。
步骤3:计算欧拉函数
不可公开——它是私钥安全性的数学基础。
步骤4:选择公钥指数
选择 ,满足 且 。常用值:
的二进制形式为 10000000000000001(只有两个1),这使得加密运算(模幂)非常高效。
| 的取值 | 优点 | 缺点 |
|---|---|---|
| 3 | 加密速度最快 | 存在小指数攻击风险 |
| 17 | 加密速度快 | 中等安全 |
| 65537 | 安全性经过充分验证 | 加密速度可接受 |
| 随机大数 | 安全理论最强 | 加密速度慢 |
步骤5:计算私钥指数
计算 ,即求解:
使用扩展欧几里得算法:
验证:,满足条件。
步骤6:输出密钥对
| 密钥 | 内容 | 公开性 |
|---|---|---|
| 公钥 | 🔓 公开 | |
| 私钥 | 🔒 保密,同时销毁 |
加密:将明文 表示为整数 ,计算:
解密:使用私钥 还原明文:
具体数值例子:假设要加密消息 "HELLO",先将其编码为数字 :
| 步骤 | 操作 | 结果 |
|---|---|---|
| 明文编码 | — | |
| 加密 | ||
| 发送 | Alice发送2061给Bob | 密文在网络中传输 |
| 解密 |
注意:在实际应用中,RSA不直接加密原始消息,而是对一个对称密钥(会话密钥)加密——即混合加密(Hybrid Encryption)。
RSA的安全性依赖于分解整数 的困难性。如果攻击者能分解 ,就可以:
目前已知最快的整数分解算法是数域筛法(GNFS),其时间复杂度约为:
各长度RSA的实际安全强度(2024年评估):
| RSA密钥长度 | 安全等级 | 等价对称强度 | 破解难度 |
|---|---|---|---|
| 1024位 | 已不推荐 | ~80位 | 国家级对手可能破解(2024) |
| 2048位 | ✅ 当前标准 | ~112位 | 预计2030年前安全 |
| 3072位 | ✅ 推荐长周期 | ~128位 | 与AES-128等安全级别 |
| 4096位 | ✅ 高安全 | ~152位 | 过剩但兼容性良好 |
| 15360位 | 企业级长期 | ~256位 | 安全至量子时代前夕 |
重要结论:2048位RSA在大多数场景下足够了,并不需要4096位——更长的密钥带来极小的安全增益和显著的性能损失。
ECC(Elliptic Curve Cryptography)由Koblitz和Miller于1985年分别独立提出。它使用椭圆曲线上的点群结构,能够在更短的密钥长度下提供与RSA相当的安全性。
椭圆曲线方程(Weierstrass标准形式):
例如,secp256k1曲线(比特币使用的曲线):
点的加法运算:椭圆曲线上的点构成一个阿贝尔群。给定两点 和 , 定义如下:
y
↑
| ╱ P
| ╱
| ╱
─────╱─────────→ x
╱
╱ Q
╱
╱ R'
R
标量乘法:,其中 是整数。这就是ECC的单向函数:
以比特币的secp256k1曲线为例:
步骤1:选择曲线参数
其中 (约 )
步骤2:选择生成点
曲线有一个公开的基点 ,其坐标固定:
步骤3:生成私钥
随机选择一个大整数 (256位):
步骤4:计算公钥
公钥是椭圆曲线上的一个点,包含x和y坐标。
| 安全等级 | RSA密钥长度 | ECC密钥长度 | 密钥比 |
|---|---|---|---|
| 80位 | 1024位 | 160位 | 6.4:1 |
| 112位 | 2048位 | 224位 | 9.1:1 |
| 128位 | 3072位 | 256位 | 12:1 |
| 192位 | 7680位 | 384位 | 20:1 |
| 256位 | 15360位 | 521位 | 29.5:1 |
ECC的优势显而易见:256位ECC提供与3072位RSA同等的安全性,密钥大小仅为后者的1/12。这意味着:
| 曲线名称 | 密钥长度 | 安全性 | 主要应用 | 特点 |
|---|---|---|---|---|
| P-256 (secp256r1) | 256位 | ~128位 | HTTPS证书、TLS | NIST标准,广泛支持 |
| P-384 (secp384r1) | 384位 | ~192位 | 美国政府级 | 高于AES-192安全 |
| P-521 (secp521r1) | 521位 | ~256位 | 长期安全需求 | 最高安全等级 |
| secp256k1 | 256位 | ~128位 | 比特币、以太坊 | Koblitz曲线,运算更快 |
| Curve25519 (X25519) | 255位 | ~128位 | SSH、TLS 1.3 | 常数时间实现,抗侧信道 |
| Curve448 (X448) | 448位 | ~224位 | 高安全场景 | RFC 7748标准 |
ECC的一个著名陷阱是无效曲线攻击(Invalid Curve Attack)。攻击者发送不在协议曲线上的点,诱导私钥持有者进行标量乘法,从而泄漏私钥信息。
防御方法:验证接收到的点是否确实在曲线上——检查 。
ElGamal由Taher Elgamal于1985年提出,基于Diffie-Hellman密钥交换的思想,提供了公钥加密和数字签名功能。
ElGamal的安全性基于有限域上的离散对数问题(DLP):给定 和 ,求 在计算上不可行。
步骤1:选择一个大的安全素数 ,使得 ( 也是素数)
示例参数(小型演示):
步骤2:选择私钥
步骤3:计算公钥
密钥对:
| 密钥 | 内容 |
|---|---|
| 公钥 | |
| 私钥 |
加密过程:Alice要加密消息 :
解密过程:Bob解密:
关键特性:每次加密使用不同的随机数 ,即使同一明文也会产生不同密文。这称为概率加密(Probabilistic Encryption)。
| 加密次数 | 随机数 | 密文 | 特点 |
|---|---|---|---|
| 第1次 | (10, 15) | 密文1 | |
| 第2次 | (17, 8) | 同一明文,完全不同 | |
| 第3次 | (20, 19) | 又不同 |
在实际系统中,非对称加密从不直接加密大量数据——因为太慢。以RSA为例,2048位RSA每秒只能加密约数千次,而AES-256每秒可加密数GB数据。
混合加密(Hybrid Encryption)结合了两者优势:
Alice Bob
│ │
│ ① 生成随机会话密钥 SK │
│ (AES-256密钥) │
│ │
│ ② 用Bob的公钥加密 SK │
│ → ECC_SK = ECC_Encrypt(SK) │
│ │
│ ③ 用SK加密实际消息 │
│ → Ciphertext = AES_Encrypt(msg,SK) │
│ │
│ ┌──────────┐ │
│ │ECC_SK │ Ciphertext │ ──────────→ │
│ └──────────┘ │
│ │
│ │
│ │ ④ 用Bob的私钥解密 SK
│ │ → SK = ECC_Decrypt(ECC_SK)
│ │
│ │ ⑤ 用SK解密消息
│ │ → msg = AES_Decrypt(Ciphertext, SK)
│ │
这就是HTTPS/TLS的工作方式。每次连接生成一个新的会话密钥,公钥加密只保护这个小密钥(几十字节),真正的大数据用AES加密(带宽和性能最优)。
参考链接:对称加密
非对称加密的另一个革命性应用是数字签名(Digital Signature)——用私钥签名,用公钥验证。
签名过程(Alice):
消息 m → [哈希] → h(m) → [私钥签名] → 签名 σ
↓
Alice发送 (m, σ) 给 Bob
验证过程(Bob):
(m, σ) → [公钥验证] → 检查 σ 是否匹配 m
↓
是 → 消息来自Alice且未被篡改
否 → 拒绝
安全性保证:
| 攻击场景 | 能否成功? | 原因 |
|---|---|---|
| Eve伪造Alice签名 | ❌ 不可能 | Eve没有Alice的私钥 |
| Eve篡改消息内容 | ❌ 不可能 | 签名验证会失败 |
| 重放攻击 | ⚠️ 需额外防范 | 需要时间戳或nonce |
| 哈希碰撞攻击 | ⚠️ 需使用强哈希 | SHA-256及以上 |
数字签名不只是加密的逆向——它解决了认证(Authentication)、**完整性(Integrity)和不可否认性(Non-Repudiation)**三大问题。
使用之前的密钥 :
签名:Alice对消息 签名
验证:Bob验证
椭圆曲线数字签名算法(ECDSA)是比特币和以太坊的核心:
签名(对于消息 ,私钥 ):
验证(公钥 ):
❗ 安全警告:随机数 必须每次不同且不可预测。2010年,索尼PS3的ECDSA签名使用了固定 ,导致攻击者直接恢复了私钥——整个PS3生态系统被攻破。
非对称加密还解决了另一个关键问题——在不安全的信道上建立共享密钥。
Diffie-Hellman(DH)由Whitfield Diffie和Martin Hellman于1976年提出,是第一个公开的公钥方案。
公开参数:素数 p=23, 生成元 g=5
Alice Bob
│ │
│ 选择 a=6 │ 选择 b=15
│ │
│ A = g^a mod p │ B = g^b mod p
│ = 5^6 mod 23 │ = 5^15 mod 23
│ = 8 │ = 19
│ │
│──── A=8 ────────────────→ │
│←─── B=19 ──────────────────│
│ │
│ s = B^a mod p │ s = A^b mod p
│ = 19^6 mod 23 │ = 8^15 mod 23
│ = 2 │ = 2
│ │
│ 共享密钥 s=2 ✅ │
魔法在于:Alice和Bob得到了相同的 ,但窃听者Eve只知道 。要计算共享密钥,Eve需要求解离散对数——对于大素数(如2048位),这是计算上不可行的。
ECC版本的Diffie-Hellman,更高效:
公开参数:椭圆曲线 secp256r1, 基点 G
Alice Bob
│ │
│ 私钥 d_A (随机256位) │ 私钥 d_B (随机256位)
│ 公钥 Q_A = d_A × G │ 公钥 Q_B = d_B × G
│ │
│──── Q_A ───────────────────→ │
│←─── Q_B ──────────────────────│
│ │
│ 共享密钥 S = d_A × Q_B │ 共享密钥 S = d_B × Q_A
│ = d_A d_B G │ = d_B d_A G
│ │
│ 共享点 S (x坐标) ✅ │
TLS 1.3使用了ECDHE(Ephemeral ECDH)——每次连接生成临时的DH密钥对,提供前向安全性(Perfect Forward Secrecy)。即使服务器私钥泄露,也无法解密过去的会话。
| 应用层 | 协议/标准 | 使用算法 | 作用 |
|---|---|---|---|
| 🔐 HTTPS | TLS 1.3 | ECDHE + ECDSA / RSA | 安全网页浏览 |
| 📧 电子邮件 | S/MIME, PGP | RSA / ECC | 加密和签名 |
| 🔑 SSH | SSH-2 | ECDH + ECDSA | 远程安全登录 |
| 💰 加密货币 | Bitcoin, Ethereum | ECDSA (secp256k1) | 交易签名 |
| 📜 数字证书 | X.509 / PKI | RSA或ECC | 身份认证 |
| 🆔 电子身份证 | eIDAS | ECC | 数字身份 |
| 📱 移动支付 | EMVCo | RSA或ECC | 卡片认证 |
| 🌐 DNS安全 | DNSSEC | RSA / ECDSA | DNS认证 |
实测性能对比(使用OpenSSL 3.0,Intel Xeon Platinum 8375C):
| 操作 | RSA-2048 | RSA-4096 | ECC P-256 | ECC P-384 |
|---|---|---|---|---|
| 密钥生成 | 2.1 ms | 12.5 ms | 0.3 ms | 0.7 ms |
| 加密(公钥操作) | 0.3 ms | 1.1 ms | 0.4 ms | 0.9 ms |
| 解密(私钥操作) | 10.1 ms | 57.3 ms | 0.4 ms | 0.9 ms |
| 签名 | 10.1 ms | 57.3 ms | 0.4 ms | 0.9 ms |
| 验证 | 0.3 ms | 1.1 ms | 0.6 ms | 1.5 ms |
关键观察:ECC的私钥操作(解密/签名)比RSA快25-60倍,这是ECC在移动设备和物联网场景中占据压倒性优势的原因。
| 场景 | RSA-2048 | ECC P-256 | 差异 |
|---|---|---|---|
| TLS握手(无会话复用) | ~5.5 KB | ~1.5 KB | 节省73% |
| X.509证书大小 | ~1.5 KB | ~0.5 KB | 节省67% |
| 数字签名长度 | 256字节 | 64字节 | 节省75% |
| 攻击类型 | 原理 | 防御措施 |
|---|---|---|
| 因子分解攻击 | 分解 | 使用足够大的密钥(>2048位) |
| 共模攻击 | 相同模数多用户 | 每个用户使用独立模数 |
| 低指数攻击 | 太小时加密短消息 | 使用 ,OAEP填充 |
| 时间侧信道 | 根据解密时间推测密钥位 | 常数时间实现 |
| 缓存侧信道 | CPU缓存泄露 | 禁用超线程,隔离环境 |
| 选择密文攻击 | 利用解密预言机 | 使用OAEP或RSAES-PKCS1-v1_5 |
| Bleichenbacher攻击 | PKCS#1 v1.5填充预言机 | 升级到OAEP(1998年后修复) |
OAEP(Optimal Asymmetric Encryption Padding)通过引入随机填充,将确定性RSA加密变为概率性加密,抵抗选择密文攻击:
原始消息: m
OAEP填充后: m' = m ⊕ H(r) || r ⊕ G(m ⊕ H(r))
RSA加密: c = (m')^e mod n
其中 是随机数, 和 是哈希函数。OAEP保证了:
| 攻击类型 | 原理 | 防御措施 |
|---|---|---|
| Pohlig-Hellman攻击 | 对光滑阶群有效 | 使用大素数阶曲线 |
| Pollard Rho算法 | 步破解 | 密钥长度足够(>224位) |
| 无效曲线攻击 | 诱导不在曲线上的点 | 验证点是否在曲线上 |
| 随机数重用 | 固定 导致私钥泄露 | 使用RFC 6979确定性随机数 |
| 侧信道攻击 | 时序、功耗分析 | 蒙哥马利阶梯、常量时间 |
| Twist攻击 | 利用二次扭曲曲线 | Curve25519原生防御 |
Shor算法在量子计算机上可以在多项式时间内解决因子分解和离散对数问题。这意味着:
正在标准化的后量子公钥方案(NIST PQC标准化项目):
| 方案 | 类型 | 安全性基础 | 密钥大小 | 签名/密文大小 |
|---|---|---|---|---|
| CRYSTALS-Kyber | 格密码(KEM) | Module-LWE | 1.3 KB | 0.8 KB |
| CRYSTALS-Dilithium | 格密码(签名) | Module-LWE | 1.3 KB | 2.4 KB |
| Falcon | 格密码(签名) | NTRU | 1.3 KB | 0.7 KB |
| SPHINCS+ | 哈希签名 | Hash-based | 0.1 KB | 8-50 KB |
NIST已在2024年正式标准化了CRYSTALS-Kyber(FIPS 203)和CRYSTALS-Dilithium(FIPS 204),各大厂商开始在TLS中集成混合方案(传统ECC + Kyber 组合)。
参考链接:后量子密码学
| 使用场景 | 推荐算法 | 最小密钥长度 |
|---|---|---|
| 通用HTTPS/TLS | ECDSA P-256 | 256位 |
| 高安全性合规 | ECDSA P-384 | 384位 |
| 兼容性优先 | RSA | 2048位 |
| 即时通信加密 | X25519 | 255位 |
| 加密货币签名 | secp256k1 | 256位 |
TLS_AES_256_GCM_SHA384)/dev/urandom)| 方面 | RSA | ECC | ElGamal |
|---|---|---|---|
| 安全基础 | 大整数分解 | ECDLP | 有限域DLP |
| 密钥长度(128位安全) | 3072位 | 256位 | 3072位 |
| 加密速度(公钥) | 快 | 中等 | 慢(密文膨胀2倍) |
| 解密速度(私钥) | 慢 | 中等 | 慢 |
| 签名速度 | 慢 | 快 | — |
| 验证速度 | 快 | 中等 | — |
| 主要优势 | 广泛兼容 | 高效紧凑 | 概率加密 |
| 主要缺点 | 密钥长、性能差 | 实现复杂 | 性能差、密文大 |
| 后量子安全 | ❌ 不安全 | ❌ 不安全 | ❌ 不安全 |
最佳实践:2024年新系统默认使用ECC(P-256或X25519),保留RSA仅用于旧系统兼容。对于长期安全(10年+),关注NIST PQC标准化的进展,并考虑部署混合方案。
参考链接: