
关于
分析密码学代码,检测通过执行时间差异泄露密钥数据的操作。
name: constant-time-analysis description: "分析密码学代码以检测通过执行时间变化泄露秘密数据的操作。" risk: unknown source: community
常量时间分析
分析密码学代码以检测通过执行时间变化泄露秘密数据的操作。
何时使用
User writing crypto code? ──yes──> Use this skill
│
no
│
v
User asking about timing attacks? ──yes──> Use this skill
│
no
│
v
Code handles secret keys/tokens? ──yes──> Use this skill
│
no
│
v
Skip this skill
具体触发条件:
- 用户实现签名、加密或密钥派生
- 代码包含对秘密派生值的
/或%运算符 - 用户提到"常量时间"、"时序攻击"、"侧信道"、"KyberSlash"
- 审查名为
sign、verify、encrypt、decrypt、derive_key的函数
不适用场景
- 非密码学代码(业务逻辑、UI 等)
- 时序泄露无关紧要的公开数据处理
- 不处理秘密、密钥或认证令牌的代码
- 时序由库处理的高级 API 使用
语言选择
根据文件扩展名或语言上下文,参考相应指南:
| 语言 | 文件扩展名 | 指南 |
| ---------- | --------------------------------- | -------------------------------------------------------- |
| C, C++ | .c, .h, .cpp, .cc, .hpp | references/compiled.md |
| Go | .go | references/compiled.md |
| Rust | .rs | references/compiled.md |
| Swift | .swift | references/swift.md |
| Java | .java | references/vm-compiled.md |
| Kotlin | .kt, .kts | references/kotlin.md |
| C# | .cs | references/vm-compiled.md |
| PHP | .php | references/php.md |
| JavaScript | .js, .mjs, .cjs | references/javascript.md |
| TypeScript | .ts, .tsx | references/javascript.md |
| Python | .py | references/python.md |
| Ruby | .rb | references/ruby.md |
快速开始
# Analyze any supported file type
uv run {baseDir}/ct_analyzer/analyzer.py <source_file>
# Include conditional branch warnings
uv run {baseDir}/ct_analyzer/analyzer.py --warnings <source_file>
# Filter to specific functions
uv run {baseDir}/ct_analyzer/analyzer.py --func 'sign|verify' <source_file>
# JSON output for CI
uv run {baseDir}/ct_analyzer/analyzer.py --json <source_file>
仅限原生编译语言(C、C++、Go、Rust)
# Cross-architecture testing (RECOMMENDED)
uv run {baseDir}/ct_analyzer/analyzer.py --arch x86_64 crypto.c
uv run {baseDir}/ct_analyzer/analyzer.py --arch arm64 crypto.c
# Multiple optimization levels
uv run {baseDir}/ct_analyzer/analyzer.py --opt-level O0 crypto.c
uv run {baseDir}/ct_analyzer/analyzer.py --opt-level O3 crypto.c
VM 编译语言(Java、Kotlin、C#)
# Analyze Java bytecode
uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.java
# Analyze Kotlin bytecode (Android/JVM)
uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.kt
# Analyze C# IL
uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.cs
注意:Java、Kotlin 和 C# 编译为在虚拟机上运行的字节码(JVM/CIL),带有 JIT 编译。分析器直接检查字节码,而非 JIT 编译的原生代码。--arch 和 --opt-level 标志不适用于这些语言。
Swift(iOS/macOS)
# Analyze Swift for native architecture
uv run {baseDir}/ct_analyzer/analyzer.py crypto.swift
# Analyze for specific architecture (iOS devices)
uv run {baseDir}/ct_analyzer/analyzer.py --arch arm64 crypto.swift
# Analyze with different optimization levels
uv run {baseDir}/ct_analyzer/analyzer.py --opt-level O0 crypto.swift
注意:Swift 像 C/C++/Go/Rust 一样编译为原生代码,因此使用汇编级分析并支持 --arch 和 --opt-level 标志。
前置条件
| 语言 | 要求 |
| ---------------------- | --------------------------------------------------------- |
| C, C++, Go, Rust | 编译器在 PATH 中(gcc/clang、go、rustc) |
| Swift | Xcode 或 Swift 工具链(swiftc 在 PATH 中) |
| Java | 带有 javac 和 javap 的 JDK 在 PATH 中 |
| Kotlin | Kotlin 编译器(kotlinc)+ JDK(javap)在 PATH 中 |
限制
- 仅在任务明确匹配上述描述范围时使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少所需输入、权限、安全边界或成功标准,请停下来要求澄清。
