放眼全球,观察量科。这里是【全球量科观察】。
上一篇我们认识了 SM2、SM3、SM4、SM9 整套国密算法家族,很多朋友会有疑问:SM3 到底是用来干什么的?它不像 SM4 可以加密数据,也不像 SM2 直接做签名,缺了它好像也能跑通加密流程。
但在商用密码体系里,哈希(杂凑)算法是贯穿全程的底层基础。签名、验签、密钥派生、证书、密评、电子存证,几乎每一个环节都离不开它。今天我们就来读懂哈希,搞懂:商用密码场景下,摘要算法为什么不能随便更换。
Part.1
什么是密码哈希(杂凑)算法
哈希,在国密标准里叫做密码杂凑算法。 它接收任意长度的输入数据,经过固定运算,输出一段长度固定、不可逆的摘要值。 它有四个核心安全特性:
- 单向不可逆:只能从原文算出摘要,无法通过摘要反推出原始内容;
- 定长输出:无论输入是几个字、几个 G 文件,输出长度固定(SM3 输出 256bit);
- 雪崩效应:原文哪怕只改动一个字符,最终摘要值会完全不一样;
- 抗碰撞:很难找到两份不同的数据,计算后得到一模一样的摘要。
⚠️ 重点区分:哈希 ≠ 加密加密可以解密还原原文;哈希不能还原原文,它的核心能力不是保密,而是校验完整性。
举个通俗例子: 你发送一份电子合同给对方,先拿 SM3 算出摘要随同合同一起发出。对方收到文件后,重新计算摘要,如果两次摘要一致,就证明文件在传输途中没有被篡改。
Part.2
SM3 在商用密码里都用在哪
结合 GM/T 标准,SM3 哈希算法的典型落地场景:
-
SM2 数字签名:不会直接对大文件签名,而是先算 SM3 摘要,再对摘要签名,提升效率; -
证书、CRL 证书吊销列表:证书摘要、指纹依靠杂凑算法; -
密钥派生 KDF:从主密钥衍生会话密钥,需要哈希参与; -
电子存证、区块链、日志防篡改:固化证据指纹; -
消息认证、口令保护、随机数后处理。
可以说:没有 SM3,SM2 签名体系就无法正常高效使用。
Part.3
一个高频误区:SHA256 和 SM3 看起来差不多,可以随便替换?
很多系统改造的时候图省事,直接把 SHA-256 替换成 SM3,或者混用。这里要分清两件事: 从密码强度上看,SHA-256 与 SM3 输出长度相同,安全强度相近; 但是商用密码合规场景,不能随意替换。
两个核心原因:
- 合规要求:商用密码应用、密评、政务、关键信息基础设施等场景,密码算法选型需要符合 GM/T 标准。如果业务链路要求使用国密体系,签名、摘要环节必须配套国密杂凑算法 SM3,不能继续使用国外哈希算法。密评测评时,算法选型不符合要求会直接判定不符合项。
- 协议与算法绑定,替换会破坏互通:国密 SSL/TLS、国密证书、SM2 签名规范,算法套件是绑定设计的。协议套件里摘要算法、签名算法一一对应。如果私自更换摘要算法,会出现验签失败、证书解析失败、设备之间无法互通。
简单一句话:算法套件是一套组合,不是单独零件随便拆换。
Part.4
哈希算法的安全风险:碰撞的危害
哈希最怕的就是碰撞攻击:找到两份不同文档,摘要一模一样。 攻击者可以用一份合法合同、一份恶意合同,碰撞出相同摘要。一旦校验只看摘要,系统就分不清真假文件。 所以密码杂凑算法必须经过密码主管部门的安全性审查,不是随便一个哈希函数都能放到商用密码业务里。 这也是为什么 MD5、SHA1 早已被淘汰,不再允许用于安全校验和签名。
Part.5
工程落地里常见踩坑点
-
只做了 SM2 签名改造,底层摘要仍然沿用 SHA256,属于改造不彻底,密评容易扣分; -
不同组件哈希算法混用,部分接口 SM3、部分接口 SHA256,跨模块验签偶发失败; -
把哈希当成加密使用,误以为 SM3 可以加密保护隐私数据(哈希不能解密,不能当加密算法); -
自己自研哈希函数,自研杂凑算法不经过认证,存在极大安全隐患。
Part.6
本篇小结
哈希(杂凑)算法是密码体系里的 “指纹工具”,负责给数据生成唯一标识,证明数据有没有被篡改。 在国密体系中,SM3 是配套的标准杂凑算法。 它和 SM2、SM4 相互配合:SM4 加密内容、SM2 负责身份与签名、SM3 负责生成数据指纹。
记住核心结论:算法套件是配套设计,合规商用密码场景,摘要算法不能随意更换。
免责说明:本文为商用密码标准科普,内容参考 GM/T 0004 SM3 密码杂凑算法标准,仅作技术学习交流,不构成项目实施方案。
👉 下一篇预告:1.4 密码安全的基石:随机数应该怎么做
欢迎在评论区留言交流。

