0 Tage Serie
csharp / intermediate
Snippet

Sicherer Byte-Vergleich zur Vermeidung von Timing-Angriffen

In Sicherheitskontexten wie dem Passwort-Hashing muss der Vergleich von Bytes immer die gleiche Zeit in Anspruch nehmen, unabhängig davon, ob die Arrays übereinstimmen. Eine Standard-'Equals'-Methode bricht beim ersten Fehler ab, was Informationen preisgibt, die Angreifer nutzen können, um Werte durch Zeitmessungen zu erraten.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
public static bool ConstantTimeEquals(byte[] a, byte[] b)
{
if (a.Length != b.Length) return false;
int result = 0;
for (int i = 0; i < a.Length; i++)
{
result |= a[i] ^ b[i];
}
return result == 0;
}
Erklärung
1
result |= a[i] ^ b[i];
Verwendet XOR zur Prüfung auf Unterschiede und bitweises ODER zur Akkumulation ohne Verzweigung.
2
return result == 0;
Gibt nur dann true zurück, wenn alle XOR-Operationen Null ergaben (keine Unterschiede gefunden).