评分明细
适用场景
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 来自 trailofbits/skills 仓库,许可证为 CC-BY-SA-4.0。商用前请确认该许可证是否满足你的需求。
参考链接
密码学侧信道的真实危害
时间侧信道听起来很学术,但在生产环境已经造成过多次真实事故。2018 年 Spectre 和 Meltdown 漏洞就是利用 CPU 推测执行的计时差异泄漏数据。RSA 密钥生成如果用了不恒定时间的代码,攻击者通过网络请求的响应时间就能反推出私钥。
恒定时间编程范式是密码学库作者的”基本功”,但很多业务开发者并不熟悉。Trail of Bits 这个 Skill 做的就是把这套规范普及给所有写加密代码的人。
进一步阅读
- Trail of Bits 博客有大量关于侧信道的文章,特别是 “Side-Channel Attacks” 标签页。
- dudect 工具(oreparaz/dudect)是学术界验证 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 联动,既防时间泄漏又防内存残留,覆盖密码学代码完整生命周期。
产品特性
本 Skill 的核心能力可归纳为以下六个维度:
-
恒定时间审计
- 扫描分支、查表、内存访问三类侧信道
- 识别密钥比较漏洞,建议
subtle::ConstantTimeEq
-
RustCrypto 指引
- 内置 AES、ChaCha20 等原语的恒定时间写法
- 覆盖 RustCrypto 生态最佳实践
-
组合漏洞检测
- 揪出”原语恒定但外层套 if”的组合漏洞
- 弥补 dudect 运行时工具盲区
-
多 Agent 兼容
- Claude Code marketplace 协议原生支持
- Codex 兼容层加载,Cursor/Windsurf 可用
-
CI 集成
- pre-commit hook + GitHub Actions
- PR 阶段拦截非恒定时间代码
-
栈清零联动
- 提示敏感数据用后清零
- 配合 zeroize-audit 覆盖完整生命周期
本文基于官方文档和公开资料整理,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 开放标准 — 技能规范
📊 评分与标签
评分说明
总分 7.1/10 · S_入选
📊 可观测社区指标(数据核验日期:2026-07-07)
- GitHub: trailofbits/skills ★6k, 🔱524
- Commits: 124 commits, 最近提交 5 days ago
- Issues/PRs: 16 open Issues · 11 open PRs
- License: CC-BY-SA-4.0 · LICENSE
📦 可安装性 2.0/2.5
git clone+cp -r skills/constant-time-analysis ~/.claude/skills/三行命令即用,或走 Claude Code Marketplace/plugin marketplace add trailofbits/skills;Trail of Bits 亲自维护 skills.sh.json 索引。扣 0.5 因为要真正跑起来还需装 Rust 1.70+/GCC/Clang,以及可选的 dudect 和 ctgrind(valgrind 扩展),非零依赖门槛- 竞品对比 1:clippy 只做静态 lint,
cargo clippy即用装机成本更低(0 额外依赖),但覆盖的是通用 Rust 反模式不专攻侧信道 - 竞品对比 2:rust-analyzer 内建规则装机成本为 0,但完全不覆盖密码学侧信道,无法作为侧信道审计替代方案
🎯 实用性 2.2/2.5
- 场景高度专精:密码学库开发者/审计人员写 verify_tag、decrypt、MAC 比较、AES 查表这类函数时最直接的辅助;强制要求把
if a == b换成subtle::ConstantTimeEq、把变长分支改成 constant-time 掩码,覆盖 CVE-2013-0169(Lucky 13)级别的真实攻击面。扣 0.3 因为受众窄——只写业务代码的开发者用不上,仅密码学/安全领域高价值- 来源:Skill 目录
- 竞品对比 1:subtle crate 单独用只提供恒定时间原语,不检查是否正确使用;Skill 是”审计员”角色,能发现”用了 subtle 但外层套了普通 if”的组合漏洞
- 竞品对比 2:dudect 是运行时统计验证,Skill 是静态审计,两者互补——先用 Skill 静态过一遍,再用 dudect 量化验证
📖 文档质量 1.5/2.0
- Trail of Bits 官方维护,README 说明 Claude Code Marketplace 安装、Codex 兼容方式、pre-commit 集成;仓库有 AGENTS.md/CLAUDE.md 双入口,124 次 commit 迭代痕迹清晰。扣 0.5 因为 Skill 内部 SKILL.md 侧重规则清单,缺少完整 before/after 代码对比章节,需读 Trail of Bits 博客补齐范例
- 来源:README
- 竞品对比 1:Anthropic 官方 Skills 有完整 examples/ 目录,Trail of Bits 版本的 examples 更侧重密码学场景
- 竞品对比 2:RustCrypto/utils 有完整 API 文档但缺少”什么时候必须用”的规则化引导,Skill 补上了这层
👥 社区活跃 0.8/1.5
- 仓库 6k Stars/524 Forks/124 Commits,Trail of Bits 品牌背书(业内头部密码学审计公司,OpenSSL/curl/pyca/Kubernetes 审计报告作者),16 Issues + 11 PRs 活跃中。扣 0.7 因为整个仓库是聚合仓(包含多个 Skill),constant-time-analysis 单个 Skill 目录 commit 密度不高,且 Skill 生态整体处于早期(Anthropic Skills 协议 2025 年才推出)⚠️
- 来源:Insights
- 竞品对比 1:vercel-labs/agent-skills ★28.7k/2.6k Forks/236 Commits,社区规模大 5 倍但面向 React/Next.js 通用性能优化受众更广
- 竞品对比 2:anthropics/skills 官方 Marketplace 刚推出社区还在起步,Trail of Bits 是最早入驻的第三方之一,在安全垂类占位领先
🔗 兼容性 0.6/1.5
- Skill 采用 Claude Code Plugin Marketplace 协议,README 明确 Codex 通过 Claude Marketplace 兼容层加载,Cursor/Windsurf 若支持 SKILL.md 协议亦可用。扣 0.9 因为分析目标语言硬绑 Rust + C,Python/Go/Java 加密项目无法直接用;且 ctgrind 只在 Linux 平台稳定运行,Windows/macOS 环境需要 WSL 或 Docker
- 竞品对比 1:semgrep-rules 支持 30+ 语言通用性强,但没有专门的 constant-time 规则集,需要用户自己写
- 竞品对比 2:CodeQL 支持 C/C++/Java/Python/JS/Go 等主流语言,但同样缺少开箱即用的侧信道查询,且需要 GitHub Advanced Security 商业授权
评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。
🏷️ 标签说明
- 免费: 仓库以 CC-BY-SA-4.0 开源,无付费墙,任意本地/CI 环境自由使用。来源:trailofbits/skills
- 安全: 唯一聚焦密码学侧信道审计的 Skill,覆盖 Lucky 13 类真实 CVE 攻击面。来源:Skill 目录
- 编程: Skill 直接介入代码编写与审计流程,与 Claude Code/Codex/Cursor 等编程 Agent 深度绑定。来源:README
📋 来源与核验记录
- ✅ 已核验:trailofbits/skills 仓库首页(★6k, 🔱524, 124 Commits)
- ✅ 已核验:constant-time-analysis 目录(页面可访问)
- ✅ 竞品链接已验证:dudect、subtle、RustCrypto 全部为主流仓库标准 URL
- ❌ 已删除死链:原文引用的
github.com/veorq/cryptocorruption为错误链接(真实 dudect 仓库为oreparaz/dudect),已全文替换 - ⚠️ 未验证:无