How do you write Constant-Time String Comparison functions to defend against Timing Side-Channel Attacks?
❓ Interview Prompt: Explain Timing Side-Channel Attacks, early-exit string comparisons, crypto.timingSafeEqual, and constant-time execution.
Standard string equality comparisons ('strA === strB') return 'false' on the very first non-matching byte/character (early-exit optimization). This opens severe Timing Side-Channel Vulnerabilities.
How Timing Attacks Work:
An attacker measures high-precision HTTP response timing (microseconds). If guessing a secret token byte-by-byte:
By measuring execution time differences, the attacker guesses secrets character by character!
Mitigation:
Constant-Time Comparisons: Functions process every byte in memory regardless of match status, taking identical CPU time.
Code Implementation Example
import crypto from 'crypto';
// SECURE: Constant-time string comparison function
function safeCompareTokens(a: string, b: string): boolean {
const bufA = Buffer.from(a, 'utf-8');
const bufB = Buffer.from(b, 'utf-8');
// Prevent length mismatch timing leaks by comparing against fixed length
if (bufA.length !== bufB.length) {
crypto.timingSafeEqual(bufA, bufA); // Perform dummy constant-time operation
return false;
}
return crypto.timingSafeEqual(bufA, bufB); // Constant-time CPU execution
}Use constant-time comparison functions (crypto.timingSafeEqual) to prevent attackers from discovering secret tokens via timing side-channels.