Cara memakai
- Ketik data ke Pesan. Untuk data biner, pilih Heksadesimal atau Base64 pada Pengodean pesan.
- Ketik rahasia ke Kunci dan pilih cara penulisannya pada Pengodean kunci.
- Baca keempat baris Nilai HMAC. Salin nilai yang Anda perlukan, atau bandingkan dengan nilai yang diberikan sistem Anda.
- Jika nilainya berbeda dari sistem lain, periksa byte-nya lebih dulu: pemisah baris atau pengodean yang berbeda menghasilkan HMAC yang berbeda.
Apa itu HMAC
HMAC (RFC 2104) adalah kode autentikasi pesan: nilai pendek yang hanya dapat dibuat oleh orang yang mengetahui kunci rahasia. Ia dibangun dari fungsi hash biasa H, yang diterapkan dua kali pada pesan dan kunci, sehingga hash yang sama dapat dipakai untuk keempat baris tabel. Karena kunci diperlukan, HMAC yang cocok menunjukkan bahwa pesan tidak diubah dan berasal dari pemegang kunci.
HMAC tidak menyembunyikan pesan. Siapa pun yang memiliki pesan dapat membacanya; HMAC hanya memungkinkan mereka memeriksanya.
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = byte 0x36 yang diulang B kali
opad = byte 0x5C yang diulang B kali
B = ukuran blok H: 64 byte untuk SHA-1 dan SHA-256, 128 byte untuk SHA-384 dan SHA-512
Hash mana dan kunci mana
HMAC-SHA-256 adalah pilihan yang paling umum, dan yang dipakai banyak webhook serta API. HMAC-SHA-512 adalah konstruksi yang sama dengan keluaran lebih panjang. HMAC-SHA-1 masih muncul di sistem lama, dan bukan pilihan untuk desain baru.
Kunci sebaiknya acak dan setidaknya sepanjang keluaran hash. Kunci yang diketik sebagai satu kata atau frasa pendek mudah ditebak, dan kunci yang tertebak membuat HMAC tidak berguna.
Heksadesimal dan Base64
Kedua bentuk menampilkan byte yang sama. Heksadesimal menulis setiap byte sebagai dua digit, sehingga SHA-256 memiliki 64 digit. Base64 menulis tiga byte sebagai empat karakter, sehingga SHA-256 memiliki 44 karakter, yang terakhir berupa = sebagai pengisi (RFC 4648).
- HMAC-SHA-1: 40 digit heksadesimal, 28 karakter Base64
- HMAC-SHA-256: 64 digit heksadesimal, 44 karakter Base64
- HMAC-SHA-384: 96 digit heksadesimal, 64 karakter Base64
- HMAC-SHA-512: 128 digit heksadesimal, 88 karakter Base64
Contoh: RFC 4231 kasus uji 2
Kunci Jefe dan pesan what do ya want for nothing? adalah kasus uji kedua RFC 4231 untuk SHA-256, SHA-384 dan SHA-512, serta RFC 2202 untuk SHA-1. Tabel di bawah adalah yang ditampilkan halaman untuk keduanya, dan nilai HMAC-SHA-256-nya adalah yang dicetak RFC: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.
| Algoritma | Heksadesimal | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
Pertanyaan yang sering diajukan
Apakah HMAC sama dengan mengenkripsi pesan?
Tidak. HMAC tidak menyembunyikan pesan, sehingga siapa pun dapat membacanya. Ia menunjukkan bahwa pesan tidak diubah dan bahwa pengirim mengetahui kuncinya. Untuk kerahasiaan, Anda memerlukan enkripsi.
Apa beda hash dan HMAC?
Hash hanya bergantung pada pesan, sehingga siapa pun dapat menghitungnya. HMAC juga memerlukan kunci rahasia, sehingga hanya orang yang memiliki kunci yang dapat membuat atau memeriksanya. Untuk ringkasan biasa, gunakan generator hash.
Mengapa HMAC saya berbeda dengan yang diberikan pustaka saya?
Kunci atau byte pesannya berbeda. Kunci yang diketik sebagai teks adalah byte UTF-8-nya, dan huruf yang sama yang ditulis dalam heksadesimal adalah byte yang berbeda. Pemisah baris di akhir pesan juga mengubah HMAC.
Berapa panjang kunci yang harus saya pakai?
Pakai kunci acak yang setidaknya sepanjang keluaran hash: 32 byte untuk HMAC-SHA-256. RFC 2104 sangat tidak menganjurkan kunci yang lebih pendek, dan kunci yang dibuat dari kata atau frasa pendek mudah ditebak.
Bisakah saya memeriksa tanda tangan webhook dengan halaman ini?
Bisa, jika Anda memakai byte persis yang ditandatangani. Tanda tangan webhook biasanya dihitung dari isi permintaan mentah, jadi tempel isinya tanpa perubahan: isi JSON yang diformat ulang menghasilkan HMAC yang berbeda.
Apakah kunci atau pesan saya dikirim ke suatu tempat?
Tidak. HMAC dihitung di peramban Anda dengan SubtleCrypto milik peramban. Kunci dan pesannya tidak diunggah atau disimpan.
Sumber
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication (dalam bahasa Inggris)
- RFC 4231: Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512 (dalam bahasa Inggris)
- RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 (dalam bahasa Inggris)
- RFC 4648: The Base16, Base32, and Base64 Data Encodings (dalam bahasa Inggris)
- NIST FIPS 180-4: Secure Hash Standard (SHA-1 and the SHA-2 family) (dalam bahasa Inggris)
Angka dan teks terakhir diperiksa pada Selasa, 10 November 2026.