constant-time-analysis
检测加密代码的计时侧信道。
评分明细
适用场景
constant-time-analysis 快速入门
Trail of Bits 出品的密码学代码侧信道检测 Skill,帮 AI 在写加密代码时主动消除”时间差”暴露的密钥风险。
这是什么?解决什么问题?
constant-time-analysis 是 Trail of Bits skills 仓库中专门针对密码学侧信道(Side-Channel)的 Skill。它关注一个很具体的场景:即使你的加密算法逻辑上正确,只要代码执行时间随密钥/数据变化,攻击者就能通过计时差异反推出密钥。这正是 2018 年 Spectre/Meltdown 之后行业最关心的”恒定时间(Constant-Time)“编程范式。
这个 Skill 重点支持 C 与 Rust,内置了 RustCrypto 实战指引。对小白来说,它解决的是”我抄了一段 AES 代码,逻辑看着对,但时间上不安全”的尴尬。Skill 会扫描代码,提示你把分支、查表、内存访问都换成与输入无关的实现。
准备工作
- 支持 Agent:Claude Code(主推)。
- 运行环境:Rust 1.70+(分析 Rust 项目);GCC/Clang(分析 C 项目);可选工具
dudect、ctgrind。 - 目标项目:一个含加密代码的 Rust/C 仓库,比如用了
aes、chacha20poly1305、libsodium 绑定的项目。 - 理论基础:理解”时间侧信道”基本概念即可,不需要密码学博士。
3 步快速上手
第 1 步:获取 Skill
git clone https://github.com/trailofbits/skills.git
cp -r skills/constant-time-analysis ~/.claude/skills/
第 2 步:在 Claude Code 中调用
cd your-crypto-rs-project
claude
发起评审:
请用 constant-time-analysis Skill 审查 src/aes_gcm.rs,重点检查密钥比较、MAC 验证、查表访问是否恒定时间。
AI 会按 Trail of Bits 的 constant-time 编程规范逐条评估,并指出具体行号与修改建议(比如把 if a == b 换成 subtle::ConstantTimeEq)。
第 3 步:本地工具二次验证
# 用 dudect 跑统计性侧信道测试
cargo install dudect-bencher
cargo test
把 AI 给的”应该恒定时间”的函数喂给 dudect 跑一下,获得量化数据。
常见踩坑
- 编译器优化”洗掉”了恒定时间:
-O0编译下看似恒定,-O2后被优化成早退分支。用ctgrind或valgrind --tool=memcheck验证。 - 误用
==比较密钥或 MAC:mem::eq不一定恒定时间,必须用subtle::ConstantTimeEq或crypto_secretbox_open。 - 依赖第三方 crate 但不查其安全性:
aescrate 自身是恒定时间的,但你外面包一层if first_block { ... }就不安全了。Skill 会揪出这类”组合漏洞”。 - 忽略 cache 命中差异:即使代码层面无分支,数组索引随 key 变化也会导致 cache 命中时间不同,这种深层问题需要 dudect 这类工具验证。
- 把”逻辑正确”等同于”安全”:密码学代码要双重检查,Skill 就是做这层检查的。
- 没启用栈清零:Skill 还会顺带提示敏感数据在用完后是否清零,配合 zeroize-audit Skill 使用更佳。
初级用法
- 新增加密函数前评审:写完
verify_tag、decrypt这类函数,跑一次 Skill 评审。 - 代码 review checklist:把 Skill 输出整理成团队 review checklist,每次 PR 必查。
- 学习范式:阅读 Skill 内置的
examples/目录,看正确/错误对比,快速建立肌肉记忆。
高级玩法
- CI 卡门禁:把 Skill 评审 + dudect 接入 GitHub Actions,发现非恒定时间代码直接 fail PR。
- 自建规则集:在 Skill 基础上扩展,把团队”禁用 API 列表”(如
memcmp)固化为额外检查项。 - 配合 zeroize-audit:两个 Skill 联动,既防时间泄漏又防内存残留,覆盖密码学代码完整生命周期。
小技巧
- Skill 给的”修复建议”里如果推荐
subtlecrate,记得加subtle = "2"到 Cargo.toml。 - 跑 dudect 时把样本量调到 10 万以上,小样本易误判。
- 编译器开
-O2+ctgrind,比裸运行更能发现真实侧信道。 - 关注 Trail of Bits 博客的 “constant-time” 标签页,定期有新模式补充。
- 不要自己写底层 constant-time 原语,优先用经过审计的 crate(AES-GCM、ChaCha20-Poly1305)。
常见问题 FAQ
Q1: 这个 Skill 跟 constant-time-analysis 有什么关系?必须装吗?
A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。
Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?
A: constant-time-analysis 来自 TrailOfBits,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。
Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?
A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。
Q4: 怎么验证 Skill 装对了?
A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。
Q5: 这个 Skill 有许可证吗?能商用吗?
A: 取决于 constant-time-analysis 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。
参考链接
- 官方仓库:https://github.com/trailofbits/skills
- 该 Skill 目录:https://github.com/trailofbits/skills/tree/main/skills/constant-time-analysis
- Trail of Bits 博客:https://blog.trailofbits.com/
- dudect 工具:https://github.com/veorq/cryptocorruption
- RustCrypto 项目:https://github.com/RustCrypto
- subtle crate:https://github.com/dalek-cryptography/subtle
密码学侧信道的真实危害
时间侧信道听起来很学术,但在生产环境已经造成过多次真实事故。2018 年 Spectre 和 Meltdown 漏洞就是利用 CPU 推测执行的计时差异泄漏数据。RSA 密钥生成如果用了不恒定时间的代码,攻击者通过网络请求的响应时间就能反推出私钥。
恒定时间编程范式是密码学库作者的”基本功”,但很多业务开发者并不熟悉。Trail of Bits 这个 Skill 做的就是把这套规范普及给所有写加密代码的人。
进一步阅读
- Trail of Bits 博客有大量关于侧信道的文章,特别是 “Side-Channel Attacks” 标签页。
- dudect 工具(https://github.com/veorq/cryptocorruption)是学术界验证 constant-time 的标准工具,推荐集成到 CI。
- ctgrind 是 Valgrind 的扩展,能检测编译器优化带来的早退分支。
- RustCrypto 项目维护了
constant_time_eqcrate,是 Rust 生态的标准做法。 - 著名的攻击案例:OpenSSL 的 Lucky 13 攻击、CVE-2013-0169,都是时间侧信道漏洞。
实战建议
- 新增加密函数前必跑:写完
verify_tag、decrypt这类函数,跑一次 Skill 评审。 - 代码 review checklist:把 Skill 输出整理成团队 review checklist,每次 PR 必查。
- 学习范式:阅读 Skill 内置的
examples/目录,看正确/错误对比,快速建立肌肉记忆。 - CI 卡门禁:把 Skill 评审 + dudect 接入 GitHub Actions,发现非恒定时间代码直接 fail PR。
- 自建规则集:在 Skill 基础上扩展,把团队”禁用 API 列表”(如
memcmp)固化为额外检查项。 - 配合 zeroize-audit:两个 Skill 联动,既防时间泄漏又防内存残留,覆盖密码学代码完整生命周期。
本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。
constant-time-analysis Skill 多维度简评
类别:安全工具 来源:trailofbits/skills 定位:检测加密代码中的计时侧信道漏洞,验证恒定时间实现。
免责声明:本文基于官方文档和公开资料整理,未经过 MagicNetWorld 实测。
一、核心定位与价值
constant-time-analysis 是 Trail of Bits 安全公司发布的 Claude Code Skill 集合中的安全审计工具。Trail of Bits 是全球领先的区块链和系统安全审计公司,其客户包括 Uniswap、Solana、OpenZeppelin 等顶级 Web3 项目。
核心价值:跨 12 种编程语言检测加密代码中的计时侧信道漏洞。分析汇编和字节码级别的可变时间操作——如秘密依赖的分支、基于秘密的除法运算、依赖于秘密的表查找——这些操作可能通过执行时间泄露私钥材料。
Trail of Bits 的 Agent Skills 仓库(GitHub 210+ Stars,CC-BY-SA-4.0 协议)包含 14 个安全审计 Skill,涵盖代码审查、变体分析、供应链风险审计、静态分析、常量时间分析、内存清零审计、智能合约安全等专业领域。
二、核心能力清单
| 能力 | 实现方式 | 适用场景 |
|---|---|---|
| 汇编级别计时分析 | 分析编译器输出的汇编代码 | 加密库审计、TLS 实现审查 |
| 跨 12 种语言支持 | 统一的分析框架 | C/C++/Rust/Go/Python/Java 等多语言 |
| 秘密依赖分支检测 | 识别基于秘密值的条件跳转 | 对称加密、签名算法 |
| 变时除法运算检测 | 检测秘密值参与除法的模式 | 模幂运算、椭圆曲线运算 |
| 表查找泄露检测 | 识别基于秘密索引的查表操作 | AES S-Box、缓存侧信道 |
计时侧信道攻击的原理:如果加密操作的执行时间依赖于秘密数据(如私钥),攻击者通过精确测量执行时间可以反推秘密值。常见的可变时间操作包括:基于秘密值的 if/else 分支、秘密值作为数组索引、秘密值参与整数除法——这些操作在不同体系架构上的执行周期不同。
三、技术原理
3.1 侧信道分析方法
Trail of Bits 的安全研究团队使用了以下工具链:
- Dudect(Dude, is my code constant time?):通过统计分析方法检测代码是否以恒定时间执行。对同一操作在随机输入下重复执行并测量时间分布,利用统计学检验判断是否存在时间差异。
- ctgrind:基于 Valgrind 的动态分析工具,在二进制级别追踪秘密值如何影响程序的控制流和内存访问模式。
- 符号执行:在编译器中间表示(IR)级别分析程序路径,检测是否存在依赖于秘密输入的分支。
3.2 需避免的非恒定时间模式
| 危险模式 | 示例 | 原因 |
|---|---|---|
| 秘密依赖分支 | if (secret) { ... } else { ... } | 不同分支执行时间不同 |
| 秘密作为数组索引 | table[secret] | 缓存命中/未命中时间差异 |
| 秘密参与除法 | x / secret | 除法运算时间是操作数相关的 |
| 秘密依赖循环 | for (i = 0; i < secret; i++) | 循环次数决定总时间 |
3.3 实际发现案例
Trail of Bits 使用 constant-time-analysis 曾发现 RustCrypto 项目中 ML-DSA 签名实现的侧信道漏洞(2024年公开),该漏洞允许攻击者通过精确计时恢复签名私钥。
四、Trail of Bits 14 Skill 审计流程
Trail of Bits 的完整审计流程分为四阶段:
Phase 1: 自动化扫描
→ static-analysis + semgrep + codeql
Phase 2: 重点审查
→ differential-review + variant-analysis
Phase 3: 深度分析
→ constant-time-analysis / zeroize-audit / entry-point-analyzer
Phase 4: 修复验证
→ fix-review + property-based-testing
本 Skill 位于 Phase 3(深度分析阶段),专注于加密代码的计时安全性验证。
五、与其他 Skill 的协同
constant-time-analysis 在 Trail of Bits 14 Skill 集合中,与以下 Skill 关联最紧密:
- zeroize-audit:审计敏感数据的清零——确保密钥在内存中不残留
- static-analysis:预扫描阶段使用 CodeQL/Semgrep 发现潜在问题
- fix-review:验证修复是否真正解决了计时侧信道问题
六、安装与使用
# 通过 skills CLI 安装
npx skills add https://github.com/trailofbits/skills --skill constant-time-analysis
# 或手动安装
git clone https://github.com/trailofbits/skills
cp -r skills/plugins/constant-time-analysis ~/.claude/skills/
七、总结
核心价值:
- 跨 12 种语言检测计时侧信道漏洞
- 基于 Trail of Bits 多年安全审计经验沉淀
- 曾发现 RustCrypto ML-DSA 等生产级加密库的实际漏洞
适用人群:
- 安全工程师 / 密码学开发者 / 区块链安全审计师
推荐程度:⭐⭐⭐⭐⭐ —— 对于从事加密库开发和区块链安全审计的团队,强烈推荐纳入 CI 流水线。
参考资料
- trailofbits/skills GitHub 仓库 — 官方仓库
- constant-time-analysis Skill 页面(Trail of Bits) — 官方说明
- constant-time-analysis on officialskills.sh — Skill 安装页面
- Trail of Bits Blog — 安全研究博客
- Agent Skills 开放标准 — 技能规范
快速安装
git clone https://github.com/trailofbits/skills.git
cp -r skills/constant-time-analysis ~/.claude/skills/