HMAC
HMAC (Hash-Based Message Authentication Code)
Konstruksi spesifik untuk membuat kode autentikasi pesan menggunakan fungsi hash kriptografi yang dikombinasikan dengan kunci rahasia, memverifikasi integritas data dan keaslian pesan.
Detail Teknis
HMAC (RFC 2104) menghitung: HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)), di mana H adalah fungsi hash (SHA-256), K' adalah kunci yang di-pad ke ukuran blok, ipad adalah 0x36 yang diulang, dan opad adalah 0x5c yang diulang. Konstruksi double-hashing ini mencegah serangan length-extension yang mempengaruhi hash(key || message) biasa. HMAC-SHA256 digunakan dalam signature JWT, autentikasi API (AWS Signature V4), verifikasi webhook (Stripe, GitHub), dan derivasi kunci (HKDF). Web Crypto API mendukung HMAC melalui subtle.sign() dan subtle.verify(). Perbandingan timing-safe sangat penting saat memverifikasi HMAC untuk mencegah serangan timing side-channel.
Contoh
```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('');
```