Analyse statique : remplacer l'entropie par l'efficacité de jetons pour détecter les secrets
La détection de secrets dans le code source repose traditionnellement sur l'entropie de Shannon pour filtrer les faux positifs. Une nouvelle approche fondée sur l'encodage par paires d'octets permet de mesurer la rareté d'une chaîne et réduit drastiquement les fausses alertes.
Fil « Détection de secrets dans le code par mesure d'efficacité des jetons »

Du calcul d'entropie à la rareté des données
Pour repérer les clés d'API, mots de passe et jetons d'accès fuités dans les dépôts de code, les outils d'analyse statique comme Gitleaks utilisent traditionnellement une combinaison d'expressions régulières (regex) et de filtres. L'entropie de Shannon (mesure de l'imprévisibilité moyenne des caractères d'une chaîne) sert de filtre principal après la capture regex. Cependant, l'entropie mesure le niveau de hasard et non la rareté réelle d'une chaîne. Un identifiant unique (UUID), une chaîne encodée en Base64 ou un secret d'API possèdent des scores d'entropie similaires à des dépendances de code inhabituelles, générant un volume élevé de faux positifs.
Mesurer l'efficacité des jetons avec l'encodage BPE
Une alternative consiste à mesurer à quel point une chaîne est absente du langage naturel ou du code standard grâce à l'encodage par paires d'octets (BPE, une méthode de découpage de texte en sous-mots ou jetons). En utilisant un analyseur lexical comme cl100k_base, les mots courants du langage sont regroupés en jetons uniques, tandis que les identifiants rares ou aléatoires sont découpés en de multiples petits jetons. Cela permet de définir une métrique d'efficacité des jetons (Token Efficiency) :
token_efficiency = longueur_chaine / nombre_jetons
Par exemple, la phrase "Hello World" (11 caractères, 3 jetons) obtient une efficacité de 3,7, tandis qu'un secret d'API comme ghp_xK7mP9qL2wR5nT3vJ8fY (24 caractères, 22 jetons) chute à une efficacité de 1,1.
Comparatif sur le jeu de données CredData
L'évaluation sur le jeu de données de référence CredData (contenant des milliers de vrais secrets et non-secrets) montre des résultats très supérieurs à l'entropie en fixant un seuil d'efficacité minimal à 2,5 (contre 3,5 pour l'entropie dans Gitleaks) :
- Efficacité de jetons seule : précision de 57,3 %, rappel (taux de vrais secrets détectés) de 98,6 % et score F1 (mesure d'efficacité combinant précision et rappel) de 0,725.
- Entropie de Shannon seule : précision de 21,1 %, rappel de 70,4 % et score F1 de 0,325, générant 28 000 faux positifs (près de 4 fois plus) et 3 000 faux négatifs.
- Efficacité de jetons avec filtre de mots (ignorant les chaînes contenant plusieurs occurrences de mots de 4 caractères ou plus) : précision de 80,4 %, rappel de 95,8 % et score F1 de 0,874 (les faux positifs tombent de 7 894 à 2 508).
Impact sur les performances et intégration dans Betterleaks
Sur le plan du temps de traitement, le calcul d'entropie prend en moyenne 4,55 µs (microsecondes) par chaîne contre 11,75 µs pour l'efficacité de jetons avec l'analyseur cl100k_base. Bien que la mesure soit 2,5 fois plus lente, l'impact sur le balayage global reste négligeable car le goulot d'étranglement de ces outils réside dans l'exécution des expressions régulières.
Cette méthode a été intégrée dans Betterleaks, un projet qui se positionne comme un remplacement direct de Gitleaks. En combinant la mesure d'efficacité des jetons et des ajustements de règles, Betterleaks atteint un score F1 global de 0,892 sur le jeu CredData (surpassant l'outil CredSweeper de Samsung qui plafonne à 0,85). Sur ce benchmark, le scanner enregistre 10 796 vrais positifs, 1 031 faux positifs, une exactitude de 95,34 %, une précision de 91,28 % et un rappel de 87,25 %.