T

constant-time-testing

作者 trailofbits

constant-time-testing 是一项实用技能,用于审计密码学代码中的时间侧信道。使用 constant-time-testing 技能检查依赖秘密数据的分支、内存访问模式和微架构行为,然后结合 Security Audit 工作流中的聚焦式 constant-time-testing 指南进行分析。

Stars5k
收藏0
评论0
收录时间2026年5月7日
分类安全审计
安装命令
npx skills add trailofbits/skills --skill constant-time-testing
编辑评分

该技能得分为 76/100,说明它是面向需要在密码学代码中进行 constant-time testing 指导的目录用户的一个可靠候选项。仓库提供了足够真实的工作流内容和领域背景,足以支持安装;但由于缺少配套脚本和安装自动化,用户需要接受一定程度的手动查找和导航。

76/100
亮点
  • 明确面向密码学代码的 constant-time testing,使用场景清晰,触发信号明确。
  • 较完整的 SKILL.md 内容包含 13 个 H2、24 个 H3 和代码块,说明它更像真实工作流而非占位文件。
  • 没有占位或实验性标记;文档包含 repo/file 引用以及多种工作流/约束信号。
注意点
  • 没有安装命令、脚本或支持文件,因此代理只能依赖 markdown 指引,而不能通过自动化执行。
  • 描述元数据非常简短,用户可能需要阅读正文才能准确判断适配度和限制。
概览

constant-time-testing 技能概览

constant-time-testing 是一项用于审计密码代码是否存在 timing side channels 的实用技能。當你需要检查 secret-dependent 分支、内存访问模式或微架构行为是否可能泄露密钥、nonce 或其他敏感值时,就该使用 constant-time-testing 技能。

谁适合使用 constant-time-testing

这项技能最适合安全审计人员、密码工程师,以及实现层密码学的代码审查者。尤其是在你已经有代码、测试 harness,或者怀疑某条热路径有问题,并且需要一份聚焦的 constant-time-testing 指南,而不是通用的安全编码清单时,它最有用。

它解决的是什么问题

真正要解决的不是“从理论上理解 timing attack”,而是“找出这段代码在 secret 变化时是否表现不同”。constant-time-testing 能帮你把这个问题转化成可重复的审查流程:识别敏感输入、检查它们影响的代码路径,并设计能够暴露泄漏的测试。

它为什么有用

它的核心价值在于足够具体。一个好的 constant-time-testing 技能应该把你引向:

  • 最关键的那几段代码,
  • 最容易泄漏的比较与查表方式,
  • 以及在判断发现是否真实之前需要的证据。

如何使用 constant-time-testing 技能

安装并打开源文件

进行 constant-time-testing 安装时,从 trailofbits/skills 添加该技能,然后先阅读 SKILL.md。如果你是在 agent 工作流中使用它,在写 prompt 之前,也要检查定义行为或约定的相邻仓库文件。

先给出合适的输入形态

这项技能在你提供具体目标时效果最好,而不是给出模糊请求。好的输入包括:

  • 要审查的仓库或文件路径,
  • 必须保持隐藏的 secret 值或 API 调用,
  • 威胁模型,例如本地攻击者、远程 timing 观察者或基准测试噪声,
  • 以及语言或平台,因为 C、Rust、assembly 和高层代码的泄漏方式不同。

一个强有力的 prompt 例如: “对 src/crypto.rs 使用 constant-time-testing,检查 verify_tag() 是否会根据 secret bytes 分支。假设攻击者是远程的,并报告可能的泄漏点、测试思路和误报。”

推荐的审查流程

一种实用的 constant-time-testing 使用方式是:

  1. 识别 secret 以及它们影响的所有代码路径。
  2. 查找分支、提前返回、表查找和变长时间原语。
  3. 测试行为是否会随 secret-dependent 输入而变化。
  4. 区分真实泄漏与编译器、运行时或测量噪声。
  5. 用具体输入、代码位置和置信度来报告结论。

先读这些,结果会更好

优先阅读 SKILL.md,然后再看仓库里关于 constant-time 检查的示例、测量脚本或策略说明。如果仓库包含多个实现目标,先读最接近你生产栈的那个,这样 constant-time-testing 指南才能和你的环境保持一致。

constant-time-testing 技能常见问题

constant-time-testing 只适用于密码库吗?

不是。只要 secret-dependent timing 可能造成影响,它都适用,包括认证检查、密钥比较、secret-bearing 格式的解析,以及协议逻辑。用于 Security Audit 的 constant-time-testing 场景,比纯密码学范围更广。

使用前一定要先搭好 benchmark 环境吗?

不一定。你可以先做静态审查和有针对性的测试,再在代码路径看起来可疑时补 timing 测量。对很多审计来说,第一步的重点是缩小可能存在泄漏的范围。

它和普通 prompt 有什么不同?

普通 prompt 往往只是泛泛询问 timing attack 的解释。constant-time-testing 更可操作:它的目标是推动你审查一个具体代码库、一个具体 secret 和一个具体威胁模型,因此通常能产出更好的审计结果。

什么情况下不该用它?

如果你需要完整的动态分析基础设施、形式化验证,或者针对特定硬件的认证,不要指望它单独完成任务。它最适合作为聚焦的审查和测试指南,而不是更深层次 assurance 方法的替代品。

如何改进 constant-time-testing 技能

把 secret 和不变量说清楚

最大的质量提升来自明确说明哪些内容必须保密、哪些行为不应变化。告诉模型哪些值是敏感的、哪些操作允许变化、哪些代码路径对安全至关重要。这样能让 constant-time-testing 技能更精准。

提供代码位置和可疑模式

如果你已经怀疑某个函数、分支或查找表,就直接指出来。比如:“检查 verify()ct_eq() 以及 src/aes.c 中的 S-box lookup。” 这样可以减少猜测,帮助输出聚焦在最高风险的泄漏路径上。

要求证据,不要只要判断

好的结果通常应包含具体测试方案:要比较的输入对、在哪里插桩、什么算泄漏,以及如何解读有噪声的测量。请明确要求这些内容,这样答案就不会只停留在“看起来是 constant-time”或“不是 constant-time”。

第一轮之后继续迭代

把第一次结果拿来收窄范围。如果它指出了某个分支,就继续要求只针对那个函数做更细的 constant-time-testing 使用检查;如果看起来干净,再去查相邻 helper、编译器影响,或仍可能泄漏的平台特定行为。

评分与评论

暂无评分
分享你的评价
登录后即可为这个技能评分并发表评论。
G
0/10000
最新评论
保存中...