文章总结: 本文系统总结商用密码应用安全性评估能力验证考试核心考点,重点解析SM4分组密码算法的七种工作模式特征、推断方法及安全风险(如CTR模式计数器重叠攻击、CBC模式PaddingOracle漏洞),详细说明SM3_HMAC正确实现方式与常见错误,强调密码算法在完整性保护中的规范应用。文档涵盖密码产品接口、密钥管理、量化评估等实操要点,为密码安全测评提供明确技术指导。 综合评分: 87 文章分类: 技术标准,解决方案,安全培训,应用安全,数据安全
商用密码应用安全性评估 — 能力验证考试考点总结
原创
利刃信安 利刃信安
利刃信安
2026年6月8日 04:04 北京
在小说阅读器读本章
去阅读
商用密码应用安全性评估 — 能力验证考试考点总结
覆盖范围:密码算法、密钥管理、密码产品接口、网络和通信安全、身份鉴别、量化评估、安全风险分析、测评实施、管理测评、物理和环境安全、设备和计算安全。
一、SM4 分组密码算法 — 七种工作模式
1.1 各模式特征对比
| 工作模式 | 确定性加密 | 明文扰动扩散 | 错误扩散 | 填充要求 | 典型考点 | | — | — | — | — | — | — | | ECB | 是 | 仅影响当前分组 | 仅当前分组 | 需要 | 密文重复→数据模式泄露 | | CBC | 否 | 当前及后续所有分组 | 当前分组+下一分组对应位 | 需要 | IV固定、Padding Oracle | | CFB | 否 | 当前及后续若干分组 | 一定长度后恢复 | 可选 | 密钥流与密文相关 | | OFB | 否 | 仅当前比特位 | 仅当前比特 | 可选 | 密钥流独立,点对点映射 | | CTR | 否 | 仅当前比特位 | 仅当前比特 | 不需要 | 计数器重叠→密钥流重用 | | BC | 否 | 类似CBC | 类似CBC | 需要 | 考察较少 | | OFBNLF | 否 | OFB非线性变体 | 类似OFB | 需要 | 考察较少 |
1.2 工作模式推断方法(核心考点)
步骤一:看密文长度是否分组整数倍(16字节)
- • 不是整数倍 → 排除 ECB、CBC、BC、OFBNLF(这些都需要填充),缩小到 CTR、CFB、OFB
- • 是整数倍 → 所有模式都可能,需进一步分析
步骤二:看密文是否有重复分组
- • 有重复密文分组 → 大概率 ECB(相同明文→相同密文)
- • 无重复 → 排除 ECB
步骤三:看明文/密文对比(对比差异扩散范围)
-
• 修改明文中某字节,观察密文变化范围:
-
• 仅对应位置变化 → OFB 或 CTR(流模式,点对点映射)
-
• 当前整个分组变化 → ECB
-
• 当前及后续分组变化 → CBC 或 CFB(链式反馈)
步骤四:看明文长度和密文长度关系
- • 明文长度 = 密文长度,且非16的整数倍 → CTR 或 OFB 或 CFB(可选不填充)
- • 密文长度 > 明文长度,且为16的整数倍 → 需要填充的模式(ECB/CBC/BC/OFBNLF)
- • 密文比明文多7字节(5593→5600)→ 暗示填充了7字节 PKCS#7
步骤五:看相同明文块的密文是否相同
- • 明文中有重复的16字节块,对应密文块也重复 → ECB
- • 明文中有重复的16字节块,对应密文块各不相同 → 非ECB(CBC/CTR等)
1.3 CTR 模式计数器重叠攻击(高频考点)
漏洞原理: 多个条目使用连续的 entryIndex 作为计数器初值,导致不同条目的计数器序列重叠,产生相同的密钥流。
攻击方法:
C1 = P1 XOR KS(密钥流)
C2 = P2 XOR KS(相同密钥流)
→ C1 XOR C2 = P1 XOR P2
→ 已知 P1 可推导 P2
关键: CTR 模式的安全前提是同一密钥下计数器永不重复。
CTR模式下密文伪造(高频考点): 在CTR/OFB等流式模式下,密钥流与明文无关,可直接修改密文:
new_ct[i] = ct[i] XOR pt[i] XOR new_pt[i]
只需知道目标字段在明文中的偏移量,即可伪造该字段的密文值,其余字段保持不变。
1.4 CBC 模式核心考点
- • IV 必须随机且不可预测,每次加密生成新 IV
- • IV 固定 → 相同明文头部分组产生相同密文
- • Padding Oracle 攻击:解密方向对端返回明确的填充错误信息(如”Padding error detected!”),攻击者可利用错误响应逐字节推断明文
- • 防御:Encrypt-then-MAC,先验证 MAC 再解密,不暴露填充校验结果;对填充错误与MAC错误返回相同的通用错误信息
1.5 SM4-ECB 模式风险判定(FAQ)
- • ECB 模式无法隐藏数据模式,相同明文分组→相同密文分组
- • 不能抵抗分组的重放、嵌入、删除等攻击
- • 超过一个分组长度的明文一般不建议使用 ECB
- • 若输入分组绝不重复且可单独/随机访问,可酌情考虑允许,但需采取风险缓解措施
二、SM3 密码杂凑算法 / SM3_HMAC
2.1 基本参数
- • SM3 输出长度:256 比特(32 字节)
- • 内部压缩函数分组大小:512 比特(64 字节)
- • SM3_HMAC 输入数据长度上限:2^64 – 512 比特
2.2 HMAC 正确实现方式
关键区分:SDF_HashInit vs SDF_HMACInit
| 接口 | 用途 | 说明 | | — | — | — | | SDF_HashInit | 普通杂凑/三步式杂凑第一步 | 不可用于 HMAC | | SDF_HMACInit | HMAC 专用初始化 | 传入密钥句柄,内部完成 ipad/opad 处理 |
错误做法: 手动调用 SDF_HashInit 搭配 ipad/opad 异或来模拟 HMAC 流程 → 不符合 GM/T 0018 规范,且容易出错
正确做法: 直接调用 SDF_HMACInit(hSessionHandle, hKeyHandle, SGD_SM3)。SDF_HMACInit 可传入的算法标识符为 SGD_SM3(0x00000001)或 SGD_SHA256(0x00000004)。
2.3 HMAC 截断风险
- • HMAC 截断输出(如截取前 2 字节,即 memcpy(hmac, full_hmac, 2))→ 安全性降为 2^16 暴力破解,完整性保护失效
- • 生日攻击仅需 2^8 次尝试即可伪造
2.4 仅使用 SM3/SHA256 做完整性保护(无密钥)
- • 仅使用 SM3(或 SHA256)做数据存储完整性保护 → 判定为不符合
- • 原因:入侵者篡改数据后,可重新计算杂凑值并覆盖,无法检测篡改
- • 应使用 HMAC-SM3、基于 SM4 的 MAC(CBC-MAC/CMAC)或数字签名方式
三、SM2 椭圆曲线公钥密码算法
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:利刃信安 利刃信安 利刃信安《商用密码应用安全性评估 — 能力验证考试考点总结》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论