Fungsinya
HMAC (Hash-based Message Authentication Code, RFC 2104) menggabungkan kunci rahasia dengan fungsi hash untuk menandatangani pesan. Penerima yang tahu kunci yang sama menghitung ulang HMAC dan membandingkannya dengan nilai yang dikirim. Jika pesan diubah atau pengirim tidak tahu kuncinya, nilainya tidak cocok.
HMAC ada di mana-mana: tanda tangan webhook (GitHub, Stripe, Slack), permintaan API bertanda tangan, JWT dengan HS256, penandatanganan cookie, dan kata sandi sekali pakai. Alat ini menghitung HMAC-MD5, HMAC-SHA1, HMAC-SHA256, HMAC-SHA384, dan HMAC-SHA512 sekaligus, sehingga Anda bisa mencocokkan dengan yang dipakai sistem Anda.
Cara menggunakan
- Ketik Kunci rahasia. Ubah Format kunci jika kunci diberikan sebagai byte hex atau Base64, bukan teks biasa.
- Tempel Pesan, atau klik Contoh.
- Semua HMAC diperbarui saat Anda mengetik. Pilih keluaran Hex atau Base64 lalu salin nilai yang dibutuhkan.
Pesan dikodekan sebagai UTF-8 persis seperti yang diketik, termasuk spasi dan baris baru.
Contoh
Dengan kunci key dan pesan The quick brown fox jumps over the lazy dog, HMAC-SHA256 adalah f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8. Anda bisa memeriksanya di baris perintah:
echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"
Perhatikan -n: tanpa itu, echo menambahkan baris baru dan HMAC berubah.
Memverifikasi webhook
Untuk memverifikasi webhook, ambil body permintaan mentah sebelum JSON di-parse, susun string sesuai dokumentasi penyedia (sering timestamp.body), hitung HMAC dengan secret penandatanganan Anda, lalu bandingkan dengan header tanda tangan. Di kode Anda sendiri, bandingkan tanda tangan dengan fungsi waktu-konstan untuk mencegah serangan timing.
FAQ
› Apa bedanya hash dan HMAC?
Hash biasa seperti SHA-256 bisa dihitung siapa saja. HMAC mencampurkan kunci rahasia ke dalam hash, sehingga hanya orang yang tahu kuncinya yang bisa membuat atau memeriksa nilainya. Ini kode autentikasi pesan, bukan sekadar checksum.
› Algoritma HMAC mana yang sebaiknya dipakai?
Biasanya HMAC-SHA256, yang diharapkan sebagian besar API dan webhook. HMAC-SHA512 juga bagus. HMAC-MD5 dan HMAC-SHA1 masih dianggap aman sebagai MAC, tetapi pakai hanya jika sistem lama memerlukannya.
› Kenapa HMAC saya tidak sama dengan milik server?
Periksa byte pesan yang persis (baris baru di akhir atau spasi JSON yang berbeda mengubah segalanya), format kunci (teks, hex, atau Base64), dan encoding keluaran. Penyedia webhook sering menandatangani string dari stempel waktu dan body permintaan mentah.
› Apakah kunci rahasia saya disimpan atau dikirim?
Tidak. HMAC dihitung di browser Anda. Kunci hanya ada di memori halaman ini: tidak disimpan, tidak ditulis ke bilah alamat, dan tidak disertakan dalam tautan berbagi.