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).