Que fait constant-time-testing ?
La détection de code constant dans le temps (constant-time testing) détecte les canaux de temporisation dans le code cryptographique. À utiliser lors de l'audit d'implémentations cryptographiques pour les vulnérabilités temporelles.
Utilisation
Analyse de code source
Pour analyser un code source à la recherche de problèmes de temporisation, utilisez la commande suivante :
ctgrind --tool=memcheck --vgdb=no ./binaire
Vérification manuelle
- Identifiez les branches conditionnelles (
if,switch) qui dépendent de données secrètes. - Recherchez les accès mémoire indexés par des secrets.
- Vérifiez les opérations arithmétiques non constantes (multiplication, division) sur des secrets.
Outils recommandés
| Outil | Description |
|---|---|
ctgrind | Détecte les branches et accès mémoire non constants sous Valgrind |
dudect | Test statistique de temps d'exécution |
Frama-C | Analyse statique avec plugin Constant-time |
Langages supportés
- C / C++
- Rust
- Assembleur (via inspection manuelle)
Exemple d'analyse
int constant_time_compare(const uint8_t *a, const uint8_t *b, size_t len) {
int result = 0;
for (size_t i = 0; i < len; i++) {
result |= a[i] ^ b[i];
}
return result;
}
La fonction ci-dessus est constante en temps car aucune branche ne dépend des données comparées.