HMAC Generator

Hasilkan tanda tangan HMAC dengan SHA-256, SHA-384, atau SHA-512

Algoritma

Pesan

Berjalan lokal · Aman untuk menempel rahasia

Kunci Rahasia

Berjalan lokal · Aman untuk menempel rahasia

Tanda Tangan HMAC

Tanda tangan HMAC akan ditampilkan di sini…

Apa Itu HMAC?

HMAC (Hash-based Message Authentication Code) adalah konstruksi kriptografis yang didefinisikan dalam RFC 2104 yang menggabungkan fungsi hash dengan kunci rahasia untuk menghasilkan tag autentikasi berukuran tetap. Berbeda dengan hash biasa yang dapat dihitung oleh siapa saja, HMAC hanya dapat dibuat dan diverifikasi oleh pihak yang berbagi kunci rahasia. HMAC adalah mekanisme standar untuk memverifikasi integritas dan autentisitas pesan — memastikan bahwa data tidak diubah dan berasal dari pengirim yang tepercaya.

Algoritma HMAC bekerja dengan fungsi hash iteratif apa pun: SHA-256, SHA-384, SHA-512, bahkan fungsi lama seperti SHA-1 atau MD5. Konstruksi yang dihasilkan disebut berdasarkan hash yang mendasarinya — HMAC-SHA256, HMAC-SHA384, atau HMAC-SHA512. Karena keamanan HMAC bergantung pada fungsi hash yang tahan tabrakan dan memiliki sifat pseudorandom tertentu, algoritma keluarga SHA-2 adalah pilihan yang direkomendasikan untuk sistem baru. HMAC-SHA256 adalah varian yang paling banyak digunakan, dipakai dalam AWS Signature V4, webhook Stripe, webhook secrets GitHub, request signing Slack, dan JSON Web Tokens (HS256).

Desain HMAC menyediakan properti kritis yang tidak dimiliki hashing biasa: ketahanan terhadap length-extension attacks. Dengan SHA-256 saja, penyerang yang mengetahui H(message) dapat menghitung H(message || attacker_data) tanpa mengetahui pesan asli. Struktur double-hashing HMAC (hash dalam dan hash luar dengan kunci berpadding berbeda) mencegah serangan ini sepenuhnya. Inilah mengapa skema tanda tangan API menggunakan HMAC, bukan menambahkan kunci rahasia ke pesan lalu meng-hash hasilnya.

Mengapa Menggunakan Generator HMAC Online?

Menghitung tanda tangan HMAC biasanya memerlukan penulisan kode atau penggunaan alat CLI. Generator HMAC berbasis browser ini memungkinkan Anda membuat tanda tangan HMAC-SHA256, HMAC-SHA384, dan HMAC-SHA512 secara instan tanpa menginstal perangkat lunak atau beralih ke terminal.

Komputasi HMAC instan
Masukkan pesan dan kunci rahasia, pilih algoritma hash, dan dapatkan tanda tangan HMAC segera. Web Crypto API menangani komputasi secara native di browser Anda.
🔒
Pemrosesan yang mengutamakan privasi
Pesan dan kunci rahasia Anda tidak pernah meninggalkan perangkat Anda. Semua komputasi HMAC berjalan secara lokal melalui Web Crypto API — tidak ada permintaan server, tidak ada pencatatan, tidak ada penyimpanan data.
📋
Dukungan berbagai algoritma
Beralih antara HMAC-SHA256, HMAC-SHA384, dan HMAC-SHA512 dengan satu klik. Bandingkan output antar algoritma untuk memverifikasi bahwa implementasi backend Anda cocok.
🔍
Tanpa akun atau instalasi
Bekerja di browser modern mana pun — Chrome, Firefox, Safari, Edge. Tanpa pendaftaran, tanpa ekstensi, tanpa pengaturan CLI. Buka halaman dan mulai membuat tanda tangan HMAC.

Kasus Penggunaan HMAC Generator

