1. 国密算法概述

各位同学好,我是老周。做嵌入式安全这行十几年了,今天咱们聊聊国密算法。说实话,我刚入行那会儿,国内基本都在用国际算法——RSA、AES、ECC这些。直到2010年以后,国家密码管理局陆续发布了SM系列标准,情况才开始变化。

我个人习惯把国密算法看作一套「自主可控的密码工具箱」。为什么这么说?你想想看,从底层数学原理到上层接口规范,全部是我们自己定义的。这在某些关键领域——比如金融、政务、电力——是硬性合规要求。

核心观点:国密不是「重新发明轮子」,而是在国际密码学成果基础上,结合国内安全需求和合规要求,形成的一套完整密码标准体系。

1.1 国密标准体系介绍

国密标准目前覆盖了密码学的主要领域。我按功能分类给大家梳理一下:

算法 类型 密钥长度 主要用途 对标国际算法
SM2 椭圆曲线公钥密码 256位 密钥交换、数字签名、加密 ECC / RSA
SM3 密码杂凑(哈希) 256位输出 完整性校验、数字摘要 SHA-256
SM4 分组对称密码 128位 数据加密/解密 AES
SM9 基于标识的密码 256位 无证书加密、签名 IBC(Identity-Based Cryptography)

嗯,这里要注意——SM2和SM9虽然都基于椭圆曲线,但底层数学结构不同。SM2用的是标准椭圆曲线群,SM9用的是双线性对(Weil对/Tate对)。我在项目中遇到过有人把SM2和SM9的密钥混用,结果签名验证死活过不了。所以这两个算法不能互换。

SM2:国密的主力公钥算法

SM2基于椭圆曲线离散对数难题,曲线参数是国密局定义的256位素域曲线。我个人觉得SM2的设计很务实——它同时支持加密、签名和密钥交换三种功能,一套密钥对就能搞定。

举个例子,SM2签名算法中有一个关键步骤:生成随机数k,计算椭圆曲线点(x1, y1) = kG,然后r = (e + x1) mod n。这个流程跟ECDSA类似,但细节上有差异。我曾经在移植SM2到ARM Cortex-M4平台时,发现随机数生成器质量不够,导致签名重复——嗯,这是个坑,后面章节会详细讲。

SM3:国密哈希标准

SM3输出256位摘要,结构上类似SHA-256,但消息扩展和压缩函数不同。SM3的压缩函数有64轮迭代,比SHA-256的64轮更复杂一些。从安全强度看,SM3的256位输出提供128位抗碰撞安全级别,跟SHA-256持平。

个人经验:SM3在嵌入式平台上的性能表现不错。我在STM32F4上做过测试,SM3的吞吐量大约能达到SHA-256的80%~90%。对于大多数固件完整性校验场景,这个性能完全够用。

SM4:国密对称加密

SM4是分组密码,分组长度128位,密钥长度128位。结构上采用32轮非线性迭代,每轮使用一个32位轮密钥。说白了,SM4的设计思路跟AES不同——AES是SPN结构,SM4是Feistel网络结构。

我记得有一次帮客户做物联网网关的加密模块,他们原本用AES-128-CBC,要换成SM4-CBC。算法替换本身不难,但IV管理和填充方式必须对齐。SM4的PKCS7填充跟AES完全一样,这点倒是省了不少事。

SM9:基于标识的密码

SM9是国密体系中比较「年轻」的算法,2016年才发布标准。它的最大特点是不需要数字证书——直接用用户的标识(比如邮箱、手机号、设备ID)作为公钥。这在物联网场景下特别有用,省去了证书管理的开销。

但SM9的代价是计算量大。双线性对运算比普通椭圆曲线点乘慢一个数量级。我在项目中测试过,SM9签名验证在Cortex-A7上大约需要15ms,而SM2只需要2ms。所以SM9适合低频次、高安全要求的场景,不适合高频数据加密。

1.2 国密与国际算法的对比

