0 Tage Serie
csharp / expert
Snippet

Identitätsprüfung in konstanter Zeit

Ein sicherheitskritisches Muster zum Vergleich sensibler Daten wie Hashes. Durch die Verwendung von XOR und das Vermeiden von vorzeitigen Rückgaben bleibt die Ausführungszeit konstant, unabhängig davon, wo eine Abweichung auftritt.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
public static bool SecureCompare(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];
Akkumuliert Differenzen mittels bitweisem XOR ohne Verzweigungslogik.
2
return result == 0;
Gibt nur dann true zurück, wenn jedes einzelne Byte identisch war.