🔒 安全工具 全难度 📦 TrailOfBits

constant-time-analysis

检测加密代码的计时侧信道。

9.3 /10 ★★★★★
📅 2026-06-15 · 🕒 4 分钟阅读 · 最后更新 2026-06-15 · 来源: TrailOfBits · 分析测评
#cryptography#side-channel#timing
📄 相关文章

📊 评分明细

功能完备度
9.3 核心功能齐全
🎯 易用性
9 安装即用
🔧 可扩展性
9.1 声明式配置
🔗 生态协同
9.2 可链式调用
🛡️ 稳定性
9.9 CI 集成验证

🎯 适用场景

cryptographyside-channeltiming

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 项目);可选工具 dudectctgrind
  • 目标项目:一个含加密代码的 Rust/C 仓库,比如用了 aeschacha20poly1305、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 跑一下,获得量化数据。

常见踩坑

  1. 编译器优化”洗掉”了恒定时间:-O0 编译下看似恒定,-O2 后被优化成早退分支。用 ctgrindvalgrind --tool=memcheck 验证。
  2. 误用 == 比较密钥或 MAC:mem::eq 不一定恒定时间,必须用 subtle::ConstantTimeEqcrypto_secretbox_open
  3. 依赖第三方 crate 但不查其安全性:aes crate 自身是恒定时间的,但你外面包一层 if first_block { ... } 就不安全了。Skill 会揪出这类”组合漏洞”。
  4. 忽略 cache 命中差异:即使代码层面无分支,数组索引随 key 变化也会导致 cache 命中时间不同,这种深层问题需要 dudect 这类工具验证。
  5. 把”逻辑正确”等同于”安全”:密码学代码要双重检查,Skill 就是做这层检查的。
  6. 没启用栈清零:Skill 还会顺带提示敏感数据在用完后是否清零,配合 zeroize-audit Skill 使用更佳。

初级用法

  • 新增加密函数前评审:写完 verify_tagdecrypt 这类函数,跑一次 Skill 评审。
  • 代码 review checklist:把 Skill 输出整理成团队 review checklist,每次 PR 必查。
  • 学习范式:阅读 Skill 内置的 examples/ 目录,看正确/错误对比,快速建立肌肉记忆。

高级玩法

  • CI 卡门禁:把 Skill 评审 + dudect 接入 GitHub Actions,发现非恒定时间代码直接 fail PR。
  • 自建规则集:在 Skill 基础上扩展,把团队”禁用 API 列表”(如 memcmp)固化为额外检查项。
  • 配合 zeroize-audit:两个 Skill 联动,既防时间泄漏又防内存残留,覆盖密码学代码完整生命周期。

小技巧

  • Skill 给的”修复建议”里如果推荐 subtle crate,记得加 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 文件。

参考链接

密码学侧信道的真实危害

时间侧信道听起来很学术,但在生产环境已经造成过多次真实事故。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_eq crate,是 Rust 生态的标准做法。
  • 著名的攻击案例:OpenSSL 的 Lucky 13 攻击、CVE-2013-0169,都是时间侧信道漏洞。

实战建议

  1. 新增加密函数前必跑:写完 verify_tagdecrypt 这类函数,跑一次 Skill 评审。
  2. 代码 review checklist:把 Skill 输出整理成团队 review checklist,每次 PR 必查。
  3. 学习范式:阅读 Skill 内置的 examples/ 目录,看正确/错误对比,快速建立肌肉记忆。
  4. CI 卡门禁:把 Skill 评审 + dudect 接入 GitHub Actions,发现非恒定时间代码直接 fail PR。
  5. 自建规则集:在 Skill 基础上扩展,把团队”禁用 API 列表”(如 memcmp)固化为额外检查项。
  6. 配合 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 流水线。


参考资料

📦 快速安装

1 Git Clone
git clone https://github.com/trailofbits/skills.git
cp -r skills/constant-time-analysis ~/.claude/skills/