constant-time-analysis
par trailofbitsconstant-time-analysis est un skill d’audit de sécurité conçu pour repérer les risques de side-channel temporel dans le code cryptographique avant qu’ils ne deviennent des bogues exploitables. Utilisez-le pour examiner les calculs dépendants des secrets, les branches, les comparaisons et le code compilé lors de revues en C, C++, Go, Rust, Swift, Java, Kotlin, PHP, JavaScript, TypeScript, Python ou Ruby.
Ce skill obtient 84/100, ce qui en fait une bonne candidate pour les utilisateurs du répertoire qui ont besoin d’une analyse ciblée du code crypto en temps constant. Le dépôt fournit suffisamment d’indications concrètes sur les déclencheurs, la couverture linguistique et le flux d’analyse pour qu’un agent puisse l’utiliser avec moins d’hypothèses qu’avec une consigne générique, même si certaines voies spécifiques à certains langages restent un peu plus complexes à mettre en place.
- Indications explicites sur les risques temporels en cryptographie, notamment les branches dépendantes des secrets et les opérations de division/modulo sur des secrets.
- Bon niveau de détail opérationnel : guides de référence par langage, commandes concrètes pour l’analyse et sortie JSON adaptée à l’intégration CI.
- Très utile pour des agents sur plusieurs écosystèmes, avec une couverture des langages compilés ainsi que l’analyse de bytecode pour PHP, JavaScript/TypeScript, Python et Ruby.
- Aucune commande d’installation dans `SKILL.md`, donc les utilisateurs devront peut-être déduire ou gérer la configuration en dehors du skill lui-même.
- Certains workflows dépendent d’outils ou d’extensions externes comme Node.js, VLD ou des compilateurs, ce qui peut compliquer l’adoption.
Aperçu du skill constant-time-analysis
constant-time-analysis est un skill d’audit de sécurité conçu pour repérer les risques de canaux auxiliaires temporels dans du code crypto avant qu’ils ne deviennent des bugs exploitables. Il est particulièrement adapté aux ingénieurs, reviewers et agents IA qui doivent vérifier si des calculs dépendants de secrets, des branches, des comparaisons ou des instructions à l’exécution peuvent fuiter des clés, des jetons ou d’autres valeurs sensibles.
L’objectif principal n’est pas de « comprendre la théorie cryptographique », mais de « repérer à quel endroit ce code cesse d’être constant-time ». Le skill constant-time-analysis est donc surtout utile pendant les revues d’implémentation, les contrôles de sécurité avant fusion et les phases de triage d’incident, quand il faut déterminer si une fonction est sûre face aux attaques par temporisation.
Ce qui le distingue d’un prompt générique, c’est qu’il s’appuie sur les artefacts compilés et sur des chemins d’analyse propres à chaque langage, pas seulement sur l’inspection du code source. C’est important, car les problèmes de constant-time apparaissent souvent dans l’assembly, le bytecode ou les instructions de machine virtuelle, même quand le source semble inoffensif.
Quand le skill constant-time-analysis est le plus adapté pour un audit de sécurité
Utilisez ce skill lorsque vous examinez du code qui :
- gère des secrets, de l’authentification ou des primitives cryptographiques
- utilise des divisions, des modulo, des comparaisons ou des branchements sur des valeurs dérivées d’un secret
- doit être validé sur des artefacts compilés, et pas seulement selon l’intention du source
- cible C, C++, Go, Rust, Swift, Java, Kotlin, PHP, JavaScript, TypeScript, Python ou Ruby
Ce qu’il détecte et ce qu’il manque
constant-time-analysis est performant pour les schémas de fuite temporelle comme les divisions à durée variable, les branches dépendantes d’un secret et les comparaisons non sûres. En revanche, il est moins adapté aux erreurs plus larges de conception cryptographique, aux défauts de protocole ou aux fuites dues au réseau, au cache ou au bruit environnemental, sauf si ces problèmes apparaissent dans le chemin de code analysé.
Pourquoi les utilisateurs l’installent
Installez ce skill si vous voulez un workflow de revue répétable, capable de signaler un risque temporel plus tôt qu’un simple survol manuel. Si vous avez seulement besoin d’un avis ponctuel sur un extrait de code, un prompt classique peut suffire ; si vous cherchez une revue de sécurité cohérente et réutilisable, le skill apporte une vraie structure.
Comment utiliser le skill constant-time-analysis
Installez-le et déclenchez-le correctement
Passez par le chemin d’installation constant-time-analysis de votre gestionnaire de skills, puis lancez-le dans un contexte qui inclut le langage cible et la fonction ou le fichier sensible. Un bon prompt de déclenchement mentionne l’objectif crypto, les entrées secrètes et le langage/runtime, afin que le skill choisisse le bon chemin d’analyse.
Exemple de déclenchement :
- “Review
src/sign.rsfor constant-time risk. Secret input is the private key scalar; focus on division, branches, and comparisons.” - “Run constant-time-analysis on this PHP password-checking function and tell me whether any opcode-level timing leak is likely.”
Donnez-lui la bonne forme d’entrée
Le skill fonctionne mieux si vous fournissez :
- le fichier ou la fonction à inspecter
- quelles valeurs sont secrètes
- quel comportement observable par un attaquant compte
- la version du langage et du runtime cible, si vous la connaissez
Meilleure entrée :
- “Audit
verifyToken()in TypeScript. Token bytes are secret; compare against stored HMAC; check forDiv,Mod, and early-exit comparisons.” - “Analyze this Rust
reduce()routine for secret-dependent division acrossx86_64andarm64.”
Commencez par ces fichiers
Pour les décisions d’installation et le workflow, commencez par :
SKILL.mdpour les déclencheurs, le périmètre et la sélection du langageREADME.mdpour les langages pris en charge et les objectifs de sortiereferences/compiled.mdpour C/C++, Go et Rustreferences/javascript.md,references/python.md,references/php.md,references/ruby.md,references/swift.md,references/kotlin.mdpour les règles spécifiques aux VM
Si vous ne parcourez qu’un seul fichier de référence, choisissez celui qui correspond à votre chemin d’exécution plutôt qu’à l’étiquette du langage source.
Utilisez un workflow de revue, pas une passe unique
Un usage pratique du skill constant-time-analysis suit ce flux :
- identifier la fonction qui manipule le secret
- lancer le guide du langage approprié
- inspecter les divisions, modulo, comparaisons, branches ou appels d’aide suspects
- relancer après un refactoring ou un changement de compilateur/runtime
- demander une sortie compatible CI si vous voulez une vérification automatisable
C’est important, car une correction dans le source peut malgré tout être compilée en instructions non sûres, surtout dans les langages compilés.
FAQ sur le skill constant-time-analysis
Le skill constant-time-analysis est-il réservé à la cryptographie ?
Non. Il sert pour tout code où les différences de temps d’exécution sur des données secrètes comptent, mais cela concerne le plus souvent la crypto, l’authentification, la gestion de clés et la vérification de jetons. Si le code ne traite que des données publiques, ce skill est probablement inutile.
Faut-il connaître l’assembly ou le bytecode ?
Pas pour commencer. Le skill est justement utile parce qu’il vous oriente vers le bon artefact d’exécution et la bonne référence propre au langage. Vous n’avez pas besoin de lire chaque instruction, mais vous devez savoir quelle fonction ou quel fichier est sensible du point de vue sécurité.
Le skill constant-time-analysis est-il meilleur qu’un prompt normal ?
Oui, lorsque vous avez besoin d’un comportement de revue de sécurité répétable. Un prompt classique peut repérer les risques évidents, mais constant-time-analysis est plus utile pour le travail sur dépôt parce qu’il s’organise autour du choix du langage, des artefacts compilés et de schémas de fuite concrets.
Quand ne faut-il pas l’utiliser ?
Ne l’utilisez pas pour la logique métier ordinaire, l’interface utilisateur ou les transformations sur des données publiques. Évitez-le aussi lorsque la bibliothèque garantit déjà un comportement constant-time et que vous ne posez qu’une question d’usage d’API de haut niveau sans logique personnalisée dépendante de secrets.
Comment améliorer le skill constant-time-analysis
Concentrez-vous sur le secret et le modèle d’attaquant
Les meilleurs résultats de constant-time-analysis viennent d’une description précise de ce qui doit rester secret et de ce que l’attaquant peut observer. Indiquez si le risque concerne une temporisation à distance, une temporisation locale du processus ou une inspection du code compilé. Sans cela, le skill peut surinterpréter des branches sans danger ou manquer la vraie contrainte.
Fournissez le plus petit chemin de code à risque
Donnez la fonction qui touche réellement les données secrètes, pas tout le dépôt. Si le chemin inclut des helpers, ne les incluez que s’ils influencent les branches, l’arithmétique ou les comparaisons. Cela réduit le bruit et rend le résultat plus exploitable.
Demandez des preuves propres au langage
Pour de meilleurs résultats, demandez au skill de vérifier l’artefact d’exécution pertinent :
- assembly pour C/C++, Go, Rust
- bytecode pour JavaScript, TypeScript, Python, Ruby, PHP
- comportement JVM pour Kotlin
Cela améliore l’usage de constant-time-analysis, parce que les fuites temporelles apparaissent souvent sous le niveau du source.
Relancez après chaque correction
Une erreur fréquente consiste à corriger le source puis à supposer que la fuite a disparu. Re-testez après un changement d’algorithme, de flags du compilateur, de niveau d’optimisation ou de version du runtime. Pour constant-time-analysis pour un audit de sécurité, ce second passage est souvent celui qui permet de confirmer la posture de sécurité réelle.
