一、国密算法概述:从一次等保测评说起

我记得2019年,我帮一家金融客户做等保三级测评。对方CTO拍着桌子说:“我们用的都是国际算法,凭什么要换?”我给他看了两个数据:一是SM2在256位密钥下安全强度已经超过RSA-2048,二是《密码法》实施后金融、政务系统必须优先采用国密。他沉默了。嗯,从那以后,我再也没听过“国密没必要”这种话。

今天这一章,咱们先把国密算法的家底捋清楚。你想想看,要理解密钥派生机制,首先得知道这些算法各自是什么脾气、怎么配合、跟国际算法比到底差在哪。

1.1 国密算法体系全景

国密算法不是单个算法,而是一整套密码工具包。我习惯把它们分成四类:

  • SM2 —— 椭圆曲线公钥密码算法。对标国际的RSA/ECDSA。用于数字签名、密钥交换、加密。
  • SM3 —— 密码杂凑算法。对标SHA-256。输出256位摘要,用于完整性校验、数字签名辅助。
  • SM4 —— 分组对称加密算法。对标AES。密钥长度128位,分组长度128位,用于数据加密。
  • SM9 —— 基于标识的密码算法。对标IBE(Identity-Based Encryption)。不需要证书,直接用用户标识做公钥。

核心认知:SM2/SM3/SM4/SM9构成了“公钥+哈希+对称+标识”的完整密码闭环。密钥派生机制(KDF)贯穿其中,尤其是SM2和SM9对KDF的依赖最深。

我在项目中遇到过不少团队,只把SM4当AES的替代品,忽略了SM2和SM3在密钥协商中的作用。结果密钥派生环节直接套用国际标准的KDF,导致互操作性出问题。这个坑,后面我会详细讲。

1.2 与国际算法的硬核对比

直接上表,咱们看干货。我整理了一份对比清单,你在做方案选型时可以直接参考:

对比维度 国密算法 国际算法 我的评价
公钥算法 SM2(256位椭圆曲线) RSA-2048 / ECDSA-P256 SM2性能优于RSA,与ECDSA持平
哈希算法 SM3(256位输出) SHA-256 结构类似,SM3在软件实现上略慢
对称加密 SM4(128位密钥) AES-128 SM4轮数32轮,AES 10轮,安全性相当
标识密码 SM9 IBE(如BF-IBE) SM9采用双线性对,国内标准更完善
密钥派生 SM2/SM9内置KDF HKDF / KDF1/KDF2 国密KDF基于SM3,国际基于SHA

避坑指南:我曾经帮一家企业做SM2签名验签适配,对方直接用OpenSSL的ECDSA代码改曲线参数就跑。结果SM2的签名数据格式(DER编码)跟ECDSA有细微差别,验签死活过不去。后来查了GMT 0003-2012标准才发现,SM2的签名值r、s顺序跟国际标准是反的。这种细节,文档里不会主动告诉你。

1.3 国密算法的典型应用场景

说白了,国密算法已经不只是“合规要求”,在很多场景下它反而是更优解。我挑三个最常见的场景说说:

  1. 金融交易系统:网银、手机银行、支付网关。SM2做签名,SM4加密交易报文,SM3做完整性校验。我参与过的某国有大行核心系统,日均交易量过亿,全栈国密跑了一年,性能损耗不到3%。
  2. 政务数据交换:电子证照、公文流转、行政审批。SM9在这里特别有用——不需要维护证书链,直接用机构代码做公钥。我记得有个省级政务平台,原来用RSA+CA,光证书管理就养了5个人。换成SM9后,运维成本直接砍半。
  3. 物联网终端认证:智能电表、车联网、工业传感器。SM2的密钥长度短(32字节),SM4的硬件实现面积小,非常适合资源受限设备。我在一个智能水表项目里,把SM2签名从软件实现改成硬件加速,单次签名耗时从120ms降到8ms。

注意:国密算法不是“换掉算法名”就完事了。SM2的密钥派生函数(KDF)在密钥协商协议中必须严格按照GMT 0003-2012实现,否则会出互操作性问题。我见过某厂商直接把ECDH的密钥派生逻辑套到SM2上,结果跟其他国密设备握手失败。这个坑,后面第5章会专门讲。

1.4 国密算法体系结构图

下面这张图是我自己画的国密算法体系结构。你可以看到,SM2和SM9在上层做密钥协商和数字签名,SM3在中间层提供哈希支撑,SM4在最底层做数据加密。密钥派生机制(KDF)是连接公钥层和对称层的桥梁。

国密算法体系结构图 应用场景:金融 / 政务 / 物联网 / 区块链 SM2 椭圆曲线公钥密码 数字签名 / 密钥交换 / 加密 SM9 标识密码算法 基于标识的签名 / 加密 / 密钥交换 SM3 密码杂凑算法 256位摘要 / 完整性校验 / KDF核心 SM4 分组对称加密算法 128位密钥 / 128位分组 / 数据加密 密钥派生机制(KDF)—— 连接公钥与对称层的桥梁 说明:SM2/SM9 密钥协商后通过 KDF 派生会话密钥,SM4 使用派生密钥加密数据

1.5 为什么密钥派生机制如此重要?

你可能会有疑问:既然SM2、SM3、SM4各自都能干活,为什么还要单独讲密钥派生?

我举个实际例子。假设你用SM2做密钥协商,双方交换临时公钥后,会计算出一个共享密钥点(x, y)。这个点是一个椭圆曲线上的坐标,不能直接当SM4的密钥用。你需要通过KDF把这个坐标“派生”成128位的对称密钥。如果KDF实现不对,哪怕SM2和SM4本身没问题,整个通信链路也是不安全的。

说白了,密钥派生机制就是密码系统的“胶水”。它把公钥层的协商结果,转化成对称层能用的密钥材料。这个转化过程如果出问题,整个密码体系就白搭了。

一句话总结:国密算法不是四个孤立的算法,而是一套协同工作的密码体系。密钥派生机制(KDF)是让它们协同工作的关键枢纽。接下来的29章,我会带你把这个枢纽的每一个齿轮都拆开看明白。