2. 密码学工程基础
在国密算法与密码应用工程中,真正决定系统安全性的往往不是“选了哪个算法”,而是四类基础密码原语如何组合、密钥如何流转、以及工程约束是否被正确满足。本节围绕对称加密、非对称加密、哈希、数字签名与密钥管理,从原理到工程落地建立一条完整认知链。
一、四类原语的分工与本质差异
对称加密使用同一把密钥完成加密与解密,典型代表是 SM4。它的优势是速度快、适合大数据量加密,工程上常用于数据加密、会话密钥保护、磁盘与数据库字段加密。其核心约束是:通信双方必须共享同一密钥,而密钥分发本身不能靠对称加密解决。
非对称加密使用公钥加密、私钥解密,或私钥签名、公钥验签,典型代表是 SM2。它解决了密钥分发与身份绑定问题,但运算速度远低于对称加密,因此工程中通常只用于加密短数据(如会话密钥)或做数字签名,不直接加密大文件。
哈希函数(如 SM3)把任意长度输入压缩为固定长度摘要,具备单向性、抗碰撞性和雪崩效应。它不提供机密性,但用于完整性校验、口令存储、消息摘要和签名前的消息压缩。
数字签名是“哈希 + 非对称加密”的组合:先对消息做 SM3 摘要,再用 SM2 私钥对摘要签名,验证方用公钥验签。它同时提供完整性、身份认证和不可否认性,是电子合同、证书、代码签名和交易防篡改的基础。
二、工程约束:从算法参数到系统边界
算法正确不等于系统安全。工程中必须关注以下约束。
密钥长度与安全强度。SM4 分组长度 128 位、密钥长度 128 位;SM3 输出 256 位摘要;SM2 推荐使用 256 位素域曲线。这些参数决定了抗暴力破解的下限,但真正影响安全的是密钥是否随机、是否泄露、是否复用。
模式与填充。SM4 是分组密码,直接加密超过 16 字节的数据需要工作模式。ECB 模式会暴露明文模式,工程中应使用 CBC、CTR 或 GCM 等模式。CBC 需要随机 IV,GCM 需要唯一 nonce,否则会严重削弱安全性。示例中若使用 CBC,IV 应为 16 字节随机数,并与密文一起传输。
签名与验签的格式。SM2 签名结果通常为 DER 编码的 r、s 值,验签方需要按相同曲线参数和用户标识计算。工程中常见问题是双方对“签名原文”理解不一致:一方对原始消息签名,另一方对摘要签名,导致验签失败。正确做法是明确签名输入是消息本身还是消息摘要,并在接口文档中固定。
性能与并发。SM2 签名和验签的耗时通常是 SM4 加解密的数十倍以上。高并发场景下,应把非对称运算集中在密钥交换和签名环节,业务数据走 SM4;同时注意密码机或 HSM 的吞吐上限,避免成为瓶颈。
三、一个可落地的混合加密流程
假设 A 要向 B 发送一份敏感文件,工程上可采用如下流程:
- A 生成一次性 SM4 会话密钥 K,使用 SM4-GCM 加密文件,得到密文 C 和认证标签 T。
- A 用 B 的 SM2 公钥加密 K,得到密钥密文 EK。
- A 对“C + T + EK”计算 SM3 摘要,再用自己的 SM2 私钥签名,得到签名 S。
- A 将 EK、C、T、S 以及自己的 SM2 公钥证书一起发送给 B。
- B 先验证证书,再用 A 的公钥验签,确认数据来源和完整性。
- B 用自己的 SM2 私钥解密 EK 得到 K,再用 K 解密 C 并校验 T。
这个流程同时满足机密性、完整性、身份认证和不可否认性。工程实现时,K 必须每次随机生成,不能复用;GCM 的 nonce 不能重复;签名前要明确对哪些字段拼接后做摘要,避免歧义。
四、密钥管理:最容易被低估的环节
密钥管理贯穿生成、存储、分发、使用、轮换、销毁六个阶段。工程上最常见的失败不是算法被攻破,而是密钥硬编码在代码里、私钥明文放在配置文件中、会话密钥长期不换、离职人员仍持有密钥。
建议的工程约束包括:SM2 私钥必须存放在 HSM 或密码机中,至少要用口令加密保护;对称密钥使用 KEK 分层保护,KEK 本身由硬件保护;密钥分发优先使用 SM2 加密或密钥协商,不通过明文通道;建立密钥轮换周期,例如会话密钥每次会话更换、数据密钥按季度轮换;销毁时覆盖存储介质并保留审计日志。
只有把算法原理、组合方式和密钥生命周期约束放在一起设计,国密应用才具备真正的工程安全性。