Hardwaresicherheit
Welche Kombination aus dem Problem der oben gezeigten Funktion zum Passwortvergleich und einer Gegenmaßnahme ist richtig?
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;
}
- ABei großem n wird das Rechenergebnis falsch. Vor dem Vergleich wird n verkleinert
- BDa sie beim ersten Unterschied endet, lässt sich aus der Verarbeitungszeit ablesen, bis zu welchem Zeichen Übereinstimmung besteht. Es wird auch bei Unterschieden bis zum Ende verglichen und das Ergebnis gesammelt zurückgegeben
- CEs gibt kein Problem, und die Funktion ist so sicher
Antwort und Erläuterung anzeigen
Antwort: B. Da sie beim ersten Unterschied endet, lässt sich aus der Verarbeitungszeit ablesen, bis zu welchem Zeichen Übereinstimmung besteht. Es wird auch bei Unterschieden bis zum Ende verglichen und das Ergebnis gesammelt zurückgegeben
Diese Funktion kehrt sofort zurück, wenn das erste Zeichen abweicht; stimmt es, wird das zweite verglichen, sodass die Verarbeitungszeit mit der Zahl der übereinstimmenden Zeichen wächst. Ein Angreifer kann Zeichen für Zeichen Kandidaten ausprobieren und jeweils den mit der längeren Zeit wählen, wodurch er das Passwort erschließt, ohne alle Kombinationen durchzuprobieren. Werden die Unterschiede aller Zeichen z. B. per XOR gesammelt und erst am Ende ausgewertet, ist die Zeit unabhängig von der Zahl übereinstimmender Zeichen konstant.