2. 密码学基础回顾:对称加密与非对称加密、哈希函数、数字签名、密钥交换协议、椭圆曲线密码学(ECC)基础
本章作为《密码算法安全通信:国密算法实现源码实战》的基础铺垫,系统回顾现代密码学的核心构件。理解这些基础概念是掌握国密算法(SM2/SM3/SM4/SM9)的前提。我们将从对称加密与非对称加密的对比开始,逐步深入到哈希函数、数字签名、密钥交换协议,最后建立椭圆曲线密码学(ECC)的数学直觉。
2.1 对称加密与非对称加密
加密算法根据密钥的使用方式分为两大类:对称加密与非对称加密。对称加密使用同一个密钥进行加密和解密,速度快,适合大量数据加密;非对称加密使用公钥加密、私钥解密,解决了密钥分发问题,但性能较慢。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个(共享密钥) | 2 个(公钥 + 私钥) |
| 密钥分发 | 困难,需安全信道 | 公钥可公开,私钥本地保管 |
| 计算速度 | 快(硬件加速友好) | 慢(大数运算) |
| 典型算法 | SM4, AES, DES | SM2, RSA, ECC |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
| 安全基础 | 置换/代换/扩散 | 数学难题(离散对数/大整数分解) |
2.2 哈希函数
哈希函数将任意长度的输入数据映射为固定长度的输出(摘要),具有单向性、抗碰撞性和雪崩效应。哈希函数不是加密算法(不可逆),而是数据完整性校验的核心工具。
- SM3:国密哈希标准,输出 256 位(32 字节)摘要,安全强度等同于 SHA-256。
- 应用场景:数字签名(先哈希后签名)、消息认证码(HMAC)、密码存储、区块链。
- 安全要求:抗强碰撞(找到两个不同输入产生相同摘要)需达到 2^(n/2) 计算复杂度。
from gmssl import sm3
data = b"Hello, 国密世界!"
digest = sm3.sm3_hash(data)
print(digest.hex()) # 输出 64 位十六进制字符串
2.3 数字签名
数字签名提供身份认证、数据完整性和不可否认性。签名者使用私钥对消息的哈希值进行签名,验证者使用签名者的公钥验证签名。
2.4 密钥交换协议
密钥交换协议允许通信双方在不安全的信道上协商出一个共享密钥。经典的 Diffie-Hellman(DH)协议基于离散对数难题,而 ECDH 将其迁移到椭圆曲线上,效率更高。
- DH 协议:双方各自生成私钥 a、b,计算公钥 A = g^a mod p、B = g^b mod p,交换公钥后计算共享密钥 K = B^a = A^b = g^(ab) mod p。
- ECDH 协议:在椭圆曲线上,私钥为整数 d,公钥为点 Q = d * G(G 为基点),共享密钥为双方私钥与对方公钥的点乘结果。
- 国密实现:SM2 密钥交换协议基于 ECDH,并增加了身份认证和密钥确认步骤,防止中间人攻击。
2.5 椭圆曲线密码学(ECC)基础
ECC 是目前最高效的公钥密码体系之一,在同等安全强度下,ECC 的密钥长度远小于 RSA。国密 SM2 算法正是基于 ECC 的椭圆曲线数字签名算法(ECDSA)和椭圆曲线密钥交换协议(ECDH)。
2.5.1 椭圆曲线方程
密码学中使用的椭圆曲线是定义在有限域上的 Weierstrass 方程:
y² = x³ + ax + b (mod p)
其中:
- p 为大素数,定义有限域 Fp
- a, b 为域内常数,满足 4a³ + 27b² ≠ 0 (mod p)
- 所有点 (x, y) 加上无穷远点 O 构成阿贝尔群
2.5.2 点加与标量乘法
ECC 的核心运算是点加和标量乘法。标量乘法 k * P 表示将点 P 自加 k 次,这是 ECC 安全性的数学基础——椭圆曲线离散对数问题(ECDLP):已知基点 G 和公钥 Q = d * G,求解私钥 d 在计算上不可行。
2.5.3 国密 SM2 使用的曲线参数
SM2 推荐使用一条 256 位素域上的椭圆曲线,参数如下(十六进制):
| 参数 | 值(十六进制) | 说明 |
|---|---|---|
| p | FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF | 素数模数 |
| a | FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC | 曲线系数 a |
| b | 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93 | 曲线系数 b |
| Gx | 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7 | 基点 x 坐标 |
| Gy | BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0 | 基点 y 坐标 |
| n | FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123 | 基点阶(素数) |
2.6 本章小结
本章回顾了密码学的五大基础构件:
- 对称加密(SM4)—— 高效数据加密
- 非对称加密(SM2)—— 密钥分发与数字签名
- 哈希函数(SM3)—— 数据完整性校验
- 数字签名 —— 身份认证与不可否认性
- 密钥交换协议(ECDH)—— 安全协商共享密钥
- ECC 基础 —— 椭圆曲线离散对数问题与 SM2 曲线参数