
Apa Itu Enkripsi Satu Arah? Enkripsi satu arah atau hashing adalah proses mengubah data (biasanya teks atau password) menjadi bentuk representasi tetap (hash) yang: Tidak bisa dikembalikan ke bentuk aslinya (irreversible); Memiliki panjang tetap, terlepas dari panjang input-nya; Digunakan untuk verifikasi integritas dan penyimpanan password secara aman.
MD5 (Message-Digest Algorithm 5) adalah algoritma hashing yang dibuat oleh Ronald Rivest pada tahun 1991. MD5 menghasilkan output 128-bit (16 byte) yang biasa ditampilkan dalam format hexadecimal 32 karakter.
Input: password123 Output: 482c811da5d5b4bc6d497ffa98491e38
Ciri-ciri hasing MD5 yaitu
- Panjang output | 128-bit / 32 karakter hex
- One-way | Tidak bisa dikembalikan ke plaintext
- Deterministik | Input yang sama selalu menghasilkan output yang sama
- Cepat | Sangat cepat dihitung
Cara Kerja MD5 (Secara Singkat)
Contents
- 1 Apa Itu Collision dalam Hashing?
- 1.1 Potensi Bahaya dari Collision Vulnerability
- 1.1.1 1. Pemalsuan Dokumen Digital: Seorang attacker bisa membuat dua dokumen berbeda:
- 1.1.2 2. Bypass Verifikasi File: Jika suatu sistem hanya mengecek hash MD5 file untuk memastikan integritas:
- 1.1.3 3. Serangan terhadap Digital Signature: Jika tanda tangan digital dibuat berdasarkan hash dari pesan:
- 1.1.4 4. Serangan terhadap Sistem Password: Kalau sistem tidak pakai salt, attacker bisa:
- 1.2 Seberapa Mudah Menemukan Collision?
- 1.1 Potensi Bahaya dari Collision Vulnerability
- 2 Apakah WordPress menggunakan MD5?
- 3 Membuat Brute Force MD5 WordPress
-
Padding: Pesan dipanjangkan agar panjang totalnya ≡ 448 mod 512, lalu ditambahkan 64-bit panjang pesan asli → total jadi kelipatan 512 bit.
-
Pemrosesan dalam Blok: MD5 memproses data dalam blok 512-bit.
-
Inisialisasi 4 Variabel Utama: A, B, C, D → masing-masing 32-bit.
-
64 Operasi Per Blok: Dilakukan dalam 4 round utama, tiap round terdiri dari 16 operasi non-linear.
-
Output Akhir: Setelah semua blok selesai, A, B, C, dan D digabung → menghasilkan 128-bit hash.
Kelemahan MD5
-
Collision vulnerability: Dua input berbeda bisa menghasilkan hash yang sama.
-
Speed: Terlalu cepat → rawan brute-force.
-
Tidak cocok untuk password hashing modern: Karena tidak aman untuk digunakan sendirian tanpa salt atau iterasi.
Penggunaan MD5 di Dunia Nyata
-
Cek integritas file (misalnya saat download file ISO).
-
Sistem lama untuk verifikasi password.
-
Hash cepat untuk indeks database (meskipun SHA256 lebih direkomendasikan sekarang).
Kesimpulan
-
MD5 adalah algoritma hashing satu arah yang cepat dan efisien, tetapi tidak lagi aman untuk keamanan modern.
-
Cocok digunakan untuk hal-hal non-kritis seperti deteksi duplikat atau pengecekan integritas.
-
Untuk password hashing modern, gunakan algoritma seperti bcrypt, scrypt, atau Argon2.
Apa Itu Collision dalam Hashing?
Collision terjadi saat dua input yang berbeda menghasilkan hash output yang sama. Contoh (tidak nyata, hanya ilustrasi):
MD5("hello123") = a1b2c3d4e5f6g7h8... MD5("helloABC") = a1b2c3d4e5f6g7h8... ← 💥 Collision
Dalam sistem ideal, ini tidak boleh terjadi, tapi untuk hash yang panjangnya tetap (misalnya 128-bit untuk MD5), secara matematis jumlah kemungkinan input jauh lebih banyak dibanding jumlah kemungkinan output. Ini membuat collision pasti bisa terjadi – tinggal seberapa mudah menemukannya.
Potensi Bahaya dari Collision Vulnerability
1. Pemalsuan Dokumen Digital: Seorang attacker bisa membuat dua dokumen berbeda:
-
Satu dokumen “baik” (misalnya surat kontrak).
-
Satu dokumen berbahaya (misalnya mengubah nominal uang).
Lalu dia memastikan kedua dokumen punya hash MD5 yang sama, dan mengirimkan hash-nya untuk diverifikasi. Sistem akan berpikir dokumen berbahaya itu sah karena hash-nya cocok.
Kasus Nyata: Teknik ini digunakan dalam penelitian “Chosen Prefix Collision” terhadap MD5.
2. Bypass Verifikasi File: Jika suatu sistem hanya mengecek hash MD5 file untuk memastikan integritas:
-
Attacker bisa membuat file malware yang punya hash sama dengan file asli.
-
File lolos sebagai “sudah diverifikasi”, padahal berbahaya.
3. Serangan terhadap Digital Signature: Jika tanda tangan digital dibuat berdasarkan hash dari pesan:
-
Attacker membuat dua pesan berbeda dengan hash yang sama.
-
Dia mendapatkan tanda tangan untuk pesan yang “baik”, dan memindahkannya ke pesan yang “jahat”.
Ini membuat tanda tangan terlihat valid, padahal dokumennya sudah diubah.
4. Serangan terhadap Sistem Password: Kalau sistem tidak pakai salt, attacker bisa:
-
Cari dua password berbeda yang punya hash sama.
-
Login menggunakan password alternatif yang hash-nya cocok.
Seberapa Mudah Menemukan Collision?
-
Di masa lalu, collision butuh jutaan tahun komputasi.
-
Sekarang, dengan alat modern + riset kriptografi, collision di MD5 dan SHA-1 sudah bisa ditemukan secara praktis.
- Tahun 2004: MD5 pertama kali dibobol dengan collision.
- Tahun 2017: Google dan CWI Labs berhasil membuat collision di SHA-1 (proyek SHAttered).
Apakah WordPress menggunakan MD5?
WordPress memang menggunakan MD5, tapi bukan MD5 polos — mereka menggunakan versi MD5 yang diperkuat dengan salt dan iterasi, dikenal sebagai phpass (PHP Password Hashing Framework). Mari kita bahas lebih dalam.
Apa Itu phpass?: phpass
adalah framework untuk hashing password yang:
-
Menggunakan MD5 sebagai algoritma dasar.
-
Menambahkan salt acak (8 karakter).
-
Melakukan iterasi berkali-kali (biasanya 8192 kali secara default).
-
Disimpan dalam format tertentu yang mengindikasikan metode hashing.
Format Hash WordPress: Contoh hash WordPress:
$P$B5DLMYUfR72Xx9WZK0FowLNRQhOWXz1
Struktur
$P$ ← penanda bahwa ini adalah phpass B ← log2 dari jumlah iterasi (B = 2^7 = 128, artinya 2^B kali hashing) 5DLMYUfR ← salt (8 karakter) ... ← hasil MD5 (setelah iterasi)
Versi WordPress saat ini umumnya menggunakan 8192 iterasi (B = 7
), karena 2^13 = 8192
Cara Kerjanya (secara teknis):
-
WordPress membuat salt acak (misal:
5DLMYUfR
) -
Lalu password digabung dengan salt →
salt + password
-
Di-hash menggunakan MD5
-
Ulangi hash sebanyak
2^B
kali (default: 8192) -
Hasil akhir disimpan dengan format seperti di atas
Mengapa WordPress Tidak Pakai MD5 Saja?
Karena MD5 polos sangat mudah di-crack. Dengan menambahkan:
-
Salt → Mencegah penggunaan rainbow tables
-
Iterasi → Membuat brute-force jauh lebih lambat
Meskipun tetap berbasis MD5, pendekatan ini jauh lebih aman dibanding MD5 biasa.
WordPress Versi Baru Lebih Aman
Sejak WordPress 5.x, WordPress juga mendukung algoritma yang lebih kuat jika tersedia, seperti:
-
bcrypt
-
Atau library eksternal lain (tergantung konfigurasi dan plugin)
WordPress akan menyimpan password menggunakan metode terbaru yang tersedia, dan tetap bisa memverifikasi hash lama — jika hash-nya cocok, akan dihash ulang dengan algoritma baru saat login berikutnya.
Contoh Verifikasi Hash WordPress (Python)
Dengan passlib
, kamu bisa verifikasi hash WordPress seperti ini:
from passlib.hash import phpass hash = "$P$B5DLMYUfR72Xx9WZK0FowLNRQhOWXz1" password = "admin123" if phpass.verify(password, hash): print("Password cocok!") else: print("Password salah!")
Kesimpulan
-
WordPress menggunakan MD5 + Salt + Iterasi via phpass untuk mengamankan password.
-
Bukan sekadar MD5, melainkan versi yang diperkuat.
-
Masih ada risiko karena MD5 dasarnya sudah lemah, tapi phpass memperlambat serangan brute-force secara signifikan.
Membuat Brute Force MD5 WordPress
Untuk brute-force hash WordPress (phpass) menggunakan pendekatan wordlist sederhana dan library passlib
. Kalian install dulu passlib
pip install passlib
Kita akan coba brute-force hash ini:
$P$B5DLMYUfR72Xx9WZK0FowLNRQhOWXz1
Itu adalah hash untuk password:
admin123
Demo Script Python (Brute-force dengan Wordlist)
from passlib.hash import phpass # Hash target WordPress (phpass) target_hash = "$P$B5DLMYUfR72Xx9WZK0FowLNRQhOWXz1" # Wordlist sederhana wordlist = [ "password", "123456", "admin", "admin123", # ← ini password aslinya "letmein", "welcome", "qwerty" ] # Brute-force dengan wordlist for password in wordlist: if phpass.verify(password, target_hash): print(f"[✓] Password ditemukan: {password}") break else: print("[-] Password tidak ditemukan di wordlist.")
Output yang Diharapkan
[✓] Password ditemukan: admin123
Faktor Penentu Waktu Brute-force tanpa wordlist:
-
Jumlah kombinasi karakter
-
Panjang password yang dicoba
-
Kecepatan hashing (phpass = lambat sengaja!)
-
Spesifikasi CPU (atau GPU kalau pakai Hashcat)
Contoh Estimasi: Brute-force Karakter a-z0-9
, Panjang 1-6
Jumlah Kombinasi:
Untuk charset a-z0-9
(36 karakter), kombinasi total:
total = 36^1 + 36^2 + 36^3 + 36^4 + 36^5 + 36^6 ≈ 36 + 1296 + 46656 + 1.68 juta + 60 juta + 2.1 miliar ≈ 2.2 miliar kombinasi
Kecepatan Hash phpass (1 core CPU)
Karena WordPress phpass pakai 8192 iterasi MD5, maka:
-
Rata-rata kecepatan hashing phpass: sekitar 100–300 hash per detik per core (tergantung prosesor).
-
Kita pakai angka aman: 150 hash/detik
Estimasi Waktu
2.2 miliar kombinasi / 150 hash/detik = 14.6 juta detik ≈ 169 hari nonstop (1 core) ≈ 5.5 bulan
Tapi Ini Bisa Lebih Cepat Jika:
-
Kamu pakai wordlist yang tepat (tidak brute-force full).
-
Kamu parallelkan dengan multi-core atau pakai GPU (Hashcat).
-
Kamu batasi kombinasi misalnya ke panjang maksimal 5 karakter, atau hanya angka.
Simulasi Ringan
Kalau kamu hanya cek kombinasi a-z0-9
, panjang 1-4:
36^1 + 36^2 + 36^3 + 36^4 = 36 + 1296 + 46656 + 1.68 juta ≈ 1.7 juta
Dengan 150 hash/detik:
1.7 juta / 150 ≈ 11.3 ribu detik ≈ 3 jam
Masih masuk akal untuk eksperimen. Tapi begitu naik ke panjang 5 atau 6 → langsung eksponensial!