Lab 11: HMAC - Message Authentication Code
Target: Memahami HMAC untuk memverifikasi integritas + autentikasi pesan
Tools:python3
Konsep
HMAC = Hash + Key. Beda dengan hash biasa:
- Hash saja: siapa pun bisa membuat hash - hanya integritas
- HMAC: hanya pihak dengan kunci rahasia yang bisa membuat HMAC yang valid - integritas + autentikasi
Rumus:
HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
Praktikum
cd ~ && mkdir crypto-lab11 && cd crypto-lab11
python3 << 'PYEOF'
import hmac, hashlib
# Shared secret key (antara Alice & Bob)
key = b"rahasia_bersama_123"
# Pesan
message = b"Transfer Rp 500.000 ke rekening 1234"
# Buat HMAC-SHA256
hmac_value = hmac.new(key, message, hashlib.sha256).hexdigest()
print(f"Message: {message.decode()}")
print(f"Key: {key.decode()}")
print(f"HMAC: {hmac_value}")
print()
# Verifikasi (sisi penerima)
def verify_hmac(key, message, received_hmac):
expected = hmac.new(key, message, hashlib.sha256).hexdigest()
# Timing-safe comparison!
return hmac.compare_digest(expected, received_hmac)
# Test: pesan asli
print("=== Verifikasi ==*")
result = verify_hmac(key, message, hmac_value)
print(f"Pesan asli: {'✅ VALID' if result else '❌ INVALID'}")
# Test: pesan diubah attacker
fake_msg = b"Transfer Rp 50.000.000 ke rekening 9999"
result2 = verify_hmac(key, fake_msg, hmac_value)
print(f"Pesan diubah: {'✅ VALID' if result2 else '❌ INVALID'}")
# Test: key salah
result3 = verify_hmac(b"key_salah", message, hmac_value)
print(f"Key salah: {'✅ VALID' if result3 else '❌ INVALID'}")
PYEOF
️ Analisis
| Aspek | Hash Biasa | HMAC |
|---|---|---|
| Integritas | ✅ | ✅ |
| Autentikasi | ❌ | ✅ (dengan key) |
| Tahan tampering | ❌ (MitM bisa ganti hash) | ✅ |
| Penggunaan | Checksum, fingerprint | API tokens, JWT, TLS |
Refleksi: Jangan pernah menggunakan
hash(message) untuk verifikasi - attacker bisa mengubah
pesan dan hash bersamaan. Selalu gunakan HMAC
dengan kunci rahasia bersama.
Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy