HMAC Lab
Key + message → tag. Tag karşılaştırmasında naive vs constant-time fark gör — timing attack neden gerçek bir tehdit, görsel olarak izle.
hmac · mac · timing-attack · sha-256
Key + message → tag. Tag karşılaştırmasında naive vs constant-time fark gör — timing attack neden gerçek bir tehdit, görsel olarak izle.
hmac · mac · timing-attack · sha-256
HMAC = Hash-based Message Authentication Code. Bir mesajın kim tarafından gönderildiğini doğrular — anahtarı bilen biri, sadece. Webhook signature, API auth, JWT'lerin imza katmanı, session token'ları — hepsi altta HMAC kullanır.
Kötü kod:
function badEqual(a: string, b: string) {
if (a.length !== b.length) return false;
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) return false; // ← early return = timing leak
}
return true;
}Saldırgan, doğru tag'i tahmin etmek için tag'i karakter karakter brute-force yapabilir. Doğru karakter bulunca karşılaştırma 1 ns daha uzun sürer — milyonlarca request ile fark istatistiksel olarak ölçülebilir hale gelir.
Doğrusu:
import { timingSafeEqual } from "node:crypto";
return timingSafeEqual(Buffer.from(a), Buffer.from(b));Web'de crypto.subtle.verify() zaten constant-time. Ama elle yazılmış === karşılaştırmasıyla webhook doğrulaması felakettir.