国密算法概述
说起国密算法,我刚开始接触的时候,心里其实挺没底的。总觉得“国产”这俩字,意味着要跟国际标准对着干。后来做了几个实际项目才发现——嗯,这事儿没那么复杂。国密算法(SM系列)在效率、安全性和合规性上都有自己的独到之处。今天咱就从头捋一捋:它从哪来,用在哪儿,跟国际上那些主流算法有啥区别。
1.1 国密标准发展背景
早在2010年之前,咱们国内密码领域基本被国际算法包揽。RSA、ECC、SHA-256、AES,哪哪儿都是。但有个隐忧你想想看——金融、政务、能源这些关键基础设施,密码算法全靠外面,一旦出现后门或者被禁运,后果不敢想。
所以国家密码管理局从2009年开始陆续发布SM系列算法标准。我记得最早是SM3密码杂凑算法(GM/T 0004-2012),紧接着SM2椭圆曲线公钥密码算法(GM/T 0003-2012)和SM4分组密码算法(GM/T 0002-2012)也出来了。说白了,就是要建立一套自己的密码体系,做到可控可靠。
| 算法 | 标准号 | 发布时间 | 类型 |
|---|---|---|---|
| SM2 | GM/T 0003-2012 | 2012年 | 公钥密码(椭圆曲线) |
| SM3 | GM/T 0004-2012 | 2012年 | 密码杂凑(哈希) |
| SM4 | GM/T 0002-2012 | 2012年 | 分组密码(对称加密) |
后来这些算法被陆续纳入国际标准,比如ISO/IEC、IETF。我参与过一个跨境支付的合规审查项目,对方要求必须使用SM2做数字签名——那时候我才意识到,国密已经不只是“国内玩”,国际上也逐渐被认可了。
1.2 SM2/SM3/SM4的应用场景
搞密码算法,最怕闭门造车。我在银行、政务云、车联网项目里都见过这三兄弟,各有各的用武之地。你想想看,一个典型的安全通信链路里,至少需要密钥协商、身份认证、数据加密、完整性校验——刚好对应SM2、SM3、SM4。
- SM2:主要用于密钥交换、数字签名、证书签发。常见场景:
- 电子政务中的身份认证、公文签章
- 金融交易报文的签名验签(比如银联、网联)
- SSL/TLS国密套件里的密钥协商
- SM3:哈希算法,用于数据完整性校验、消息摘要、密码存储。典型应用:
- 区块链中的区块哈希计算(国内联盟链常用SM3)
- 数字证书中的证书哈希值
- 密码安全存储(加盐后做SM3)
- SM4:对称加密,适合大量数据的高速加解密。常见战场:
- 数据库加密(比如敏感字段透明加密)
- 网络传输层加密(IPSec、SSL记录层)
- 磁盘/文件加密(政务信息系统的存储加密)
1.3 与国际算法的对比
很多人爱问:为什么要用SM2而不用ECC?SM3和SHA-256到底谁强?我起初也纠结过这个问题。后来做了一次性能评测,发现国标算法在安全强度上不仅不输,某些方面还略有优势。聊几个关键对比:
| 功能 | 国密 | 国际主流 | 我的看法 |
|---|---|---|---|
| 密钥交换/签名 | SM2(基于椭圆曲线) | ECDSA / ECDH | SM2的曲线参数是256位素域,安全性对标P-256;但SM2签名算法是改进的,抗侧信道攻击更强。 |
| 哈希 | SM3(256位输出) | SHA-256 | SM3的结构与SHA-256类似,但消息扩展算法不同,SM3碰撞概率估计略低。我在一次等保测评里,客户要求必须用SM3,SHA-256不行。 |
| 对称加密 | SM4(128位分组) | AES-128 | SM4的轮函数与AES不同,硬件实现面积相仿,软件性能AES稍快。但SM4支持更灵活的实现,比如抗攻击的掩码设计。 |
| 密钥长度 | SM2:256位 SM3:256位 SM4:128位 | ECC:256位 SHA-256:256位 AES:128/192/256位 | 除AES支持更长密钥外,其余长度完全相同。 |
| 标准化 | 国密系列标准 | NIST / ISO标准 | 国密近几年国际认可度上升,但国内商用密码合规系统必须使用国密。 |
另一个容易被忽略的差异:SM2的签名验证速度比ECDSA略慢,因为SM2在验签时多了一次模逆运算。但实际应用中,验签通常比签名少,影响不大。我建议如果你做高频交易签名系统,可以先用SM2做密钥协商,再用SM4加密后续的大量数据——这样既满足了合规要求,性能也过得去。
从上图能直观看到,国密三兄弟各管一摊,而且在实际项目里经常组合出现。比如一个典型的国密安全通道:先用SM2完成身份认证和密钥协商,再用协商出的临时密钥做SM4加密业务数据,每条消息附带SM3校验码确保没被篡改。我去年在某个政务云平台项目里就是按这个流程做的,顺利通过了密码应用安全性评估。
关于国密算法到底安不安全,我的看法是:只要实现正确、密钥管理到位,安全性够用。SM2的曲线参数经过精心挑选,没有已知的弱曲线问题。SM3的抗碰撞性经过学术界多年检验,至今没有实际攻击。SM4的线性逼近和差分攻击分析也都比较透彻。相比国际算法,国密在国内合规性上更有优势——毕竟《密码法》和等保2.0都强制要求关键系统使用国密。
gmssl库做原型跑通,再切换到底层C/Go实现。
好了,以上就是国密算法的全景概览。知道了“为什么有国密”“每个算法干什么用”“跟国际算法比怎么样”,接下来的章节就可以掰开揉碎讲怎么封装、怎么优化、怎么应对各种现实坑了。