HMAC
HMAC (Hash-Based Message Authentication Code)
Eine spezifische Konstruktion zur Erzeugung eines Nachrichtenauthentifizierungscodes unter Verwendung einer kryptographischen Hash-Funktion in Kombination mit einem geheimen Schlüssel, die sowohl die Datenintegrität als auch die Authentizität einer Nachricht verifiziert.
Technisches Detail
HMAC (RFC 2104) berechnet: HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)), wobei H eine Hash-Funktion (SHA-256) ist, K' der auf die Blockgrösse aufgefüllte Schlüssel, ipad 0x36 wiederholt und opad 0x5c wiederholt. Diese Doppel-Hash-Konstruktion verhindert Length-Extension-Angriffe, die einfaches hash(key || message) betreffen. HMAC-SHA256 wird in JWT-Signaturen, API-Authentifizierung (AWS Signature V4), Webhook-Verifizierung (Stripe, GitHub) und Schlüsselableitung (HKDF) eingesetzt. Die Web Crypto API unterstützt HMAC über subtle.sign() und subtle.verify(). Ein zeitkonstanter Vergleich ist bei der HMAC-Verifizierung entscheidend, um Timing-Seitenkanalangriffe zu verhindern.
Beispiel
```javascript
// HMAC — Web Crypto API example
const data = new TextEncoder().encode('sensitive data');
const hash = await crypto.subtle.digest('SHA-256', data);
const hex = Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0')).join('');
```