Frontend Developer — Verifikasi Tanda Tangan Webhook
Stripe, GitHub, dan Shopify menandatangani payload webhook dengan HMAC-SHA256. Gunakan alat ini untuk menghitung tanda tangan yang diharapkan dari payload dan secret, lalu bandingkan dengan tanda tangan di HTTP header selama pengembangan.
Backend Engineer — Penandatanganan Permintaan API
AWS Signature V4 memerlukan HMAC-SHA256 di beberapa tahap proses penandatanganan. Buat nilai HMAC referensi selama pengembangan untuk men-debug ketidakcocokan penandatanganan dan memverifikasi langkah komputasi antara.
DevOps — Validasi Rotasi Secret
Saat merotasi webhook secret atau kunci penandatanganan API, hitung tanda tangan HMAC dengan kunci lama dan baru untuk memastikan aplikasi Anda menangani transisi dengan benar sebelum kunci lama kedaluwarsa.
QA Engineer — Vektor Uji Tanda Tangan
Buat vektor uji HMAC dengan input dan kunci yang diketahui untuk membangun tes regresi bagi middleware autentikasi Anda. Verifikasi bahwa implementasi Anda menangani pesan kosong, input Unicode, dan kunci panjang dengan benar.
Data Engineer — Autentikasi Pesan Pipeline
Lampirkan tanda tangan HMAC pada pesan dalam pipeline berbasis event (Kafka, SQS) untuk memverifikasi bahwa pesan tidak diubah selama transit antar layanan.
Mahasiswa — Tugas Kriptografi
Bereksperimen dengan HMAC untuk memahami bagaimana mengubah satu karakter dalam pesan atau kunci menghasilkan tanda tangan yang sepenuhnya berbeda. Bandingkan output HMAC dengan output SHA-256 biasa untuk mengamati perbedaan yang diperkenalkan oleh kunci rahasia.

HMAC vs Hash Biasa vs Enkripsi

HMAC, hashing biasa, dan enkripsi melayani tujuan yang berbeda. HMAC menyediakan autentikasi pesan — bukti bahwa pesan dibuat oleh seseorang dengan kunci rahasia dan tidak dimodifikasi. Hash biasa menyediakan integritas tetapi bukan autentikasi. Enkripsi menyediakan kerahasiaan. Tabel di bawah menjelaskan perbedaannya.

PropertiHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

Perbandingan Algoritma HMAC

HMAC dapat menggunakan fungsi hash apa pun, tetapi pilihan algoritma yang mendasarinya menentukan ukuran output, tingkat keamanan, dan kompatibilitas browser. HMAC-SHA256 adalah pilihan paling umum untuk sistem baru. Tabel di bawah membandingkan varian yang kemungkinan akan Anda temui.

AlgoritmaUkuran DigestPanjang HexWeb Crypto APITerbaik untuk
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

Cara Kerja HMAC Secara Internal

HMAC menerapkan fungsi hash yang mendasarinya dua kali dengan dua pad turunan kunci yang berbeda. Konstruksi ini didefinisikan dalam RFC 2104 dan terbukti sebagai PRF (fungsi pseudorandom) di bawah asumsi kriptografis standar. Kunci terlebih dahulu dipadding atau di-hash agar sesuai dengan ukuran blok fungsi hash (64 byte untuk SHA-256, 128 byte untuk SHA-512).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Algoritma melakukan XOR pada kunci berpadding dengan konstanta inner pad (ipad, 0x36 berulang), menggabungkannya dengan pesan, dan meng-hash hasilnya. Kemudian melakukan XOR pada kunci berpadding dengan konstanta outer pad (opad, 0x5C berulang), menggabungkannya dengan output hash dalam, dan meng-hash lagi. Struktur double-hashing inilah yang mencegah length-extension attacks dan memastikan output HMAC tidak dapat dihitung tanpa mengetahui kunci rahasia.

Contoh Kode HMAC

HMAC didukung secara native di setiap bahasa dan runtime utama. Web Crypto API menyediakan HMAC-SHA256, HMAC-SHA384, dan HMAC-SHA512 di browser tanpa library apa pun. Contoh di bawah menunjukkan pola penggunaan dunia nyata termasuk verifikasi webhook dan perbandingan constant-time.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

Pertanyaan yang Sering Diajukan

