csharp / expert
Snippet
Seitenkanal-resistente Validierung
Sicherheit auf Expertenebene in C# erfordert Schutz gegen Seitenkanalangriffe. Standardmäßige Gleichheitsoperatoren brechen vorzeitig ab, sobald eine Diskrepanz gefunden wird, was Informationen über die Ausführungszeit preisgibt. Vergleiche mit fester Zeit stellen sicher, dass der gesamte Puffer verarbeitet wird, was es Angreifern unmöglich macht, Geheimnisse durch Latenzmessungen zu erraten.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Security.Cryptography;public class SecurityVault{public static bool SecureCompare(byte[] a, byte[] b){// Prevents timing attacks by ensuring comparison time is constant// regardless of where the first mismatch occurs.return CryptographicOperations.FixedTimeEquals(a, b);}public static bool ManualFixedTimeCompare(ReadOnlySpan<byte> left, ReadOnlySpan<byte> right){if (left.Length != right.Length) return false;int accumulator = 0;for (int i = 0; i < left.Length; i++){accumulator |= left[i] ^ right[i];}return accumulator == 0;}}
Erklärung
1
CryptographicOperations.FixedTimeEquals(a, b);
Verwendet spezialisierte BCL-Methoden, um einen Vergleich von Byte-Sequenzen in konstanter Zeit durchzuführen.
2
accumulator |= left[i] ^ right[i];
Verwendet den XOR-Operator und einen bitweisen OR-Akkumulator, um Unterschiede ohne Verzweigung zu prüfen.