TDCTF Academy Logo TDCTF ACADEMY

Lab 12: Password Hashing - Kenapa Tidak Boleh MD5?

Target: Memahami password hashing yang aman - salt, slow hash, bcrypt, argon2
Tools: python3 + bcrypt


Konsep

JANGAN PERNAH simpan password plaintext! Tapi hash biasa juga tidak cukup:

  • MD5("password123") = 482c811da5d5b4bc6d497ffa98491e38 - terlalu cepat, bisa di-reverse lookup
  • SHA256("password123") = ef92b778... - masih terlalu cepat (8M hash/detik dengan GPU)
  • bcrypt("password123") = $2a$10$... - slow (100 hash/detik) + salt otomatis!

Praktikum

cd ~ && mkdir crypto-lab12 && cd crypto-lab12

python3 << 'PYEOF'
import hashlib, time

# 1. MD5 - dangerously fast!
passwords = ["123456", "password", "admin", "qwerty123", "letmein"]

print("=== Kecepatan Hash (tanpa salt) ==*")
start = time.time()
for _ in range(100000):
h = hashlib.md5(b"test").hexdigest()
md5_speed = 100000 / (time.time() - start)

start = time.time()
for _ in range(10000):
h = hashlib.sha256(b"test").hexdigest()
sha_speed = 10000 / (time.time() - start)

print(f"MD5: ~{md5_speed:.0f} hash/detik")
print(f"SHA256: ~{sha_speed:.0f} hash/detik")
print(f"GPU: ~10 MILYAR hash/detik (MD5)!")
print()

# 2. bcrypt - slow by design
import bcrypt

password = b"password123"
salt = bcrypt.gensalt(rounds=12) # cost factor 2^12

start = time.time()
hashed = bcrypt.hashpw(password, salt)
bcrypt_time = time.time() - start

print(f"bcrypt hash: {hashed.decode()}")
print(f"Waktu: {bcrypt_time:.3f} detik")
print(f"Kecepatan: ~{1/bcrypt_time:.0f} hash/detik (vs MD5 {md5_speed:.0f})")
print(f"Faktor: bcrypt {1/bcrypt_time:.0f}x lebih lambat dari MD5!")
print()

# 3. Verifikasi
password_attempt = b"password123"
result = bcrypt.checkpw(password_attempt, hashed)
print(f"Password benar: {'✅ ACCEPT' if result else '❌ REJECT'}")

wrong = b"password124"
result2 = bcrypt.checkpw(wrong, hashed)
print(f"Password salah: {'✅ ACCEPT' if result2 else '❌ REJECT'}")
PYEOF

️ Analisis

Algoritma Hash/s (GPU) Salt? Recommended?
MD5 10M+
SHA256 8M+
bcrypt (cost 12) 100
argon2id 50 ✅✅

Refleksi: Password hashing butuh slow hash + salt. bcrypt dan argon2id sengaja dibuat lambat agar brute force tidak efektif. Jika aplikasi Anda masih pakai MD5 untuk password - Anda punya critical vulnerability.


Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy

PADA HALAMAN INI