Apa perbedaan antara HMAC dan hash biasa?
Hash biasa (SHA-256, MD5) hanya menerima pesan sebagai input dan menghasilkan digest yang dapat dihitung siapa saja. HMAC menerima pesan dan kunci rahasia, menghasilkan tanda tangan yang hanya dapat dibuat atau diverifikasi oleh seseorang yang memiliki kunci. Ini berarti HMAC menyediakan autentikasi (bukti identitas pengirim) selain pemeriksaan integritas. Hash biasa hanya membuktikan bahwa data tidak berubah, bukan siapa yang membuatnya.
Apakah HMAC-SHA256 aman?
Ya. HMAC-SHA256 dianggap aman hingga tahun 2026. Keamanannya bergantung pada sifat pseudorandom SHA-256 dan konstruksi HMAC itu sendiri (RFC 2104). Tidak ada serangan praktis terhadap HMAC-SHA256 yang telah didemonstrasikan. Bahkan HMAC-MD5 dan HMAC-SHA1 tetap aman dalam praktiknya karena keamanan HMAC tidak memerlukan ketahanan tabrakan penuh dari hash yang mendasarinya, meskipun varian SHA-2 direkomendasikan untuk sistem baru.
Mengapa webhook menggunakan HMAC, bukan mengenkripsi payload?
Payload webhook biasanya berisi data yang sudah diharapkan penerima — detail pesanan, notifikasi event, pembaruan status. Tujuannya bukan menyembunyikan data (kerahasiaan) tetapi membuktikan bahwa data berasal dari pengirim yang sah dan tidak dimodifikasi dalam transit (autentisitas dan integritas). HMAC mencapai ini dengan overhead minimal: pengirim menghitung HMAC dari payload dengan secret bersama dan menyertakannya di HTTP header. Penerima menghitung ulang HMAC dan membandingkannya. Enkripsi akan menambah kompleksitas yang tidak perlu dan beban manajemen kunci.
Bagaimana cara membandingkan tanda tangan HMAC dengan aman?
Selalu gunakan fungsi perbandingan constant-time. Di Python, gunakan hmac.compare_digest(). Di Node.js, gunakan crypto.timingSafeEqual(). Di Go, gunakan hmac.Equal(). Operator kesamaan string standar (== atau ===) dapat membocorkan informasi timing: penyerang dapat mengukur berapa lama perbandingan berlangsung untuk menentukan berapa byte tanda tangan palsu mereka yang cocok dengan yang benar, lalu brute-force byte yang tersisa satu per satu.
Bisakah HMAC dibalikkan untuk memulihkan kunci rahasia?
Tidak. HMAC didasarkan pada fungsi hash satu arah, sehingga tidak ada jalan pintas matematis untuk mengekstrak kunci dari output HMAC. Penyerang perlu brute-force ruang kunci, yang tidak mungkin dilakukan untuk kunci 128 bit atau lebih panjang. Namun, kunci yang lemah atau pendek (seperti kata sandi sederhana) dapat rentan terhadap serangan kamus, jadi selalu gunakan kunci acak kriptografis minimal 256 bit untuk HMAC-SHA256.
Apa yang terjadi jika kunci HMAC lebih panjang dari ukuran blok hash?
Jika kunci rahasia lebih panjang dari ukuran blok fungsi hash (64 byte untuk SHA-256, 128 byte untuk SHA-512), algoritma HMAC terlebih dahulu meng-hash kunci dengan fungsi hash yang mendasarinya untuk mereduksinya ke panjang output hash, lalu menggunakan hash tersebut sebagai kunci efektif. Ini berarti kunci yang sangat panjang tidak memberikan keamanan tambahan di luar ukuran output hash. Untuk HMAC-SHA256, kunci yang lebih panjang dari 64 byte di-hash menjadi 32 byte dan tidak memberikan peningkatan keamanan dibandingkan kunci 64 byte; kunci hingga 64 byte digunakan dengan panjang penuhnya.
Kapan sebaiknya menggunakan HMAC-SHA512, bukan HMAC-SHA256?
Gunakan HMAC-SHA512 ketika protokol memerlukannya (beberapa fungsi derivasi kunci seperti HKDF-SHA512, pembuatan kunci Ed25519), ketika Anda membutuhkan tanda tangan yang lebih lebar untuk defense-in-depth, atau ketika berjalan di perangkat keras 64-bit di mana SHA-512 sebenarnya lebih cepat dari SHA-256. Untuk sebagian besar aplikasi web, penandatanganan API, dan verifikasi webhook, HMAC-SHA256 menyediakan keamanan yang cukup dan merupakan pilihan yang lebih umum di berbagai ekosistem.