很多同学问我:「国密比国际算法安全吗?」我的回答是:从数学基础上看,两者处于同一安全级别。256位SM2的安全强度相当于3072位RSA,也相当于256位ECC。但安全不等同于实现安全——算法实现的质量、密钥管理的严谨性,往往比算法本身更重要。

我整理了一个对比表,方便大家理解:

对比维度 国密算法 国际算法 我的评价
数学基础 椭圆曲线、双线性对 大整数分解、椭圆曲线 同级别
密钥长度 SM2: 256位 RSA: 2048/3072位 SM2更高效
性能 SM4: 约300MB/s (软件) AES: 约500MB/s (软件) AES略快,但差距不大
生态成熟度 中等,工具链在完善 成熟,OpenSSL等广泛支持 国际算法更成熟
合规性 国内强制要求 国际通用 看应用场景

避坑指南:我曾经在一个项目中,客户要求「国密合规」,但他们的硬件加密引擎只支持AES。后来我们不得不在软件层实现SM4,性能损失了约40%。所以选型阶段就要确认硬件是否支持国密算法,否则后面会很被动。

1.3 国密算法的应用场景与合规要求

国密算法的应用场景,说白了就两类:合规驱动和安全驱动。

合规驱动场景:

  • 金融IC卡、POS机、ATM
  • 政务信息系统、电子政务外网
  • 电力调度系统、智能电表
  • 社保、医保信息系统
  • 网络安全等级保护三级及以上系统

安全驱动场景:

  • 物联网设备固件安全更新
  • 车联网V2X通信
  • 工业控制系统加密传输
  • 移动支付安全模块

合规要求这块,我建议大家关注几个关键文件:

  1. 《中华人民共和国密码法》——2019年发布,明确了商用密码的合规要求
  2. GM/T 系列标准——国密算法的具体技术规范
  3. 等保2.0——三级及以上系统要求使用国密算法
  4. 金融行业标准——JR/T 系列,金融领域必须使用国密

我在做固件保护方案时,经常遇到一个问题:客户说「我们要国密合规」,但具体合规到什么程度?是算法层面合规,还是整个密码系统合规?这里有个关键点——算法合规不等于系统合规。你用了SM4加密,但密钥存储不安全,照样过不了合规审查。

建议:做国密方案时,从一开始就考虑密钥生命周期管理——生成、分发、存储、使用、销毁,每个环节都要有安全措施。我在一个项目中吃过亏,SM2私钥直接明文存在Flash里,审查时直接被打了回来。后来改用安全芯片存储私钥,才通过审查。

1.4 国密算法知识体系总览

下面这张图是我自己整理的国密算法知识体系,涵盖了算法分类、应用场景和合规要求。大家先有个整体印象,后面章节会逐一深入。

国密算法知识体系总览 国密标准体系 SM2 公钥密码 SM3 哈希算法 SM4 对称加密 SM9 标识密码 数字签名 密钥交换 公钥加密 完整性校验 数字摘要 消息认证 数据加密 数据解密 CBC/CTR/GCM 无证书加密 标识签名 密钥协商 应用场景:金融IC卡 / 政务系统 / 物联网 / 车联网 / 工业控制 合规要求:密码法 / GM/T标准 / 等保2.0 / 金融行业标准 实施要点:密钥管理 / 硬件加速 / 性能优化 / 安全审计 说明:本课程将按照「算法原理 → 实现细节 → 应用实战 → 合规审查」的路径逐步展开

这张图把国密算法的知识体系分成了六个层次。从顶层的标准体系,到底层的实施要点,每一层都有对应的课程章节。我个人建议初学者先掌握SM2和SM4,这两个是国密方案中最常用的算法。SM3相对简单,可以穿插着学。SM9比较特殊,建议在理解SM2之后再接触。

好了,第一章的内容就到这里。国密算法不是洪水猛兽,说白了就是一套有中国特色的密码工具箱。后面我们会一步步深入每个算法的实现细节,以及在固件保护中的具体应用。大家先把基础概念理清楚,后面实战才不会懵。