第1章 国密算法概述与标准背景
说起国密算法,我刚开始做安全接口时也一头雾水。后来被项目逼着啃了几个月标准文档,才算摸到门道。这一章我们先梳理清楚:国密到底是什么?标准从哪来?跟国际算法比有啥不一样?
1.1 国密算法的定义与定位
国密算法,全称是国家商用密码算法。说白了,就是国家密码管理局制定的一套密码标准。我习惯把它们理解为“数字世界的手铐和脚镣”——给敏感数据上了道国家级的锁。
它的核心地位体现在三个方面:
- 合规性:金融、政务、医疗等关键行业,不用国密等于踩红线。
- 自主可控:不依赖国外的OpenSSL、Crypto++,所有算法自己说了算。
- 安全性:对标国际标准,部分参数甚至更激进(比如SM2的密钥长度)。
嗯,这里要注意:国密算法不是某个单一算法,而是一套体系。它覆盖了从对称加密、非对称加密到哈希摘要的完整链路。我在项目中对接银行接口时,对方要求SM2签名、SM4加密、SM3完整性校验,三件套一个都不能少。
1.2 标准体系与主要机构
国密的标准号大家肯定见过:GM/T 0003-2012 之类。这些标准是谁制定的?
| 机构/标准 | 角色 | 我眼中的关键点 |
|---|---|---|
| 国家密码管理局 | 制定发布 | 所有国密算法的源头,官网可下载公版标准 |
| GM/T 系列 | 行业标准 | 商用密码,最常见的就是GM/T 0003/0004/0005 |
| GB/T 系列 | 国家标准 | 部分算法升级为国家标准,比如GB/T 32918 |
| OSCCA | 认证机构 | 产品必须通过它的认证才有销售资质 |
你想想看,这些标准文档动辄上百页。我最早看SM2标准时差点睡着——全是数学公式。后来我总结出个经验:先搞懂接口参数,再去啃数学原理,效率高得多。
1.3 三大核心算法概览
我们课程重点讲三个:SM2、SM3、SM4。它们各自解决了什么问题?
- SM2(非对称加密/签名):对标RSA和ECDSA,但密钥长度更短,性能更好。我在对接某政务平台时,SM2签名速度比RSA 2048快了近一倍。
- SM3(密码杂凑):对标SHA-256,输出256位摘要。它的设计有个特点:对长度扩展攻击有天然免疫力。我以前做密码评测时测试过,SM3的雪崩效应比SHA-256还略强一点。
- SM4(对称加密):对标AES,分组128位,密钥128位。国内芯片大多原生支持SM4指令集,跑起来跟AES-128差不多快。
为什么不用国际算法?说实话,在非监管场景下,AES+RSA组合也很成熟。但国密有个优势:SM2的签名效率是RSA的3-5倍,这在IoT设备上非常实用。
1.4 国密算法发展历程
我个人梳理了一个时间线,方便大家理解它们的成熟度:
| 阶段 | 时间 | 标志事件 | 我的感受 |
|---|---|---|---|
| 起步期 | 2006-2010 | SM3/SM4发布,但几乎没人用 | 我那时还没入行,听说只有军工在用 |
| 推广期 | 2012-2016 | SM2标准发布,GM/T系列完善 | 开始有银行试点,但都是“双栈”部署(同时支持国密和国际) |
| 强制期 | 2017-2020 | 《密码法》出台,等保2.0要求国密 | 我亲历的项目从“可不用”变成“必须用” |
| 成熟期 | 2021-至今 | 国际标准采纳(ISO/IEC),国产芯片原生支持 | 现在我做新系统,默认选国密,性能和兼容性都不成问题 |
1.5 核心算法参数对比
做接口集成最头疼的是参数对齐。我整理了一张对比表,大家直接存下:
| 参数 | SM2 | SM3 | SM4 | 备注 |
|---|---|---|---|---|
| 算法类型 | 椭圆曲线非对称 | 哈希摘要 | 分组对称 | 各司其职 |
| 密钥长度(位) | 256(私钥) | 无(不可逆) | 128(固定) | SM2私钥是256,公钥是xy坐标对 |
| 输出长度(位) | 签名/加密输出长度可变 | 256 | 128(分组) | SM3的摘要固定32字节 |
| 国际对标 | ECDSA/RSA | SHA-256 | AES | 性能接近,但曲线参数不同 |
| 椭圆曲线 | sm2p256v1 | — | — | 国标指定了唯一曲线 |
有没有发现SM2的密钥长度是256位?但它的安全强度其实相当于RSA 3072位。说白了,椭圆曲线天生就占密钥短的优势。
1.6 典型应用场景
这三个算法在实际系统中怎么配合?我画了一张图,大家一看就明白:
典型交互流程:
- 客户端用SM4生成一个会话密钥,然后用SM2公钥加密这个SM4密钥。
- 服务端用SM2私钥解密出SM4密钥。
- 后续所有业务数据,都用SM4对称加密传输。
- 每条消息都带SM3摘要,确保数据没被篡改。
嗯,这就是所谓的“混合加密”模式。我实际做过一个支付接口:SM2做身份认证和密钥交换,SM4做报文加密,SM3做报文完整性校验。三层防护,缺一不可。
注意:SM3不是加密算法,它不能解密。有些人会误以为SM3的摘要可以还原原文——这不可能。SM3是单向函数,只做完整性验证用。
好,回到开始那个问题:国密凭什么替代国际算法?其实不是替代,而是多一个选择。但既然国家政策明确要求,我们工程师就得把它掌握扎实。后面几章,我们会一个算法一个算法地拆解。