第1章 国密算法概述与标准背景

说起国密算法,我刚开始做安全接口时也一头雾水。后来被项目逼着啃了几个月标准文档,才算摸到门道。这一章我们先梳理清楚:国密到底是什么?标准从哪来?跟国际算法比有啥不一样?

1.1 国密算法的定义与定位

国密算法,全称是国家商用密码算法。说白了,就是国家密码管理局制定的一套密码标准。我习惯把它们理解为“数字世界的手铐和脚镣”——给敏感数据上了道国家级的锁。

它的核心地位体现在三个方面:

  • 合规性:金融、政务、医疗等关键行业,不用国密等于踩红线。
  • 自主可控:不依赖国外的OpenSSL、Crypto++,所有算法自己说了算。
  • 安全性:对标国际标准,部分参数甚至更激进(比如SM2的密钥长度)。

嗯,这里要注意:国密算法不是某个单一算法,而是一套体系。它覆盖了从对称加密、非对称加密到哈希摘要的完整链路。我在项目中对接银行接口时,对方要求SM2签名、SM4加密、SM3完整性校验,三件套一个都不能少。

一句话总结:国密是国产密码的三件套,用来替代RSA、AES、SHA系列。

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设备上非常实用。

避坑提示:我曾踩过一个坑——SM2的密钥格式跟国际标准不一样。SM2的公钥由x和y两个256位大数组成,而RSA只有一个模数。接口对接时,记得用DER或者PEM格式,别直接传坐标字符串。

1.4 国密算法发展历程

我个人梳理了一个时间线,方便大家理解它们的成熟度:

阶段时间标志事件我的感受
起步期2006-2010SM3/SM4发布,但几乎没人用我那时还没入行,听说只有军工在用
推广期2012-2016SM2标准发布,GM/T系列完善开始有银行试点,但都是“双栈”部署(同时支持国密和国际)
强制期2017-2020《密码法》出台,等保2.0要求国密我亲历的项目从“可不用”变成“必须用”
成熟期2021-至今国际标准采纳(ISO/IEC),国产芯片原生支持现在我做新系统,默认选国密,性能和兼容性都不成问题
重要提醒:2017年是个分水岭。《密码法》生效后,商用密码产品的市场准入门槛大幅降低——从“审批制”改为“检测认证制”。

1.5 核心算法参数对比

做接口集成最头疼的是参数对齐。我整理了一张对比表,大家直接存下:

参数SM2SM3SM4备注
算法类型椭圆曲线非对称哈希摘要分组对称各司其职
密钥长度(位)256(私钥)无(不可逆)128(固定)SM2私钥是256,公钥是xy坐标对
输出长度(位)签名/加密输出长度可变256128(分组)SM3的摘要固定32字节
国际对标ECDSA/RSASHA-256AES性能接近,但曲线参数不同
椭圆曲线sm2p256v1——国标指定了唯一曲线

有没有发现SM2的密钥长度是256位?但它的安全强度其实相当于RSA 3072位。说白了,椭圆曲线天生就占密钥短的优势。

1.6 典型应用场景

这三个算法在实际系统中怎么配合?我画了一张图,大家一看就明白:

典型交互流程:

  1. 客户端用SM4生成一个会话密钥,然后用SM2公钥加密这个SM4密钥。
  2. 服务端用SM2私钥解密出SM4密钥。
  3. 后续所有业务数据,都用SM4对称加密传输。
  4. 每条消息都带SM3摘要,确保数据没被篡改。

嗯,这就是所谓的“混合加密”模式。我实际做过一个支付接口:SM2做身份认证和密钥交换,SM4做报文加密,SM3做报文完整性校验。三层防护,缺一不可。

我个人的习惯:新项目对接国密接口时,先确认密钥生命周期:谁生成密钥?怎么存储?多久换一次?很多坑都出在密钥管理上,算法本身反而很少出问题。

注意:SM3不是加密算法,它不能解密。有些人会误以为SM3的摘要可以还原原文——这不可能。SM3是单向函数,只做完整性验证用。

好,回到开始那个问题:国密凭什么替代国际算法?其实不是替代,而是多一个选择。但既然国家政策明确要求,我们工程师就得把它掌握扎实。后面几章,我们会一个算法一个算法地拆解。