1. 密码学基础回顾:对称加密与非对称加密核心概念、哈希函数与消息认证码、数字签名原理
1.1 对称加密核心概念
对称加密(Symmetric Encryption)是密码学中最古老、最直观的加密方式。通信双方使用同一把密钥进行加密和解密操作。其安全性完全依赖于密钥的保密性。
核心特征:加密密钥 = 解密密钥;运算速度快,适合大数据量加密;密钥分发与管理是主要安全挑战。
1.1.1 典型算法对比
| 算法 | 密钥长度 | 分组大小 | 结构 | 安全状态 |
|---|---|---|---|---|
| AES | 128 / 192 / 256 bit | 128 bit | SPN 结构 | 安全(推荐) |
| DES | 56 bit | 64 bit | Feistel 网络 | 已淘汰(密钥过短) |
| 3DES | 112 / 168 bit | 64 bit | Feistel 网络 | 逐步淘汰(性能差) |
| SM4 | 128 bit | 128 bit | Feistel 网络 | 国标,安全可用 |
1.1.2 工作模式与安全边界
对称加密不能仅靠算法保证安全,必须搭配正确的工作模式和初始化向量(IV)。常见模式包括:
- ECB(电子密码本):相同明文块产生相同密文块,存在模式泄露风险,禁止用于协议中。
- CBC(密码分组链接):每个明文块与前一个密文块异或后再加密,需要随机 IV。
- CTR(计数器模式):将计数器加密后与明文异或,可并行计算,流式加密。
- GCM(伽罗瓦/计数器模式):CTR + 认证标签,同时提供机密性和完整性。
协议漏洞警示:在 TLS 1.0 中,CBC 模式与 MAC-then-Encrypt 顺序组合导致了 Padding Oracle 攻击(如 POODLE 攻击)。现代协议应优先使用 AEAD 模式(如 AES-GCM、ChaCha20-Poly1305)。
1.2 非对称加密核心概念
非对称加密(Asymmetric Encryption)使用公钥和私钥组成的密钥对。公钥公开分发,私钥由持有者秘密保存。加密与解密使用不同密钥,解决了对称加密的密钥分发难题。
1.2.1 核心算法对比
| 算法 | 密钥长度(安全等价) | 数学基础 | 主要用途 | 安全状态 |
|---|---|---|---|---|
| RSA | 2048 / 3072 bit | 大整数分解 | 加密 / 签名 | 广泛使用,需足够长度 |
| ECC(椭圆曲线) | 256 bit(等价 RSA 3072) | 椭圆曲线离散对数 | 加密 / 签名 / 密钥交换 | 推荐(短密钥、高性能) |
| SM2 | 256 bit | 椭圆曲线(国标) | 加密 / 签名 / 密钥交换 | 国标,安全可用 |
| DH / ECDH | 2048 / 256 bit | 离散对数 / 椭圆曲线 | 密钥交换 | 安全(需配合签名防中间人) |
1.2.2 混合加密体系
实际通信协议(如 TLS、SSH、IPsec)几乎从不单独使用非对称加密加密大量数据,而是采用混合加密策略:
- 密钥交换阶段:使用非对称加密(如 ECDHE)协商出临时会话密钥。
- 数据加密阶段:使用对称加密(如 AES-GCM)加密实际通信内容。
- 身份认证:使用数字签名(如 ECDSA)验证通信方身份。
协议设计要点:非对称加密运算速度比对称加密慢 1000 倍以上。混合加密体系兼顾了非对称加密的密钥管理优势与对称加密的高性能优势。
1.3 哈希函数与消息认证码
1.3.1 哈希函数(Hash Function)
哈希函数将任意长度的输入数据映射为固定长度的输出(摘要)。它是单向的,即从摘要无法反推出原始数据。
安全哈希函数必须满足:抗原像性(单向)、抗第二原像性(给定输入,难找另一输入产生相同摘要)、抗碰撞性(难找任意两个不同输入产生相同摘要)。
| 算法 | 输出长度 | 结构 | 安全状态 |
|---|---|---|---|
| MD5 | 128 bit | Merkle-Damgård | 已破解(碰撞攻击可行) |
| SHA-1 | 160 bit | Merkle-Damgård | 已破解(SHAttered 攻击) |
| SHA-256 | 256 bit | Merkle-Damgård | 安全(推荐) |
| SHA-3 | 224/256/384/512 bit | 海绵结构 | 安全(推荐) |
| SM3 | 256 bit | Merkle-Damgård | 国标,安全可用 |
1.3.2 消息认证码(MAC)
消息认证码(Message Authentication Code)在哈希函数基础上引入共享密钥,同时提供完整性和真实性保护。接收方使用相同密钥重新计算 MAC 并与收到的 MAC 比较,若一致则证明消息未被篡改且来自合法发送方。
常见 MAC 构造方式:
- HMAC(Hash-based MAC):基于哈希函数,如 HMAC-SHA256。公式为 HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))。
- CMAC(Cipher-based MAC):基于分组密码,如 AES-CMAC。
- GMAC(Galois MAC):基于伽罗瓦域乘法,用于 GCM 模式。
协议漏洞警示:仅使用哈希函数(如 SHA-256)验证完整性而不加密钥,无法防止攻击者同时篡改消息和哈希值。必须使用 MAC 或数字签名。在 TLS 1.2 之前,MAC-then-Encrypt 顺序存在严重安全缺陷,TLS 1.3 已强制使用 Encrypt-then-MAC。
1.4 数字签名原理
数字签名(Digital Signature)是非对称加密在认证领域的核心应用。它提供身份认证、数据完整性和不可否认性。
1.4.1 签名与验证流程
- 签名生成:发送方使用私钥对消息的哈希摘要进行签名运算,生成签名值。
- 签名验证:接收方使用发送方的公钥验证签名值是否与消息匹配。
| 步骤 | 发送方操作 | 接收方操作 | 使用的密钥 |
|---|---|---|---|
| 1. 哈希 | 计算消息 m 的哈希值 h = H(m) | 计算消息 m 的哈希值 h' = H(m) | 无 |
| 2. 签名 / 验证 | 计算签名 s = Sign(SK, h) | 验证 Verify(PK, h', s) 是否通过 | 私钥 SK / 公钥 PK |
| 3. 输出 | 发送 (m, s) | 若验证通过,接受消息 | — |
1.4.2 典型签名算法
- RSA-PSS:基于 RSA 的概率签名方案,推荐替代 PKCS#1 v1.5。
- ECDSA:基于椭圆曲线的数字签名算法,密钥短、性能高。
- EdDSA(Ed25519):基于扭曲爱德华兹曲线的高性能签名算法,抗侧信道攻击。
- SM2 签名:国标椭圆曲线签名算法。
协议设计要点:数字签名通常不直接对消息签名,而是对消息的哈希摘要签名。这可以大幅减少签名运算的数据量,并防止签名方案被利用进行长度扩展攻击。
1.5 本章知识结构总览
| 密码学原语 | 核心安全目标 | 典型算法 | 协议应用场景 |
|---|---|---|---|
| 对称加密 | 机密性 | AES, SM4, ChaCha20 | TLS 记录层加密、IPsec ESP |
| 非对称加密 | 密钥分发、机密性 | RSA, ECC, SM2 | TLS 握手、SSH 密钥交换 |
| 哈希函数 | 完整性(无密钥) | SHA-256, SHA-3, SM3 | 证书指纹、消息摘要 |
| 消息认证码 | 完整性 + 真实性 | HMAC, AES-CMAC | TLS MAC、SSH 数据包认证 |
| 数字签名 | 认证 + 完整性 + 不可否认 | ECDSA, EdDSA, RSA-PSS | X.509 证书、代码签名、TLS 握手 |
协议分析视角:密码算法本身的安全只是基础。协议层面的漏洞往往源于算法组合方式错误(如 Encrypt-and-MAC vs Encrypt-then-MAC)、密钥管理缺陷(如重用 nonce)、实现偏差(如侧信道泄露)或协议状态机设计不当。后续章节将逐一剖析这些实际攻击案例。