国密算法概述
我第一次接触国密算法,是在一个金融项目里。当时客户要求必须用国密替换掉国际算法。说实话,当时我心里也没底。但干下来发现,其实国密和主流国际算法在原理上有很多相通之处。搞懂了它,你就掌握了整个密钥边界集成的入场券。
国密算法背景
国密算法,全称是中国商用密码算法。是国家密码管理局发布的。一组标准算法。
说白了,就是我们国家自己设计的密码标准。为什么要搞这套?因为密码这东西太敏感了。用别人的算法,心里总是不踏实。尤其是涉及政务、金融、能源这些关键领域。
我记得2010年左右,有些银行还在用3DES。后来监管要求逐渐明确,国密成了硬性门槛。嗯,这就是我们这一章要讲的大背景。
核心驱动力:合规性 + 自主可控。你想想看,如果不吃透国密,将来系统过审都是问题。
我的视角:为什么国密对你我都很重要
很多同行觉得,国密不过是换了个数学曲线。这话对,也不对。对的是,它确实基于标准数学难题。不对的是,它的实现细节、接口习惯、管理模式,和我们熟悉的OpenSSL那一套差别还是挺大的。
举个例子。我在项目中遇到过一种情况:团队习惯了直接调用OpenSSL的RSA接口。换成SM2后,发现签名和验签的输入输出格式完全不一样。结果呢?联调拖了两周。所以,理解国密不是背标准号,而是理解它怎么“说话”。
SM2 / SM3 / SM4 简介
国密体系里,有三个主角。你只要记住这三兄弟,其他都是衍生。它们是:
| 算法 | 类型 | 密钥长度 | 一句话用途 |
|---|---|---|---|
| SM2 | 非对称 | 256 位 | 签名、密钥交换、加密 |
| SM3 | 哈希 | 256 位输出 | 完整性验证、消息摘要 |
| SM4 | 对称 | 128 位 | 数据加解密 |
SM2:非对称的,用来签名的。我个人习惯把它类比成ECDSA,但曲线不一样。SM2用的是国家密码局指定的sm2p256v1曲线。在项目中测试SM2签名速度时,我注意到它比RSA2048快不少,但比ECCP256稍微慢一点点。这个差异在密钥边界集成时,会影响你的并发设计。
SM3:哈希算法。输出256位摘要。它和SHA-256类似,但防碰撞性设计得更激进。嗯,这里要注意:SM3的填充方式和SHA-256有细微差别。我曾经遇到过一个坑:两个系统用SM3做哈希校验,因为填充方式理解不一致,导致结果对不上。排查了半天才发现是标准版本没对齐。
SM4:对称加密。分组密码,密钥和分组长度都是128位。它和AES的设计思路差不多,但S盒、密钥扩展算法都不一样。说白了,你只要会用AES,学SM4上手很快。但底层替换时,千万别直接复制AES的代码。
避坑指南: 我曾经在一个低功耗设备上移植SM4。发现如果不优化S盒查表的话,速度会慢到不可接受。所以建议做嵌入式集成时,优先考虑查表法,而不是逐位计算。
国密标准体系归纳
光知道算法还不够。你得知道标准是怎么组织的。我习惯把国密标准分成三层:算法标准、接口标准、应用标准。
- 算法层:GM/T 0003 (SM2)、GM/T 0004 (SM3)、GM/T 0002 (SM4)。定义了数学原理和基础运算。
- 接口层:GM/T 0016 (SM2密码设备接口)、GM/T 0018 (异构密码设备接口)。定义了API怎么调。这一层在密钥边界集成中最常用。
- 应用层:GM/T 0028 (TLS协议改用国密)、GM/T 0022 (IPsec VPN国密扩展)。告诉你怎么在协议里用。
为什么这个归纳对你很重要?因为你在做密钥边界适配时,往往不需要动算法层。主要工作集中在接口层和应用层。你只需要把API的输入输出映射好,就成功了70%。
警告: 不要以为看懂了SM2的数学公式,就能写出合规的签名接口。国家密码局发布的算法标准和接口标准是两个不同的文档。接口标准里规定了数据格式、字节序、错误码。我曾经见过一个团队,直接把OpenSSL的SM2代码移植过来,没适配GM/T 0016的接口规范。结果呢?验收时被直接退回。所以,一定要对标准。
好了,回顾一下。这一章我们聊了国密的背景、三兄弟(SM2、SM3、SM4),还有标准的分层体系。接下来,我们用一张图把整个知识框架串起来。
这张图展示的是:国密的底层算法(SM2/SM3/SM4)支撑着不同层次的标准。而标准又直接决定了你的集成工作怎么做。说白了,你不需要把所有细节都背下来。但你必须知道:用什么算法?参照哪个标准?对接哪种应用场景?这些搞清楚了,密钥边界集成的大方向就不会错。