Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

constant-time-analysis

暗号コードにおけるタイミングサイドチャネル脆弱性を検出します。C、C++、Go、Rust、Swift、Java、Kotlin、C#、PHP、JavaScript、TypeScript、Python、Rubyで暗号コードの実装・レビューを行う際や、秘密情報に依存した分岐・除算処理、または定数時間プログラミングに関する疑問が生じた場合に使用してください。

description の原文を見る

Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.

SKILL.md 本文

Constant-Time Analysis

暗号コードを分析し、実行時間の変動を通じてシークレットデータが漏洩する操作を検出します。

使用時機

ユーザーが暗号コードを書いている? ──yes──> このスキルを使用
         │
         no
         │
         v
ユーザーがタイミング攻撃について質問している? ──yes──> このスキルを使用
         │
         no
         │
         v
コードがシークレットキー/トークンを扱っている? ──yes──> このスキルを使用
         │
         no
         │
         v
このスキルをスキップ

具体的なトリガー:

  • ユーザーが署名、暗号化、または鍵導出を実装している
  • コードに / または % 演算子がシークレット由来の値に対して含まれている
  • ユーザーが「constant-time」「timing attack」「side-channel」「KyberSlash」に言及している
  • 関数名が signverifyencryptdecryptderive_key という関数をレビューしている

使用しない時

  • 非暗号化コード(ビジネスロジック、UI など)
  • タイミング漏洩が問題にならないパブリックデータ処理
  • シークレット、キー、認証トークンを扱わないコード
  • タイミングがライブラリで処理される高レベル API の使用

言語の選択

ファイル拡張子または言語のコンテキストに基づいて、適切なガイドを参照してください:

言語ファイル拡張子ガイド
C, C++.c, .h, .cpp, .cc, .hppreferences/compiled.md
Go.goreferences/compiled.md
Rust.rsreferences/compiled.md
Swift.swiftreferences/swift.md
Java.javareferences/vm-compiled.md
Kotlin.kt, .ktsreferences/kotlin.md
C#.csreferences/vm-compiled.md
PHP.phpreferences/php.md
JavaScript.js, .mjs, .cjsreferences/javascript.md
TypeScript.ts, .tsxreferences/javascript.md
Python.pyreferences/python.md
Ruby.rbreferences/ruby.md

クイックスタート

# サポートされている任意のファイルタイプを分析
uv run {baseDir}/ct_analyzer/analyzer.py <source_file>

# 条件付きブランチの警告を含める
uv run {baseDir}/ct_analyzer/analyzer.py --warnings <source_file>

# 特定の関数にフィルター
uv run {baseDir}/ct_analyzer/analyzer.py --func 'sign|verify' <source_file>

# CI 向け JSON 出力
uv run {baseDir}/ct_analyzer/analyzer.py --json <source_file>

ネイティブコンパイル言語のみ (C, C++, Go, Rust)

# クロスアーキテクチャテスト (推奨)
uv run {baseDir}/ct_analyzer/analyzer.py --arch x86_64 crypto.c
uv run {baseDir}/ct_analyzer/analyzer.py --arch arm64 crypto.c

# 複数の最適化レベル
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#)

# Java バイトコードを分析
uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.java

# Kotlin バイトコードを分析 (Android/JVM)
uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.kt

# C# IL を分析
uv run {baseDir}/ct_analyzer/analyzer.py CryptoUtils.cs

注記: Java、Kotlin、C# はバイトコード (JVM/CIL) にコンパイルされ、JIT コンパイルを伴う仮想マシンで実行されます。アナライザーは JIT コンパイルされたネイティブコードではなく、バイトコードを直接検査します。--arch および --opt-level フラグはこれらの言語には適用されません。

Swift (iOS/macOS)

# ネイティブアーキテクチャ向け Swift を分析
uv run {baseDir}/ct_analyzer/analyzer.py crypto.swift

# 特定のアーキテクチャ向け分析 (iOS デバイス)
uv run {baseDir}/ct_analyzer/analyzer.py --arch arm64 crypto.swift

# 異なる最適化レベルで分析
uv run {baseDir}/ct_analyzer/analyzer.py --opt-level O0 crypto.swift

注記: Swift は C/C++/Go/Rust と同様にネイティブコードにコンパイルされるため、アセンブリレベル分析を使用し、--arch および --opt-level フラグをサポートします。

