密码学基础概念:对称加密、非对称加密与哈希函数
概述
密码学(Cryptography)是研究信息保护的科学,其核心目标是在不安全的信道上实现安全通信。现代密码学建立在计算复杂性理论基础之上——不是让解密在物理上不可能,而是在计算上不可行。
密码学提供四大核心安全服务:
| 安全服务 | 含义 | 典型机制 |
|---|---|---|
| 机密性(Confidentiality) | 防止未授权的信息泄露 | 对称加密、公钥加密 |
| 完整性(Integrity) | 防止未授权的数据篡改 | 哈希函数、MAC、数字签名 |
| 认证性(Authentication) | 验证通信实体的身份 | 数字签名、证书、MAC |
| 不可否认性(Non-repudiation) | 防止发送方否认已发送的消息 | 数字签名 |
- 对称加密(Symmetric Encryption)— 加密和解密使用同一密钥
- 非对称加密(Asymmetric Encryption)— 加密和解密使用不同密钥(公钥/私钥对)
- 密码学哈希函数(Cryptographic Hash Function)— 将任意长度输入映射为固定长度输出
对称加密
定义与历史
对称加密是最古老的加密形式:发送方和接收方共享一个秘密密钥 $K$,加密和解密都使用该密钥。
形式化定义:对称加密方案是一个三元组 $(Gen, Enc, Dec)$:
$$Gen(1^n) \rightarrow K \quad \text{(密钥生成)}$$ $$Enc_K(M) \rightarrow C \quad \text{(加密)}$$ $$Dec_K(C) = M \quad \text{(解密)}$$
历史上著名的对称加密算法包括:
| 算法 | 年份 | 分组长度 | 密钥长度 | 状态 |
|---|---|---|---|---|
| DES | 1977 | 64 bit | 56 bit | ❌ 已破解(暴力) |
| 3DES | 1998 | 64 bit | 168 bit | ⚠️ 逐步淘汰 |
| AES | 2001 | 128 bit | 128/192/256 bit | ✅ 当前标准 |
| SM4 | 2006/2012 | 128 bit | 128 bit | ✅ 国密标准 |
AES 算法核心原理
AES(Advanced Encryption Standard)采用 SPN(Substitution-Permutation Network)结构。加密过程为:
$$C = AddRoundKey \circ \left[\prod_{i=1}^{N_r-1}(MixColumns \circ SubBytes \circ ShiftRows)\right] \circ SubBytes \circ ShiftRows \circ AddRoundKey$$
其中 $N_r$ 为轮数(10/12/14 轮,取决于密钥长度)。AES 的四种操作:
- SubBytes:字节替换,通过 S 盒实现非线性变换
- ShiftRows:行移位,实现字节级别的扩散
- MixColumns:列混合,实现列间的线性混合
- AddRoundKey:轮密钥加,将轮密钥与状态异或
SM4 算法核心原理
SM4 采用 非平衡 Feistel 结构,与 AES 截然不同:
$$X_{i+4} = X_i \oplus T(X_{i+1} \oplus X_{i+2} \oplus X_{i+3} \oplus rk_i), \quad i = 0, 1, \ldots, 31$$
合成置换 $T = \tau \circ L$,其中 $\tau$ 是 4 个 S 盒并行查表,$L$ 是 32-bit 线性变换。SM4 的 32 轮迭代提供了充分的安全边际。
对称加密的工作模式
分组密码只能加密固定长度的数据块,实际数据往往远超一个分组。工作模式(Mode of Operation)定义了如何将分组密码扩展为任意长度数据的加密方案:
| 模式 | 公式 | 特点 | |
|---|---|---|---|
| ECB | $C_i = E_K(P_i)$ | ❌ 不安全,相同明文产生相同密文 | |
| CBC | $C_i = E_K(P_i \oplus C_{i-1})$ | 需要 IV,串行加密 | |
| CTR | $C_i = P_i \oplus E_K(Nonce \ | Counter)$ | ✅ 并行,最常用 |
| GCM | CTR + GHASH | ✅ 认证加密,同时保证机密性和完整性 |
关键安全原则:永远不要使用 ECB 模式。CBC 和 CTR 只提供机密性,不提供完整性保护。生产环境应优先使用 AEAD 模式(如 GCM、CCM)。
密钥管理挑战
对称加密的核心挑战是密钥分发——如何在不安全的信道上安全地共享密钥?假设 Alice 和 Bob 从未见面,他们如何协商出一个共享的秘密密钥?这就是著名的 密钥分发问题(Key Distribution Problem),它直接催生了非对称加密的诞生。
非对称加密
核心思想
非对称加密(也称公钥密码)由 Diffie 和 Hellman 在 1976 年提出,是密码学历史上最重要的突破之一。其核心思想是:
- 每个用户生成一对密钥:公钥(Public Key)公开,私钥(Private Key)保密
- 公钥加密的内容只能用对应的私钥解密
- 从公钥推导私钥在计算上不可行
$$Gen(1^n) \rightarrow (pk, sk) \quad \text{(密钥对生成)}$$ $$Enc_{pk}(M) \rightarrow C \quad \text{(公钥加密)}$$ $$Dec_{sk}(C) = M \quad \text{(私钥解密)}$$
三大困难问题
所有公钥密码方案的安全性都建立在以下数学困难问题之上:
| 困难问题 | 基于该问题的算法 | 数学描述 |
|---|---|---|
| 大整数分解(IFP) | RSA | 给定 $n = p \times q$,求 $p, q$ |
| 离散对数(DLP) | DSA、ElGamal、ECDH | 给定 $g, h$,求 $x$ 使 $g^x \equiv h \pmod{p}$ |
| 椭圆曲线离散对数(ECDLP) | ECDSA、SM2、X25519 | 给定椭圆曲线上的点 $G, Q$,求 $k$ 使 $Q = kG$ |
| 安全强度 | RSA 密钥长度 | ECC 密钥长度 | SM2 密钥长度 |
|---|---|---|---|
| 80 bit | 1024 bit | 160 bit | — |
| 112 bit | 2048 bit | 224 bit | — |
| 128 bit | 3072 bit | 256 bit | 256 bit |
| 256 bit | 15360 bit | 512 bit | 512 bit |
关键洞察:SM2 使用 256-bit 椭圆曲线,提供约 128-bit 安全强度,与 RSA 3072-bit 相当,但密钥长度仅为后者的 1/12。
主要公钥加密方案对比
| 算法 | 年份 | 基于问题 | 主要用途 | 安全状态 |
|---|---|---|---|---|
| RSA | 1977 | IFP | 加密、签名 | ⚠️ 需长密钥 |
| ElGamal | 1985 | DLP | 加密、签名 | ✅ 安全 |
| ECDSA | 2005 | ECDLP | 签名 | ✅ 安全 |
| SM2 | 2006 | ECDLP | 签名、加密、密钥交换 | ✅ 国密标准 |
SM2 国密算法概要
SM2 是中国国家密码管理局发布的椭圆曲线公钥密码算法,标准编号为 GM/T 0003-2012(系列标准)/ GB/T 32918-2016(国家标准)。SM2 推荐使用 256-bit 椭圆曲线 $E: y^2 = x^3 + ax + b$,其曲线参数在 GM/T 0003.5-2012 和 GB/T 32918.5-2016 中定义。
SM2 包含三个核心功能:
- 数字签名:基于 ECDSA 的变体,增加了用户 ID 绑定和 SM3 哈希
- 密钥交换:类似 ECDH,但增加了相互认证和密钥确认
- 公钥加密:基于椭圆曲线的混合加密方案
⚠️ 重要提示:SM2 与 NIST P-256(SECP256R1)使用完全不同的曲线参数。两者不能互通,使用ec.SECP256R1()生成的密钥不兼容 SM2 标准。实际开发中需要使用gmssl库或支持国密的 OpenSSL 分支(如 Tongsuo/BabaSSL)。
密码学哈希函数
定义
密码学哈希函数(Cryptographic Hash Function)是一种将任意长度的输入映射为固定长度输出的函数,且满足特定的安全性质。
形式化定义:哈希函数 $H: \{0,1\}^* \rightarrow \{0,1\}^n$ 必须满足以下三个安全性要求:
1. 抗原像性(Pre-image Resistance):给定 $h = H(x)$,难以找到 $x'$ 使得 $H(x') = h$
$$\forall \text{PPT 敌手 } \Pr[H(x') = h : x' \leftarrow \mathcal{A}(h)] \leq negl(n)$$
2. 抗第二原像性(Second Pre-image Resistance):给定 $x$,难以找到 $x' \neq x$ 使得 $H(x) = H(x')$
3. 抗碰撞性(Collision Resistance):难以找到任何 $x \neq x'$ 使得 $H(x) = H(x')$
经典哈希算法对比
| 算法 | 输出长度 | 结构 | 设计年份 | 安全状态 |
|---|---|---|---|---|
| MD5 | 128 bit | Merkle-Damgård | 1992 | ❌ 已被破解(碰撞) |
| SHA-1 | 160 bit | Merkle-Damgård | 1995 | ❌ 已被破解(碰撞) |
| SHA-256 | 256 bit | Merkle-Damgård | 2001 | ✅ 安全 |
| SHA-3 (Keccak) | 可变 | 海绵结构 | 2015 | ✅ 安全 |
| SM3 | 256 bit | Merkle-Damgård | 2008 | ✅ 国密标准 |
SM3 算法核心
SM3 是中国国家密码管理局发布的密码杂凑算法(GM/T 0004-2012 / GB/T 32905-2016 配套标准),输出长度为 256 比特。
SM3 采用 Merkle-Damgård 结构,其核心流程:
- 消息填充(Padding):将消息长度填充至 512-bit 的倍数
1 比特,然后填充 0 直到长度 $\equiv 448 \pmod{512}$
- 最后 64 比特存放原始消息长度(以比特为单位)- 迭代压缩:$CV_i = CF(CV_{i-1}, M_i)$,其中 $CV_0 = IV$(初始值固定为
7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e)
- 压缩函数 $CF$:包含 64 轮运算,使用 6 个布尔函数($FF_j$ 和 $GG_j$)和一个置换函数($P_1$)
哈希函数的应用场景
哈希函数在现代密码学中的应用远超单纯的"摘要"功能:
| 应用 | 说明 | 示例 |
|---|---|---|
| 数据完整性 | 验证文件未被篡改 | 软件发布校验、Git commit hash |
| 数字签名 | 先哈希后签名,效率更高 | 对长消息签名 |
| 密码存储 | 加盐哈希存储用户密码 | bcrypt、Argon2 |
| 消息认证码 | HMAC = Hash + 密钥 | API 签名、JWT |
| 密钥派生 | 从密码/共享秘密派生密钥 | PBKDF2、HKDF |
| 默克尔树 | 构建高效的数据完整性证明 | 区块链、CT 日志 |
三大原语的协同
在实际系统中,三大基础原语从不单独使用。典型的安全通信协议(如 TLS)会组合使用所有三种原语:
- 非对称加密:用于密钥交换(协商对称加密的会话密钥)或身份认证(数字签名)
- 对称加密:用于加密实际传输的数据(高效)
- 哈希函数:用于消息完整性校验(MAC)、证书指纹、密钥派生
Client Server
| |
|--- ClientHello (支持的密码套件列表) -------->|
|<-- ServerHello (选定的密码套件) --------------|
|<-- Certificate (服务器证书 + 公钥) ----------|
|<-- ServerFinished ----------------------------|
|--- ClientFinished ---------------------------->|
| |
|==== 对称加密通道(会话密钥) ==================|这个流程中:
- 数字签名(非对称加密):服务器用私钥签名证明身份
- 密钥交换(非对称加密):双方安全协商出会话密钥
- 对称加密:后续所有数据加密传输
- 哈希函数:证书指纹、握手消息完整性验证
参考来源
- NIST FIPS 197 — Advanced Encryption Standard (AES)
- GB/T 32907-2016 — SM4 分组密码算法
- GM/T 0003-2012 — SM2 椭圆曲线公钥密码算法
- GB/T 32918-2016 — SM2 椭圆曲线公钥密码算法
- GM/T 0004-2012 — SM3 密码杂凑算法
- NIST FIPS 180-4 — Secure Hash Standard (SHS)
- NIST FIPS 202 — SHA-3 Standard
- 272项密码标准全景图(2025版)
- RFC 5280 — Internet X.509 Public Key Infrastructure Certificate and CRL Profile
相关实践
- 如需了解 SM4 在实际项目中的加密实现,请参阅《SM4 国密对称加密实战:CBC/ECB/GCM 模式与性能调优》
- 如需了解 SM2 在 TLS 部署中的完整流程,请参阅《SM2 国密算法实战:从密钥生成到 TLS 完整部署》
- 如需了解 SM3 在 HMAC 中的应用,请参阅《SM3 国密哈希算法实战:HMAC-SM3、PBKDF2-SM3 与性能调优》