TDCTF Academy Logo TDCTF ACADEMY

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

PADA HALAMAN INI