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 分组密码 ECB/CBC/GCM/CTR 应用场景 电子政务 · 金融支付 · 数据加密 物联网 · 区块链 · 零信任架构 国家标准与合规 GB/T 32918/32905/32907 等保三级 · 商密型号认证 注:实际项目中SM2/SM3/SM4经常协同工作 例如SM2密钥协商 → SM4对称加密 → SM3完整性校验

这张图想表达的核心逻辑是:SM2、SM3、SM4是底层密码原语,它们通过不同的组合方式支撑起各种应用场景,而这些场景又必须遵守国家标准的合规要求。搞清这个层次关系,你后续读规范、选接口时脑子里就不会乱。

好了,第一章我们就先建立这个全局框架。后面的课程会分别深入每个算法的数学原理、编程接口和常见坑点。记住,国密不是神秘的东西,它就是一组参数明确、接口规范的密码工具,只要你理解它们的定位,用起来比国际算法还顺手。