在国产化信息系统、政务平台、金融系统以及网络安全设备中,经常能看到 SM2、SM3、SM4 这三个名字。它们都属于中国国家密码管理体系中的商用密码算法,但作用完全不同。
可以先记住一句话:
SM2 负责加解密和数字签名,SM3 负责计算数据摘要,SM4 负责对称加密。
更准确地说,SM2 是椭圆曲线公钥密码算法,SM3 是密码杂凑算法,SM4 是分组对称密码算法。三者配合起来,可以完成身份认证、数据完整性校验和数据机密性保护。
SM2:非对称加密,解决身份认证和密钥交换
SM2:非对称密码算法
公钥 + 私钥
基于椭圆曲线密码学(ECC),主要用于数据加密、数字签名和密钥交换。
先理解什么是非对称加密。
它与传统的对称加密不同,不是所有人共用一把密钥,而是有一对相互关联的密钥:
-
公钥(Public Key):可以公开给别人。 -
私钥(Private Key):由密钥所有者自己保管,不能随意泄露。
举个例子,张三需要向李四发送一份重要文件。
张三使用李四的公钥对文件进行加密,文件传输过程中即使被其他人截获,没有李四的私钥,也无法正常解密。
李四收到文件后,使用自己的私钥解密,就能还原原始内容。
SM2 还有一个重要用途,就是数字签名。
例如,张三发布了一份重要配置文件,可以使用自己的私钥生成数字签名,其他人拿到张三的公钥就能验证签名。
这样可以验证文件是否被篡改,以及签名是否来自对应的私钥持有者。
这里需要注意:加密和数字签名不是一回事。
加密主要解决数据机密性,数字签名主要解决身份真实性、数据完整性和不可否认性。
SM2 还支持密钥交换,通信双方可以通过协议协商出共同的会话密钥。国家密码管理局公布的 SM2 算法规范包含数字签名、密钥交换和公钥加密等部分。
SM3:密码杂凑算法,解决数据完整性校验
SM3:密码杂凑算法
单向计算
将任意长度的数据转换成固定长度的摘要,输出为 256 位,也就是 32 字节。
SM3 与 SM2、SM4 最大的区别是:它不负责加密,也不存在通过密钥解密还原原始数据的过程。
它主要用于计算数据摘要,可以把它理解成给文件生成一个数字指纹。
例如,服务器上有一个 config.yaml 配置文件,原始内容经过 SM3 计算后,会得到一串固定长度的摘要。
只要文件内容发生变化,重新计算出来的摘要通常就会完全不同。
SM3 的核心特点主要有三个:
第一,固定长度。 无论输入的是一段文字、一个配置文件,还是一个大型数据包,输出摘要都是 256 位。
第二,单向性。 理论上无法通过摘要直接还原原始数据。
第三,雪崩效应。 输入内容哪怕只改变一个比特,输出摘要也可能发生大幅变化。
在实际工作中,SM3 可以用于文件完整性校验、数字签名中的摘要计算、消息认证码等场景。
不过,有一个容易混淆的地方:单纯计算 SM3 摘要,并不能证明文件来自谁。因为攻击者如果能够修改文件,也可能同时重新计算摘要。需要身份验证时,通常还要配合 SM2 数字签名或 HMAC-SM3 等机制。
SM4:对称加密算法,解决数据机密性
SM4:分组对称密码算法
同一密钥
加密和解密使用同一把密钥,主要用于大量数据的加密保护。
前面介绍的 SM2 使用公钥和私钥,而 SM4 则采用更直接的方式:加密和解密使用同一把密钥。
例如,服务器需要保存用户的敏感数据。
系统先生成一把 SM4 密钥,使用它对数据进行加密。以后需要读取数据时,再使用对应的密钥解密。
这里最需要记住的是 SM4 的两个核心参数:
128 位相当于 16 字节。
SM4 采用分组加密结构,每次处理一个 128 位的数据块。对于超过一个分组的数据,还需要结合工作模式来处理,例如 CBC、CTR 等模式。实际应用时还需要正确处理 IV、填充以及数据完整性认证,不能只调用一个裸的加密函数就认为系统已经安全。
在企业环境中,SM4 可以应用于数据库敏感字段加密、文件加密、网络通信数据保护以及安全存储等场景。
它还有一个明显优势:在已经安全建立密钥的前提下,对称加密通常比公钥加密更适合处理大量数据。
SM2、SM3、SM4 到底有什么区别?
把前面三个算法放在一起,就比较容易理解了。
记忆起来其实很简单:
实际工作中,三个算法如何配合?
以企业服务器之间传输一份重要文件为例。
假设 A 服务器需要向 B 服务器发送一份包含业务数据的文件。
整个过程可以这样理解:
这个例子就是典型的混合密码应用。
SM2 解决密钥保护和身份认证问题,SM4 负责真正的大量数据加密,SM3 则参与摘要计算和签名等操作。
实际项目中,SM2 密钥加密与密钥协商可以根据具体协议选择,并不是每种通信场景都采用完全相同的流程。
对于网络工程师、Linux 运维人员以及安全设备管理员来说,不一定需要深入研究椭圆曲线的数学推导,但要知道这些算法在设备和系统中承担什么任务。
例如,部署支持国密算法的 SSL VPN、网关、防火墙或服务器时,可能会接触到国密证书、SM2 密钥对、SM3 摘要以及 SM4 加密套件。
尤其需要注意几个问题:
-
证书问题: 检查证书是否采用 SM2 公钥算法,证书链是否完整,信任关系是否正确。 -
密钥管理: 私钥需要妥善保存,不能直接写进代码或配置文件中。 -
算法协商: 通信双方需要支持兼容的密码套件,算法支持不代表一定能够成功建立连接。 -
加密模式: SM4 除了算法本身,还需要正确配置工作模式、IV、填充以及认证机制。 -
产品兼容性: 不能只看设备宣传支持国密,还要确认具体算法、协议和密码模块的实现是否符合要求。
这也是为什么在国产化替代、等保建设、金融信息系统以及政务信息化项目中,经常会遇到国密算法的相关要求。
建议记住这三个标准编号:
对应的国家标准编号分别是 GB/T 32918-2016、GB/T 32905-2016 和 GB/T 32907-2016。
了解这三个算法,基本就掌握了国密密码体系中最常见的三个基础角色。
SM2 管密钥与身份,SM3 管摘要,SM4 管加密。 这句话值得记下来。