前提条件

言語要件
C, C++, Go, RustPATH 内のコンパイラ (gcc/clang, go, rustc)
SwiftXcode または Swift ツールチェーン (PATH 内の swiftc)
JavaJDK (PATH 内に javac および javap)
KotlinKotlin コンパイラ (kotlinc) + JDK (PATH 内の javap)
C#.NET SDK + ilspycmd (dotnet tool install -g ilspycmd)
PHPVLD 拡張機能または OPcache 搭載 PHP
JavaScript/TypeScriptPATH 内の Node.js
PythonPATH 内の Python 3.x
Ruby--dump=insns サポート搭載 Ruby

macOS ユーザー: Homebrew は Java と .NET を「keg-only」としてインストールします。PATH に追加する必要があります:

# Java の場合 (~/.zshrc に追加)
export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"

# .NET ツールの場合 (~/.zshrc に追加)
export PATH="$HOME/.dotnet/tools:$PATH"

詳細なセットアップ手順とトラブルシューティングについては references/vm-compiled.md を参照してください。

クイックリファレンス

問題検出修正
シークレットの除算DIV, IDIV, SDIV, UDIVBarrett reduction または multiply-by-inverse
シークレットの分岐JE, JNE, BEQ, BNEConstant-time selection (cmov, bit masking)
シークレット比較早期終了 memcmpcrypto/subtle または constant-time 比較を使用
弱い RNGrand(), mt_rand, Math.random暗号セキュアな RNG を使用
シークレットによるテーブルルックアップシークレットインデックスでの配列アクセスBit-sliced lookups

結果の解釈

PASSED - 可変時間操作は検出されませんでした。

FAILED - 危険な命令が見つかりました。例:

[ERROR] SDIV
  Function: decompose_vulnerable
  Reason: SDIV has early termination optimization; execution time depends on operand values

結果の検証 (偽陽性の回避)

重要: フラグされたすべての操作が脆弱性とは限りません。このツールはデータフロー分析を行わないため、シークレットが関係しているかどうかに関わらず、潜在的に危険なすべての操作をフラグします。

フラグされた各違反について、次の質問をしてください: この操作の入力はシークレットデータに依存しているか?

  1. 関数へのシークレット入力を特定する (秘密鍵、平文、署名、トークン)

  2. フラグされた命令からデータフローを入力まで遡る

  3. 一般的な偽陽性パターン:

    // 偽陽性: 除算はシークレットではなくパブリック定数を使用
    int num_blocks = data_len / 16;  // data_len は長さであり、内容ではない
    
    // 真の陽性: 除算はシークレット由来の値を含む
    int32_t q = secret_coef / GAMMA2;  // secret_coef は秘密鍵から
    
  4. 各フラグされた項目について分析を記録する

クイックトリアージ質問

質問はいの場合いいえの場合
オペランドはコンパイル時定数か?偽陽性の可能性続行
オペランドはパブリックパラメータ (長さ、カウント) か?偽陽性の可能性続行
オペランドはキー/平文/シークレットから由来しているか?真の陽性偽陽性の可能性
攻撃者はオペランド値に影響を与えることができるか?真の陽性偽陽性の可能性

制限事項

  1. 静的分析のみ: アセンブリ/バイトコードを分析し、実行時の動作は分析しません。キャッシュタイミングやマイクロアーキテクチャ側面チャネルは検出できません。

  2. データフロー分析なし: シークレットを処理しているかどうかに関わらず、危険なすべての操作をフラグします。手動確認が必要です。

  3. コンパイラ/ランタイムの変動: 異なるコンパイラ、最適化レベル、ランタイムバージョンは異なる出力を生成する可能性があります。

現実の影響

  • KyberSlash (2023): ポスト量子 ML-KEM 実装の除算命令が鍵回復を許可
  • Lucky Thirteen (2013): CBC パディング検証のタイミング差により平文回復が可能
  • RSA タイミング攻撃: 初期実装は除算タイミングを通じて秘密鍵ビットを漏洩

参考資料

ライセンス: CC-BY-SA-4.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
trailofbits
リポジトリ
trailofbits/skills
ライセンス
CC-BY-SA-4.0
最終更新
不明

Source: https://github.com/trailofbits/skills / ライセンス: CC-BY-SA-4.0

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: trailofbits · trailofbits/skills · ライセンス: CC-BY-SA-4.0