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;
}
  1. ALe résultat est erroné si n est grand ; réduire n avant la comparaison
  2. 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
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Sécurité matérielle

  1. Quelle est la principale raison pour laquelle les attaques par canal auxiliaire exploitant le cache sont possibles ?
  2. Quel est le principe de la vulnérabilité d'exécution spéculative appelée Spectre ?
  3. Pourquoi des informations fuient-elles lors d'attaques comme Spectre, alors que les résultats des instructions exécutées spéculativement sont annulés ?
  4. Quel est le principe de la vulnérabilité appelée Meltdown, qui a touché certains CPU ?
  5. Quel est le principe du KPTI (isolation des tables de pages du noyau), introduit comme contre-mesure logicielle à Meltdown ?