Portal/Notes πŸ“
Programming

HMAC Signature

Memahami HMAC (Hash-based Message Authentication Code) β€” verifikasi integritas dan autentisitas pesan menggunakan kriptografi.

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

HMAC (Hash-based Message Authentication Code) adalah teknik yang digunakan untuk memverifikasi integritas (memastikan data tidak diubah) dan autentisitas (memastikan data berasal dari sumber tepercaya) dari pesan.

Dalam kriptografi, message authentication code (MAC), kadang dikenal sebagai authentication tag, adalah informasi pendek yang digunakan untuk mengautentikasi dan memeriksa integritas pesan. Dengan kata lain, ini digunakan untuk mengonfirmasi bahwa pesan berasal dari pengirim yang dinyatakan (autentisitasnya) dan tidak diubah (integritasnya). Nilai MAC memungkinkan verifikator (yang juga memiliki secret key) untuk mendeteksi perubahan apa pun pada konten pesan.

Fungsi hash kriptografi apa pun dapat digunakan dalam perhitungan HMAC. Algoritma MAC yang dihasilkan disebut HMAC-x, di mana x adalah fungsi hash yang digunakan (misalnya HMAC-SHA256 atau HMAC-SHA3-512). Kekuatan kriptografi HMAC tergantung pada kekuatan kriptografi fungsi hash yang mendasarinya, ukuran output hash-nya, serta ukuran dan kualitas key.

Contoh

Bayangkan kita memiliki layanan yang menangani transaksi uang sungguhan, mentransfer uang dari satu akun ke akun lain. Kita perlu memastikan bahwa request berasal dari sumber tepercaya dan tidak dirusak atau dimodifikasi. Kita dapat menggunakan HMAC untuk melakukannya karena menawarkan pemeriksaan autentisitas dan integritas.

Layanan kita menerima struktur payload pesan dalam format JSON ini.

{
    "user_id": "12345",
    "amount": 1000,
    "currency": "USD",
    "dest_account_number": "0027831990",
    "timestamp": "2025-03-12T13:49:35.800635+07:00"
} 

Buat key untuk enkripsi dan simpan dengan aman. Dalam skenario dunia nyata, disarankan untuk membuat secret yang berbeda untuk setiap pengguna guna memastikan autentisitas request.

Di bawah ini adalah cara membuat HMAC signature dengan SHA-256 di Go. Ganti key dengan key yang Anda buat dan message dengan payload JSON Anda.

func main() {
    key := []byte("super-ultra-sercret-key")
    message := `{
    "user_id": "12345",
    "amount": 1000,
    "currency": "USD",
    "dest_account_number": "0027831990",
    "timestamp": "2025-03-12T13:49:35.800635+07:00"
}`

    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    hash := base64.StdEncoding.EncodeToString(h.Sum(nil))
    fmt.Println("Signature:", hash)
}
➜ go run main.go
Signature: g1T/Vu30QNhL9KYtX1Fre0cC6nyBjWa51+lTkK4a4N8=

Signature ini biasanya ditempatkan di header request. Dan untuk memverifikasi HMAC signature cukup sederhana. Kita hanya perlu membuat signature lagi dengan payload request yang kita terima di backend dan mencocokkannya dengan signature yang ada di header request.

Referensi


Edit on GitHub

Last updated on

HMAC Signature | Faisal Affan