MD5 vs SHA-256: Algoritma Hash Mana yang Harus Anda Gunakan?
Memilih algoritma hash yang salah bisa membuat sistem rentan terhadap serangan collision atau menambah overhead performa yang tidak perlu. Artikel ini membandingkan empat algoritma hash yang umum digunakan dan kapan masing-masing tepat dipakai.
Apa Itu Fungsi Hash?
Fungsi hash kriptografis mengambil data input sembarang dan menghasilkan output berukuran tetap (“digest” atau “hash”). Fungsi hash yang baik memiliki tiga properti:
- Deterministik: Input yang sama selalu menghasilkan output yang sama.
- Satu arah: Anda tidak bisa membalikkan hash untuk mendapatkan input asli.
- Tahan collision: Secara komputasional tidak memungkinkan menemukan dua input berbeda yang menghasilkan hash yang sama.
Ketika properti #3 rusak, algoritma tersebut dianggap “broken secara kriptografis” — inilah yang terjadi pada MD5 dan SHA-1.
Perbandingan Algoritma Sekilas
| Properti | MD5 | SHA-1 | SHA-256 | SHA-512 |
|---|---|---|---|---|
| Ukuran output | 128 bit (32 karakter hex) | 160 bit (40 karakter hex) | 256 bit (64 karakter hex) | 512 bit (128 karakter hex) |
| Ukuran blok | 512 bit | 512 bit | 512 bit | 1024 bit |
| Tahun diperkenalkan | 1991 | 1995 | 2001 | 2001 |
| Perancang | Ron Rivest | NSA / NIST | NSA / NIST | NSA / NIST |
| Ketahanan collision | Broken (2004) | Broken (2017) | Aman | Aman |
| Kecepatan (relatif) | Tercepat | Cepat | Sedang | Sedang (lebih cepat di 64-bit) |
| Status NIST | Deprecated | Deprecated | Direkomendasikan | Direkomendasikan |
MD5: Cepat tapi Broken
MD5 (Message-Digest Algorithm 5) dirancang oleh Ronald Rivest pada tahun 1991 dan menjadi standar de facto untuk checksum sepanjang tahun 1990-an dan awal 2000-an. Algoritma ini menghasilkan hash 128-bit dalam 32 karakter heksadesimal.
Mengapa MD5 Broken
Pada tahun 2004, Xiaoyun Wang mendemonstrasikan serangan collision praktis terhadap MD5. Pada tahun 2008, para peneliti membuat sertifikat SSL palsu menggunakan collision MD5, membuktikan bahwa serangan tersebut bukan sekadar teoretis. Saat ini, collision MD5 dapat dihasilkan dalam hitungan detik pada hardware konsumen.
// Generate hash MD5 (hanya untuk penggunaan non-keamanan)
// Web Crypto API tidak tersedia untuk MD5 — gunakan library
import { md5 } from 'hash-wasm';
const hash = await md5('Hello, World!');
console.log(hash);
// → 'bea8252ff4e80f41719ea13cdf007273' (32 karakter hex)
Kapan MD5 Masih Dapat Diterima
Meskipun broken secara kriptografis, MD5 masih berguna untuk aplikasi non-keamanan:
- Deduplikasi file: Mendeteksi file duplikat dalam sistem penyimpanan
- Cache key: Menghasilkan key pendek dan deterministik untuk pencarian cache
- Checksum integritas data: Verifikasi cepat bahwa data tidak rusak secara tidak sengaja (bukan dimanipulasi secara sengaja)
- Kompatibilitas sistem legacy: Berinteraksi dengan sistem lama yang memerlukan MD5
Perbedaan kuncinya: MD5 melindungi dari kerusakan tidak disengaja tetapi tidak dari manipulasi yang disengaja.
SHA-1: Deprecated tapi Masih Digunakan
SHA-1 (Secure Hash Algorithm 1) dirancang oleh NSA dan diterbitkan oleh NIST pada tahun 1995. Algoritma ini menghasilkan hash 160-bit dalam 40 karakter heksadesimal.
Pada tahun 2017, Google dan CWI Amsterdam mendemonstrasikan collision SHA-1 praktis pertama (serangan “SHAttered”), menghasilkan dua file PDF berbeda dengan hash SHA-1 yang sama. Browser-browser besar dan otoritas sertifikat sudah mulai menolak sertifikat SHA-1 sejak tahun 2016.
Gunakan SHA-1 hanya untuk kompatibilitas dengan sistem yang memerlukannya (misalnya, Git menggunakan SHA-1 untuk commit hash, meskipun sedang bertransisi ke SHA-256). Untuk pengembangan baru, pilih SHA-256 atau yang lebih kuat.
SHA-256: Standar Saat Ini
SHA-256 adalah bagian dari keluarga SHA-2, dirancang oleh NSA dan diterbitkan oleh NIST pada tahun 2001. Algoritma ini menghasilkan hash 256-bit dalam 64 karakter heksadesimal dan merupakan algoritma yang direkomendasikan untuk hampir semua kebutuhan hashing di tahun 2026.
// Generate hash SHA-256 menggunakan Web Crypto API (bawaan browser)
async function sha256(text) {
const data = new TextEncoder().encode(text);
const hash = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
const hash = await sha256('Hello, World!');
console.log(hash);
// → 'dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f'
Mengapa SHA-256 Menjadi Pilihan Default
- Tidak ada serangan yang diketahui: Per tahun 2026, tidak ada serangan collision atau preimage praktis yang ditemukan
- Bawaan browser: Tersedia melalui Web Crypto API di semua browser modern — tanpa perlu library
- Standar industri: Digunakan oleh sertifikat TLS, Bitcoin, package manager (npm, pip), Docker image digest, dan sebagian besar sistem verifikasi integritas
- Disetujui NIST: Direkomendasikan untuk semua aplikasi yang sensitif terhadap keamanan
SHA-512: Ketika Anda Butuh Lebih
SHA-512 menghasilkan hash 512-bit dalam 128 karakter heksadesimal. Algoritma ini menggunakan ukuran blok 1024-bit (vs 512 bit SHA-256), yang membuatnya lebih cepat dari SHA-256 pada prosesor 64-bit karena memproses lebih banyak data per siklus.
# Python: SHA-512 sama mudahnya dengan SHA-256
import hashlib
hash_256 = hashlib.sha256(b'Hello, World!').hexdigest()
hash_512 = hashlib.sha512(b'Hello, World!').hexdigest()
print(f"SHA-256: {hash_256}") # 64 karakter
print(f"SHA-512: {hash_512}") # 128 karakter
Gunakan SHA-512 ketika:
- Anda memerlukan margin keamanan yang lebih besar (ketahanan collision 256-bit vs 128-bit untuk SHA-256)
- Platform Anda 64-bit dan performa penting (SHA-512 bisa 1,5x lebih cepat dari SHA-256 pada x86-64)
- Protokol atau spesifikasi memerlukannya (beberapa skema sertifikat, persyaratan compliance tertentu)
Untuk sebagian besar aplikasi, SHA-256 sudah cukup. Panjang ekstra hash SHA-512 menggandakan penyimpanan dan bandwidth tanpa manfaat keamanan praktis untuk kasus penggunaan umum.
Framework Keputusan: Hash Mana yang Harus Digunakan
Untuk integritas file dan checksum
Gunakan SHA-256. Ini adalah standar untuk memverifikasi unduhan, membandingkan isi file, dan memastikan data tidak rusak. Jika Anda mengganti sistem berbasis MD5 yang sudah ada, SHA-256 adalah peningkatan langsung.
# Verifikasi integritas unduhan
sha256sum downloaded-file.tar.gz
# Bandingkan output dengan hash yang dipublikasikan
Untuk penyimpanan password
Jangan gunakan MD5 maupun SHA-256 secara langsung. Fungsi hash umum terlalu cepat untuk hashing password — penyerang bisa mencoba miliaran tebakan per detik. Sebagai gantinya, gunakan algoritma hashing password yang khusus:
| Algoritma | Status | Catatan |
|---|---|---|
| Argon2id | Direkomendasikan | Pemenang Password Hashing Competition 2015; memory-hard |
| bcrypt | Baik | Didukung luas; salt bawaan; work factor yang dapat disesuaikan |
| scrypt | Baik | Memory-hard; digunakan oleh beberapa sistem cryptocurrency |
| PBKDF2 | Dapat diterima | Disetujui NIST tapi tidak memory-hard; gunakan ≥600.000 iterasi |
| SHA-256 | Tidak memadai | Terlalu cepat; tanpa salt bawaan; rentan terhadap serangan GPU |
| MD5 | Berbahaya | Broken + terlalu cepat; mudah dicrack |
// SALAH: Jangan hash password dengan SHA-256
const hash = await sha256(password); // Bisa dicrack miliaran/detik
// BENAR: Gunakan bcrypt (contoh Node.js)
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash(password, 12); // 12 round = ~250ms
const isValid = await bcrypt.compare(input, hash);
Untuk HMAC dan autentikasi pesan
Gunakan SHA-256 dengan HMAC. HMAC (Hash-based Message Authentication Code) menggabungkan fungsi hash dengan secret key untuk memverifikasi integritas dan autentisitas:
// HMAC-SHA256 untuk verifikasi signature webhook
async function verifyWebhook(payload, signature, secret) {
const key = await crypto.subtle.importKey(
'raw', new TextEncoder().encode(secret),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['verify']
);
const sig = Uint8Array.from(atob(signature), c => c.charCodeAt(0));
return crypto.subtle.verify('HMAC', key, sig, new TextEncoder().encode(payload));
}
Untuk content-addressable storage
Gunakan SHA-256. Git, Docker, dan IPFS semua menggunakan content-addressable storage di mana hash dari konten berfungsi sebagai alamatnya. SHA-256 memberikan ketahanan collision yang cukup untuk menjamin keunikan di miliaran objek.
Benchmark Performa
Kecepatan hashing relatif pada prosesor x86-64 modern (lebih tinggi = lebih cepat):
| Algoritma | Throughput (MB/s) | Kecepatan Relatif |
|---|---|---|
| MD5 | ~3.200 | 1,0x (baseline) |
| SHA-1 | ~2.400 | 0,75x |
| SHA-256 | ~1.500 | 0,47x |
| SHA-512 | ~2.100 | 0,66x |
Catatan: SHA-512 lebih cepat dari SHA-256 pada prosesor 64-bit karena internal state-nya yang lebih lebar. Pada sistem 32-bit, situasinya terbalik. Untuk sebagian besar aplikasi, perbedaan kecepatan tidak signifikan — hashing file 1 MB memakan waktu kurang dari 1 ms dengan algoritma mana pun.
Kesalahan Umum yang Harus Dihindari
1. Menggunakan MD5 untuk keamanan
Collision MD5 sangat mudah dihasilkan. Jangan pernah gunakan MD5 untuk tanda tangan digital, validasi sertifikat, atau skenario apa pun di mana penyerang bisa membuat input berbahaya.
2. Hashing password dengan SHA-256
SHA-256 bukan hash password. Algoritma ini terlalu cepat, tidak memiliki salt bawaan, dan rentan terhadap serangan rainbow table dan brute-force berbasis GPU. Gunakan Argon2id atau bcrypt. Untuk memahami alasannya, baca panduan kami tentang entropi password — yang menjelaskan matematika di balik ketahanan brute-force.
3. Mengasumsikan panjang hash sama dengan keamanan
Hash 512-bit tidak secara otomatis “lebih aman” dari hash 256-bit untuk ketahanan collision. Margin keamanan SHA-256 (ketahanan collision 128-bit) sudah jauh melampaui kemampuan brute-force. Pilih berdasarkan kebutuhan aktual Anda, bukan panjang hash.
4. Membuat kombinasi hash sendiri
Pola seperti SHA256(MD5(data)) atau MD5(data + salt) tidak secara ajaib memperbaiki algoritma yang broken. Gunakan satu algoritma yang telah teruji (SHA-256) atau konstruksi yang tepat (HMAC) sebagai gantinya.
Coba Sendiri
Hasilkan dan bandingkan hash MD5, SHA-1, SHA-256, dan SHA-512 secara instan dengan Hash Generator kami — tempel teks atau drop file, dan lihat keempat digest secara berdampingan. 100% di browser Anda, data tidak pernah meninggalkan perangkat Anda.
Untuk tinjauan lebih luas tentang keamanan web termasuk autentikasi, validasi input, dan security header, baca panduan Dasar-Dasar Keamanan Web kami. Anda juga dapat menjelajahi semua tool penting untuk developer kami untuk encoding, hashing, dan konversi data.
Pertanyaan yang Sering Diajukan
Apakah MD5 masih aman untuk checksum?
MD5 aman untuk mendeteksi kerusakan file yang tidak disengaja — jika file rusak saat diunduh, hash MD5-nya hampir pasti akan berubah. Namun, MD5 tidak aman terhadap manipulasi yang disengaja karena penyerang dapat membuat file yang dimodifikasi dengan hash MD5 yang sama. Untuk verifikasi integritas di mana musuh menjadi perhatian (misalnya, distribusi perangkat lunak), gunakan SHA-256 sebagai gantinya.
Seberapa lambat SHA-256 dibandingkan MD5?
SHA-256 kira-kira 2x lebih lambat dari MD5 dalam throughput mentah. Pada hardware modern, MD5 melakukan hashing sekitar 3.200 MB/s sementara SHA-256 sekitar 1.500 MB/s. Dalam praktiknya, perbedaan ini tidak signifikan untuk sebagian besar aplikasi — hashing file 100 MB memakan waktu sekitar 70 ms dengan SHA-256. Perbedaan performa hanya penting untuk skenario throughput sangat tinggi seperti inspeksi paket jaringan atau deduplikasi penyimpanan berskala besar.
Haruskah saya menggunakan SHA-256 atau SHA-512 untuk aplikasi saya?
Gunakan SHA-256 untuk sebagian besar aplikasi — ini memberikan ketahanan collision 128-bit, yang jauh melampaui kemampuan brute-force. Pilih SHA-512 jika: (a) platform Anda 64-bit dan Anda memerlukan throughput maksimum, (b) spesifikasi atau persyaratan compliance mengharuskannya, atau (c) Anda menginginkan margin keamanan lebih besar untuk integritas data jangka panjang. Panjang hash ekstra SHA-512 menggandakan penyimpanan dan jarang diperlukan.
Bisakah SHA-256 dicrack atau dibalik?
SHA-256 tidak bisa dibalik — ini adalah fungsi satu arah. Per tahun 2026, tidak ada serangan preimage atau collision praktis yang ditemukan terhadap SHA-256. Serangan terbaik yang diketahui memerlukan 2^128 operasi untuk collision, yang secara komputasional tidak memungkinkan dengan teknologi saat ini atau yang dapat diprediksi. SHA-256 disetujui oleh NIST dan digunakan di infrastruktur kritis termasuk TLS, Bitcoin, dan sistem pemerintah.
Mengapa beberapa sistem masih menggunakan MD5 jika sudah broken?
Kompatibilitas legacy adalah alasan utamanya. Banyak sistem, protokol, dan format file yang ada dirancang seputar MD5 sebelum kelemahannya ditemukan. Migrasi memerlukan perubahan terkoordinasi di semua komponen. Untuk penggunaan non-keamanan seperti cache key dan deduplikasi, keunggulan kecepatan MD5 dan output yang lebih pendek menjadikannya pilihan pragmatis di mana serangan collision bukan masalah dalam threat model.