Sécurité matérielle
Quelle combinaison du problème caché dans la fonction de comparaison de mots de passe ci-dessus et de sa contre-mesure est correcte ?
int check(const char *in, const char *pw, int n) {
for (int i = 0; i < n; i++)
if (in[i] != pw[i]) return 0;
return 1;
}
- ALe résultat est erroné si n est grand ; réduire n avant la comparaison
- BLa fonction s'arrêtant au premier écart, le temps de traitement révèle jusqu'à quel caractère la correspondance est exacte ; comparer jusqu'au bout même en cas d'écart et renvoyer un résultat global
- CIl n'y a pas de problème, la fonction est sûre en l'état
Afficher la réponse et l'explication
Réponse : B. La fonction s'arrêtant au premier écart, le temps de traitement révèle jusqu'à quel caractère la correspondance est exacte ; comparer jusqu'au bout même en cas d'écart et renvoyer un résultat global
Cette fonction retourne immédiatement si le premier caractère diffère, et après comparaison du deuxième si le premier correspond ; le temps de traitement s'allonge donc avec le nombre de caractères corrects. L'attaquant essaie les candidats caractère par caractère et retient celui qui allonge le temps, ce qui lui permet de deviner le mot de passe sans essayer toutes les combinaisons. En cumulant les différences de tous les caractères, par exemple par OU exclusif, et en ne jugeant qu'à la fin, le temps devient constant quel que soit le nombre de caractères corrects.