1. 国密算法概述:SM2/SM3/SM4的诞生与定位
各位工程师朋友,咱们今天开始聊国密。我最早接触国密是在2018年,当时一个政务云项目要求必须用SM系列替代RSA和AES。说实话,一开始挺慌的——文档少、库不成熟、踩坑一个接一个。但真正上手后你会发现,国密的设计思路其实很扎实。
国密,全称“国家商用密码算法”,是由国家密码管理局发布的自主可控密码标准。目前最核心的三个算法是:SM2(公钥密码)、SM3(密码杂凑)和SM4(分组密码)。它们分别对标国际上的RSA/ECC、SHA-256和AES。
一句话记牢:SM2搞签名和密钥交换,SM3搞完整性校验,SM4搞数据加密。三者结合,能覆盖绝大多数安全场景。
1.1 SM2——椭圆曲线公钥密码算法
SM2基于椭圆曲线(ECC),但和国际上常用的secp256k1不同,它使用一条自定义的256位曲线。我个人习惯把它看作“中国版的ECDSA + ECDH”。
- 核心功能:数字签名、密钥协商、公钥加密
- 密钥长度:公钥约64字节(未压缩),私钥32字节
- 性能特点:签名速度比RSA-2048快2-3倍,但验签稍慢
我在项目中遇到过一个高频交易系统的签名瓶颈。当时把RSA换成了SM2,CPU占用直接下降40%。但注意:SM2的验签计算量较大,如果接收方是嵌入式设备,需要做性能测试。
应用场景包括:电子政务中的数字证书(如国密SM2证书)、金融支付中的交易签名、物联网设备身份认证。说白了,只要涉及“谁签发的”和“密钥商量”,SM2就派上用场。
1.2 SM3——密码杂凑算法
SM3输出256位杂凑值,对标SHA-256。它的压缩函数采用了更复杂的布尔函数和置换,安全性经过大量分析验证。
你想想看,SM3和SHA-256有什么区别?从碰撞抵抗性上讲,目前两者都没有公开的有效攻击。但我建议在国密合规项目中无条件选择SM3,因为直接用SHA-256会导致等保测评扣分。
- 输出长度:256位(32字节)
- 典型用途:消息摘要、数字签名中的摘要生成、随机数生成
- 性能:软件实现比SHA-256慢约15%,硬件实现差距更小
我曾经犯过一个错:在SM2签名时误用了SHA-256做摘要,结果验签一直失败。后来才发现国密规范明确要求SM2签名必须搭配SM3。记住:SM2 + SM3是官方CP,不能拆散。
1.3 SM4——分组密码算法
SM4是一种Feistel结构的分组密码,分组长度128位,密钥长度128位。它比AES更“轻”一点,轮数32轮,硬件实现面积更小。
| 特性 | SM4 | AES-128 |
|---|---|---|
| 分组长度 | 128 bit | 128 bit |
| 密钥长度 | 128 bit | 128 bit |
| 轮数 | 32 | 10 |
| S盒大小 | 8×8 | 8×8(AES) |
| 轮结构 | Feistel | SPN |
SM4的应用面很广:数据库加密、文件加密、SSL VPN中的对称加密部分。我最常碰到的场景是日志存储加密——用SM4的CBC模式,IV随机生成,密钥从SM2协商得来。嗯,这里有个细节:SM4的ECB模式不建议用,和AES一样存在语义安全问题。
1.4 国家标准与合规要求
国密的标准化程度很高。下面这个表帮你快速定位核心规范:
| 算法 | 标准号 | 发布年份 | 当前版本 |
|---|---|---|---|
| SM2 | GB/T 32918.1-.5 | 2016 | 修订中(2024征求意见稿) |
| SM3 | GB/T 32905 | 2016 | 现行 |
| SM4 | GB/T 32907 | 2016 | 现行 |
除了这些国标,还有行业规范如GM/T系列(密码行业标准)。如果你做等保三级及以上系统,必须使用经国家密码管理局认证的密码模块(即“商密型号”)。
合规红线:
1. 不能自己实现国密算法,必须调用认证的密码硬件或SDK。
2. SM2数字签名必须使用SM3做摘要。
3. 对称加密优先使用SM4的GCM模式(GM/T 0083-2020)。
1.5 应用场景与配合关系
在实际项目中,三个算法通常不是单独使用,而是形成一套组合拳:
- 身份认证:SM2签名(客户端)+ SM3摘要(数据完整性)
- 数据传输:SM2密钥协商生成对称密钥,再用SM4加密数据
- 数据存储:SM2加密文件密钥(密钥封装),SM4加密文件内容
- 区块链:SM2签名交易,SM3计算哈希,SM4加密账户数据
下面这张图概括了国密三大算法在整个安全体系中的位置和作用:
这张图想表达的核心逻辑是:SM2、SM3、SM4是底层密码原语,它们通过不同的组合方式支撑起各种应用场景,而这些场景又必须遵守国家标准的合规要求。搞清这个层次关系,你后续读规范、选接口时脑子里就不会乱。
好了,第一章我们就先建立这个全局框架。后面的课程会分别深入每个算法的数学原理、编程接口和常见坑点。记住,国密不是神秘的东西,它就是一组参数明确、接口规范的密码工具,只要你理解它们的定位,用起来比国际算法还顺手。