用途:分析代码中的时序侧信道漏洞,确保安全敏感比较使用恒定时间操作。适用于审查比较秘密(令牌、密码、MAC、签名)的代码、审计密码学实现的时序泄漏、检查认证授权代码的侧信道风险、验证分支不依赖秘密值,以及分析处理敏感数据的可变时序代码路径。不适用于非安全敏感比较(公开数据)、性能优化或无密码学背景的通用代码审查。
主要能力:识别非恒定时间比较导致的逐位信息泄漏。例如提前退出的比较会泄漏前缀匹配长度,攻击者可通过响应时间推断匹配字符数并逐字符暴力破解。资料给出各语言安全模式:Python 使用 hmac.compare_digest(provided_token, expected_token),也适用于 bytes;Node.js 使用 crypto.timingSafeEqual(Buffer.from(provided), Buffer.from(expected)); Go 使用 subtle.ConstantTimeCompare([]byte(provided), []byte(expected));Rust 使用 subtle::ConstantTimeEq 的 provided.ct_eq(&expected).into()。
检测方式:可用 grep 查找潜在不安全比较,如 grep -rn "==.*token|==.secret|==.password|==.api_key" --include=".py" --include=".js" --include=".ts" .;查找安全用法如 grep -rn "compare_digest|timingSafeEqual|ConstantTimeCompare|ct_eq" .。
风险模式:Python 的 if token == expected、JavaScript 的 if (token === expected)、Go 的 strings.Compare(a, b)、Java 的 token.equals(expected) 均存在时序泄漏;bcrypt.compare(a, b) 在资料中标注为安全(bcrypt 为恒定时间)。
除字符串比较外,时序泄漏还可能出现在:基于秘密值的条件分支(按密钥位 if/else)、使用秘密索引的数组访问(缓存时序)、验证函数中的提前返回、随存在性变化的数据库查询(用户枚举)、对秘密数据使用带回溯的正则表达式。
缓解策略:使用语言提供的恒定时间比较函数;避免基于秘密值分支;用恒定时间选择操作替代 if/else;作为最后手段添加人工延迟以归一化响应时间;对可变长度秘密采用先哈希再比较。
限制:资料未提供该技能的安装命令、运行方式、平台支持、收费或效果数据,暂未提供。