🔒 安全工具 全难度 📦 TrailOfBits

constant-time-analysis

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

📄 相关文章

📊 评分明细

📦 打包完整度
1.8 1.8 / 2.5
🎯 实用性
1.8 1.8 / 2.5
📖 文档清晰度
1.4 1.4 / 2
👥 社区影响力
1.1 1.1 / 1.5
🔗 集成度
1.1 1.1 / 1.5

🎯 适用场景

免费安全编程

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 来自 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_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 联动,既防时间泄漏又防内存残留,覆盖密码学代码完整生命周期。

产品特性

本 Skill 的核心能力可归纳为以下六个维度:

  1. 恒定时间审计

    • 扫描分支、查表、内存访问三类侧信道
    • 识别密钥比较漏洞,建议 subtle::ConstantTimeEq
  2. RustCrypto 指引

    • 内置 AES、ChaCha20 等原语的恒定时间写法
    • 覆盖 RustCrypto 生态最佳实践
  3. 组合漏洞检测

    • 揪出”原语恒定但外层套 if”的组合漏洞
    • 弥补 dudect 运行时工具盲区
  4. 多 Agent 兼容

    • Claude Code marketplace 协议原生支持
    • Codex 兼容层加载,Cursor/Windsurf 可用
  5. CI 集成

    • pre-commit hook + GitHub Actions
    • PR 阶段拦截非恒定时间代码
  6. 栈清零联动

    • 提示敏感数据用后清零
    • 配合 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 流水线。


参考资料

📊 评分与标签

评分说明

总分 7.1/10 · S_入选

📊 可观测社区指标(数据核验日期:2026-07-07)

📦 可安装性 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 因为受众窄——只写业务代码的开发者用不上,仅密码学/安全领域高价值
  • 竞品对比 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 博客补齐范例
  • 竞品对比 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 年才推出)⚠️
  • 竞品对比 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 目录(页面可访问)
  • ✅ 竞品链接已验证:dudectsubtleRustCrypto 全部为主流仓库标准 URL
  • ❌ 已删除死链:原文引用的 github.com/veorq/cryptocorruption 为错误链接(真实 dudect 仓库为 oreparaz/dudect),已全文替换
  • ⚠️ 未验证:无