豪密科技第 16 期密评实操能力验证培训 - 2025/02/19 上午
有幸参加了公司安排的豪密科技第 16 期密评实操能力验证培训,本文是第五课《密评与代码分析》的培训内容。
密评对代码审查能力的要求
密评标准体系图
从《密评测评实施指引》看
- 测评方式
- 第一类:以说和看为主,例如访谈、文档审查、实地查看
- 第二类:以实操为主,例如工具测试、配置检查、代码审查、试错测试
- 第三类:以验证为主,例如
- 跟踪测试:对实际或模拟的密码保护过程进行完整跟踪,确认安全机制、调用方法/频次的正确性
- 基于密码机制的主动分析:篡改、重放、中间人攻击等
获取证据的可靠程度为:“第一类” < “第二类”或“第三类”。在所提供的第二类测评方式中,“配置检查”更适用于对合规密码产品使用;“代码审查”更适用于对开源代码库等使用,而且需要注意核实被测方所提供的静态代码与业务系统实际运行代码的一致性,例如版本信息。
第一类测评方式属于所有测评指标默认采用的方式,且不局限于现场测评使用,后文不做赘述。
第 7 章 通用测评实施指引,针对 DAK 三个维度,提出通用性的测评实施
- D:包括传输机密性/完整性,存储机密性/完整性,真实性,不可否认性——由技术测评实施(第 8 章引用),关键证据在第 8 章明确
- A:包括密码算法合规性/密码技术合规性——由密码算法合规性、密码算法安全强度、密码算法使用正确性这三类证据共同决定;对开源密码库等实现情形,还应当关注密码算法实现正确性。
- 密码算法名称
- 密码算法安全强度
- 对称算法
- 序列密码:如种子密钥长度
- 分组密码:如工作模式、密钥长度
- 非对称算法:例如,SM2/SM9 算法;私钥长度;RSA 算法;模数长度
- 杂凑算法:输出(杂凑值)长度
- 对称算法
- 密码算法使用正确性:……
- K:包括密码产品合规性/密码服务合规性/密钥管理安全性
第 8 章 技术测评实施指引,重点关注测评对象选取/颗粒度划分、测评实施的规范 + 可靠和取证结果要点的充要性
从《密评测评工具指引》看
- 对测评工具进行分类,包括密码应用安全测评工具、密码应用安全测评辅助工具、密评报告编制工具和密评项目管理工具 4 大类,并概要介绍了每类测评工具的主要功能;
- 形成测评工具体系
商用密码应用安全性评估测评工具体系
- 密码应用安全测评工具
- 密码算法校验工具
- 协议……
源代码审计工具
- 密码应用缺陷检测
- 源代码审计工具应支持检测是否使用了不安全的密码算法;
- 源代码审计工具应支持检测是否使用了不安全的随机数发生器、可预测或固定的随机数生成器种子;
- 源代码审计工具应支持检测是否使用了可预测的或固定的密钥、或基于相同口令或盐值用于密钥派生;
- 源代码审计工具应支持检测是否使用了不安全的 SSL/TLS、SSH 等协议以及不安全的配置(如未验证数字证书有效性);
- 源代码审计工具应具备……
密码应用缺陷识别
密码应用缺陷验证工具应能够辅助密评人员识别被测信息系统中的密码应用缺陷,包括但不限于不安全的密码算法、……
从能力验证看
从能力验证看图
- OFB 模式的全称是 Output-FeedBack 模式(输出反馈模式),密码算法的输出会反馈到密码算法的输入中。
- OFB 模式并不是通过密码算法对明文直接进行加密的,而是将“明文分组”与“密码算法的输出”进行 XOR 运算产生“密文分组”的
- OFB ……
SM2 签名算法图(可转换为MD格式)
总结
- 《密评测评实施指引》:提出了“代码审查”要求,DAK 均有要求,作为多个指标的“关键证据”
- 《密评测评工具指引》
- “源代码审计工具”
常见密码误用和攻击方法
- 密码应用:密码在网络空间安全防护中发挥着重要的基础支撑作用
- 设计
- 密码算法/协议
- 安全假设
- 精心设计、严谨的
- 可量化的安全强度
- 实现
- 安全防护
- 抗测信道攻击
- 正确部署
- 使用:正确使用(密钥分组工作模式、填充、IV 等等)
密钥应用缺陷/密码误用(Cryptographic Misuse):信息系统开发人员由于对密码应用缺乏技能和经验,不了解密码算法类型、协议参与方角色要求、关键参数类型等基本知识,错误调用……
……
密码误用检测原理:程序检测(静态/动态分析 + 人工审计) + 误用规则(算法安全强度+ 算法 API 参数相关)
自动化密码误用检测
分析方法 | 静态分析方法(主流) | 动态分析方法 |
---|---|---|
基本原理 | 不需要执行程序,将源代码转化为可读性更强的中间代码进行分析 | 需依赖程序执行,要在运行时,定向构造…… |
密码误用 1:与密码算法安全强度相关
规则:不得使用安全强度不足的密码算法
- 密码算法安全强度:指破解密码算法所需要的计算量大小(单位是比特 bit)
- n 比特安全强度,即攻破该密码算法需要 $2^n$ 次计算
- 类比对称密码算法的穷举攻击所需要的工作量
- 被认为是“安全的”密码算法的安全强度是动态变化的,与攻击手段、计算能力的提升相关,NIST SP 800-57(Recommendation for Key Management)……
对称密码算法和公钥密码算法的安全强度
安全强度(比特) | 对称密码算法 | 基于有限域离散对数(如 DSA,DH,MQV)L 为公钥比特长度,N 为私钥比特长度 | 基于大整数分解(RSA)k 为公钥比特长度 | 基于椭圆曲线离散对数(如 ECDSA,EdDSA,ECDH,ECMQV 等)f 为私钥比特长度 |
---|
密码杂凑算法的安全强度
安全强度(比特) | 数字签名算法等依赖抗碰撞的应用 | HMAC,KMAC,KDF,随机数生成 |
---|---|---|
≤80 | MD5,SHA-1 | |
112 | SHA-224,SHA-512/224,SHA3-224 | |
128 | SM3,SHA-256,SHA512/256,SHA3-256 | SHA-1,KMAC128 |
192 | SHA-384,SHA3-384 | SHA-224,SHA-512/224,SH3-224 |
≥256 | SHA-512,SHA3-512 | SM3,SHA-256,SHA-512/256,SHA3-384,SHA-512,SHA3-256,SHA3-384,SHA3-512,KMAC256 |
分为两种情况:
- 数字签名算法等依赖抗碰撞的应用:需要依赖抗碰撞性(强/弱抗碰撞性)
- HMAC,KMAC,KDF和随机数生成等:只需要保证 pre-image resistance 抗(第二)原像攻击(即弱抗碰撞性),不需要依赖抗碰撞的应用
密码误用 2:密码算法 API 参数误用-分组密码工作模式
分组密码工作模式
- 加密模式——机密性:GB/T 17964-2021《信息安全技术 分组密码算法的工作模式》
- 认证模式——完整性:GB/T 15852.1-2020《信息技术 安全技术 消息鉴别码 第1部分:采用分组密码的机制》
- 认证加密模式——机密性+完整性:GB/T 36624-2018《信息技术 安全技术 可鉴别的加密机制》
工作模式及其标准
工作模式 | 标准 | 内容 |
---|---|---|
加密模式 | GB/T 17964-2021《信息安全技术 分组密码算法的工作模式》 | 9 种模式:ECB、CBC、CFB、OFB、CTR、XTS、HCTB、BC、OFBNLF;3 种填充方法 |
认证模式 | GB/T 15852.1-2020《信息技术 安全技术 消息鉴别码 第1部分:采用分组密码的机制》 | …… |
认证模式 | ||
认证模式 |
对称密码算法工作模式
加密模式:ECB、CBC、CFB、OFB、CTR、XTS、HCTB、BC、OFBNLF
数据块分组数大于 1 时,不建议使用 ECB 模式
IV 值初始向量(IV)
可以公开,一般与密文一并发送,但应保持“随机性”,避免……
电码本(Electronic Code Book,ECB)模式 1.
密文分组链接(Cipher Block Chaining,CBC)模式 1.
BC(Block Chaining)分组链接模式
- 输入:
- q 个明文分组 P1P2……Pq 所组成的序列,每个分组都为 n 比特;
- 密钥 k,需要加解密操作方约定一致,长度由分组密码算法 E 决定;
- 初始向量 IV,需要加解密……
- 输入:
认证模式:CBC-MAC、CMAC、HMAC、GMAC 等
- CBC-MAC:通信双方 IV 应一致(一般为 0),且要求消息定长,否则存在长度扩展攻击
- 攻击者截获消息 M=M1||M2 及其 MAC T。构造 M’=M||(T⊕X),其最后一个块输入为 X,MAC 变为 E(K,X)。
认证加密模式:GCM、CCM
- GCM 先加密后认证 CTR+GMAC,IV 不可重用(建议实现上限制对 96 比特长度的支持)
填充(加密工作模式)
PKCS#7 填充 Padding,在 CBC 模式下可能会有 padding oracle 攻击:服务端不可明确返回密文解密后填充位是否正确的状态码,否则可以通过穷举攻击,在不获得密钥的情况下,得到密文对应的明文
已知密文、初始向量,通过遍历 IV,通过程序解密密文得到中间值,然后和初始化向量异或得到明文,然后程序再判断填充位是否正确,从而获得完整的中间值,然后中间值在和真正的初始向量 IV 异或,获得明文
不建议使用 PKCS#5Padding 填充方式:面向 64 比特分组密码算法(限制块大小固定为 64 比特,……)……
不可使用 NoPadding 方式:填充若干 0,选择密文攻击(攻击者可以在任何时候选择密文进行解密)
不建议使用 PKCS#1-v1.5 填充方式
- 存在选择明文攻击的安全漏洞(攻击者可以选择明文,并获得相应的密文)
- 加密使用 RSAES-OE……
- ……
攻击模型
- 唯密文攻击 COA(Ciphertext-only Attack):攻击者仅拥有密文,无法获得任何明文信息,试图通过分析密文的模式和结构来推测出明文或密钥。
- 已知明文攻击
公钥密码算法-签名
- ECDSA 和 SM2 算法签名过程中使用的随机值 k 需要保护(临时私钥)
- DH、ECDH、MQV、ECMQV 和 SM2 的密钥交换协议中双方随机生成的随机值 k 需要保护
协同数字签名安全要求
- 边界
- 协同数字签名……
密码杂凑算法
口令存储,盐值:不可不使用也不可重用盐值
当密码杂凑算法用于计算杂凑值、消息摘要值时,输入……
C/S 通信
不可使用不安全的协议:如 SSL2.0/SSL3.0/TLS1.0/SSH1.0
密钥交换前未进行身份鉴别:SM2/MQV 密钥交换、隐式身份鉴别
POODLE:POOLE(Padding Oracle On Downgraded Legacy Encryption)漏洞是一种在 SSL 3.0 协议中发现的加密漏洞,主要影响使用块加密模式的加密模式,特别是 CBC 模式,攻击者可中间人攻击窃取加密通信中的敏感数据
DROWN:DROWN 攻击(Decrypting RSA using Obsolete and Weakened encryption)是一种 SSLv2 的攻击,通过弱化的加密实现破解 RSA 密钥
BEAST:BEAST 攻击(Browser Exploit ……
证书管理
- 证书有效性验证缺失/不正确
- 信任任何证书
- 不验证证书有效期、关键扩展项、Hostnames 等
- CRL/OCSP 等获取证书撤销信息低效(自建根 CA 证书签发的证书大多没有配置撤销方式)
- 错误使用终端……
随机数/密钥派生
- 密钥不可硬编码,不可使用可预测的密钥
- 不可使用熵不足的随机数发生器
- 种子:不可使用静态/可预测的 seed
- 对于 PBKDF,用于派生……
需要保密的变量及可公开的变量
算法类型 | 密钥算法 | 密钥 | 中间计算结果 | 算法产生的密钥和其它数据 | 可公开的变量 |
---|
从网络与系统安全角度看密码应用安全技术
- 使用合适的密码算法、工作模式和密码协议
- 维护合理的密钥参数
- 产生安全的随机数
- 以正确的方式实现和使用密码协议
- 绑定密钥与实体
- 确保密钥安全
- 实施密码计算的使用控制
超过三分之一的漏洞位于 SSL/TLS 协议的实现中 48.4% 的 C 和 C++ 编写的库中的漏洞主要是由内存安全问题引起或加剧的,这表明系统级的错误是这些系统中安全问题的重要来源。——《ASIACCS2024-Cryptography in the Wild-An Empirical Analysis of ……》
维护合理的密钥参数——GM/Y 5006-2024《信息系统密钥生命周期选取研究》
产生安全的随机数
真的随机、不可预测——面临各种挑战(大量非合规的密码产品/含密产品)
……
以正确的方式实现和使用密码协议——密码协议的安全假设,是否得到满足?
绑定密钥与实体
- 正确地获取通信方的密钥——基于 PKI 数字证书
- 未经检测的、非专业的密码软件包
- 大量 SSL/TLS 软件没有正确地
确保密钥安全——在计算机系统上,面临各种攻击
- 物理攻击
- 冷启动攻击
- 直接内存访问(DMA)攻击
- CPU 硬件漏洞
密码软件实现——密钥数据
常见不安全代码举例
分组密码算法
分组密码算法图
GM/T 0091-2020《基于口令的密钥派生规范》
密码杂凑函数
一般来说,密码杂凑算法具有如下性质:
- 抗原像攻击(单向性):即给定杂凑值 h,找到消息使得……
如何在密评过程中加强密码误用检测?
- 掌握常见密码算法……