javascript / expert
Snippet
Zeitkonstante Vergleiche für kryptografische Integrität
Standard-Vergleichsoperatoren (==, ===) geben ein Ergebnis zurück, sobald eine Nichtübereinstimmung gefunden wird. Dies ermöglicht 'Timing-Angriffe', bei denen Angreifer ein Geheimnis Byte für Byte erraten, indem sie die Antwortzeiten messen. timingSafeEqual stellt sicher, dass der Vergleich immer gleich lange dauert, unabhängig davon, wo die Abweichung liegt.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
import { timingSafeEqual } from 'node:crypto';function verifyToken(input, actual) {const inputBuf = Buffer.from(input);const actualBuf = Buffer.from(actual);if (inputBuf.length !== actualBuf.length) {return false;}return timingSafeEqual(inputBuf, actualBuf);}
nodejs
Erklärung
1
import { timingSafeEqual } from 'node:crypto';
Importiert die spezialisierte Vergleichsfunktion aus dem Crypto-Modul von Node.
2
const inputBuf = Buffer.from(input);
Konvertiert Strings in Buffer, da die Funktion Buffer- oder TypedArray-Eingaben erfordert.
3
if (inputBuf.length !== actualBuf.length)
Vorabprüfung der Länge; timingSafeEqual wirft einen Fehler, wenn die Längen differieren.
4
return timingSafeEqual(inputBuf, actualBuf);
Führt einen zeitkonstanten Vergleich durch, um Side-Channel-Leaks zu verhindern.