3. 密码算法与协议基础
密码应用安全评估的第一步,不是直接看系统“有没有加密”,而是先识别它到底用了什么算法、算法被放在什么位置、承担什么安全目标。算法识别错了,后面的合规判定、风险定级和整改建议都会偏离方向。本节围绕国产商用密码算法 SM2、SM3、SM4、SM9 与国际主流算法 RSA、ECDSA、SHA-2、AES 的对应关系,梳理评估中“看什么、怎么判、判到什么程度”的要点。
一、四类国产算法各自解决什么问题
SM2 是基于椭圆曲线密码的公钥算法,包含数字签名、密钥交换和公钥加密三类用途,对应国际算法中的 ECDSA(签名)、ECDH(密钥交换)和 ECIES(加密)。评估时要特别注意:同一个 SM2 密钥对在不同用途下的使用约束不同,签名密钥不应被复用于加密或密钥交换。SM3 是密码杂凑算法,输出 256 位摘要,对应 SHA-256,用于完整性校验、数字签名中的消息摘要和口令派生等场景。SM4 是分组密码算法,分组长度和密钥长度均为 128 位,对应 AES-128,主要用于数据加解密。SM9 是基于标识的密码算法,以用户标识(如邮箱、手机号)作为公钥,省去证书体系,适用于标识认证、密钥封装和签名等场景,国际上没有完全对等的标准化算法,评估中要单独识别其密钥管理方式。
二、评估中的算法识别方法
识别算法不能只看文档声明,要从多个层面交叉验证。第一层是配置与代码层:查看 TLS/SSL 配置中的 cipher suite、数据库加密配置、密钥库类型(如 JKS、PKCS#12 或国密 SKF)、代码中调用的密码库接口。例如 Java 中 Cipher.getInstance("SM4/CBC/PKCS5Padding") 明确使用 SM4,而 "AES/GCM/NoPadding" 则使用 AES-GCM。第二层是协议与报文层:抓取握手报文,观察签名算法标识、证书公钥算法 OID。SM2 的 OID 为 1.2.156.10197.1.301,SM3 为 1.2.156.10197.1.401,SM4 为 1.2.156.10197.1.104,这些 OID 是判定国产算法真实使用的硬证据。第三层是密钥与证书层:查看证书签名算法、密钥用法扩展、密钥长度。若证书公钥算法为 id-ecPublicKey 且曲线 OID 为 sm2p256v1,则可判定为 SM2。
三、典型判定要点与常见误区
评估中常见的误区包括:把“支持国密”等同于“默认使用国密”。很多系统同时支持 SM2 和 RSA,但实际协商结果可能仍为 RSA,必须看实际生效的算法。另一个误区是只看算法名称不看参数。SM2 签名若未使用规定的用户标识默认值或未做 Z 值计算,验签可能失败或存在兼容性问题。SM4 若使用 ECB 模式,相同明文块会产生相同密文块,泄露数据模式,评估中应判定为不安全配置。SM3 用于口令存储时,若未加盐或迭代次数过低,仍存在彩虹表攻击风险。
判定红线:MD5、SHA-1 已不具备抗碰撞能力,不得用于数字签名和完整性保护;RSA 密钥长度低于 2048 位、SM2 曲线参数非标准、SM4 使用 ECB 模式、密钥硬编码或明文存储,均应判定为高风险或不合规项。
四、国际算法对比中的等效强度判断
在评估报告中,常需要给出“国产算法是否达到同等安全强度”的结论。可按以下对应关系判断:SM2 与 ECDSA P-256 安全强度相当(约 128 位),SM3 与 SHA-256 相当(256 位输出,128 位抗碰撞强度),SM4 与 AES-128 相当(128 位密钥)。SM9 的安全强度取决于底层椭圆曲线和双线性对参数,通常按 128 位安全强度设计。评估时不能简单说“SM4 比 AES 弱”,而应说明在相同密钥长度和工作模式下,两者抗穷举攻击强度一致,差异主要在实现成熟度、侧信道防护和生态支持上。
五、评估检查清单示例
| 检查项 | 合规要求 | 判定方法 | 常见问题 |
|---|---|---|---|
| 签名算法 | SM2 或 ECDSA P-256 及以上 | 查看证书 OID、握手报文 | 仍使用 RSA-1024 或 SHA-1 |
| 摘要算法 | SM3 或 SHA-256 及以上 | 检查签名前摘要、HMAC 配置 | MD5 用于完整性校验 |
| 对称加密 | SM4 或 AES-128 及以上,CBC/GCM 模式 | 查看 cipher suite、代码接口 | ECB 模式、固定 IV |
| 密钥管理 | 密钥不出密码模块,定期更换 | 检查密钥库、HSM/SKF 调用 | 硬编码、明文配置文件 |
| 协议版本 | TLS 1.2 及以上,优先国密 TLS | 抓包查看 ClientHello/ServerHello | SSLv3、TLS 1.0 仍启用 |
实际评估时,建议先建立“算法清单—使用位置—安全目标—合规判定”四列台账,逐项核对。对于同时存在国密和国际算法的系统,要分别记录协商优先级和实际生效结果,避免被“支持国密”的声明误导。只有把算法识别、参数核查和实际生效验证三者结合,才能给出经得起复核的评估结论。