Lewati ke konten
Toova
Semua Alat

MD5 vs SHA-256 — Mengapa Anda Harus Berhenti Menggunakan MD5

Toova

MD5 ada di mana-mana. Ia hadir di setiap bahasa pemrograman, setiap basis data, setiap SDK penyedia cloud. Pengembang menggunakannya karena kebiasaan — ia cepat, ia menghasilkan string heksa 32 karakter yang rapi, dan API-nya adalah dua baris kode. Masalahnya: MD5 telah rusak secara kriptografis sejak 2004, dan serangan hanya menjadi lebih cepat dan lebih murah sejak saat itu.

Ini bukan teoretis. Sebuah serangan siber 2012 pada infrastruktur Iran — malware Flame — memalsukan sertifikat penandatanganan kode Microsoft dengan mengeksploitasi kolisi MD5. Teknik yang sama yang didemonstrasikan oleh kriptografer akademis dalam sebuah makalah menjadi senjata yang digunakan dalam spionase geopolitik. MD5 tidak sedikit melemah; ia secara fundamental terkompromi untuk aplikasi apa pun di mana lawan dapat memilih input.

SHA-256, bagian dari keluarga SHA-2 yang distandarisasi oleh NIST, tidak memiliki serangan kolisi yang diketahui dan tetap menjadi standar untuk integritas kriptografis pada 2026. Artikel ini menjelaskan dengan tepat apa arti perbedaan tersebut, kapan (jarang) MD5 masih dapat diterima, dan cara bermigrasi dengan aman. Anda dapat menghitung kedua hash secara langsung dengan alat MD5 hash Toova dan SHA-256 hash Toova.

Cara Kerja Fungsi Hash

Sebuah fungsi hash kriptografis mengambil input dengan panjang apa pun dan menghasilkan output dengan panjang tetap (digest) dengan sifat-sifat berikut:

  • Deterministik: input yang sama selalu menghasilkan output yang sama.
  • Efek avalanche: perubahan satu bit di input mengubah output sepenuhnya.
  • Resistensi preimage: diberikan hash, secara komputasi tidak layak untuk menemukan input.
  • Resistensi kolisi: secara komputasi tidak layak untuk menemukan dua input berbeda yang menghasilkan hash yang sama.

Efek avalanche adalah mengapa baik MD5 maupun SHA-256 terlihat serupa pada pandangan pertama:

MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6

MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b
SHA-256("The quick brown fox jumps over the lazy dog")
= d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592

SHA-256("The quick brown fox jumps over the lazy cog")
= e4c4d8f3bf76b692de791a173e05321150f7a345b46484fe427f6acc7ecc81be

Satu karakter diubah di input ("dog" → "cog"), namun output sepenuhnya berbeda. Sifat ini berlaku untuk kedua algoritma. Perbedaannya adalah apa yang terjadi ketika penyerang mencoba menemukan kolisi secara sengaja.

MD5 — Linimasa Kegagalan (1996–2025)

MD5 dirancang oleh Ron Rivest pada 1991 sebagai pengganti MD4. Pada 1996, Hans Dobbertin telah menemukan kolisi dalam fungsi kompresi MD5 — bukan algoritma lengkap, tetapi tanda peringatan bahwa desainnya rapuh. Komunitas keamanan mulai merekomendasikan migrasi ke SHA-1. Sebagian besar sistem mengabaikan ini.

2004 — Kolisi penuh didemonstrasikan

Pada Agustus 2004, Xiaoyun Wang dan Hongbo Yu mempresentasikan serangan kolisi praktis pada MD5 di konferensi CRYPTO. Mereka dapat menghasilkan dua pesan 1.024-bit berbeda dengan hash MD5 yang sama dalam waktu kurang dari satu jam pada sebuah klaster. Jaminan fundamental MD5 — resistensi kolisi — rusak.

NIST segera mulai men-deprecate MD5 untuk penggunaan federal. Sebagian besar panduan industri mengikuti. Deployment aktual MD5 dalam sistem produksi hampir tidak berubah.

2008 — Sertifikat CA palsu

Sekelompok peneliti (Sotirov, Stevens, et al.) mendemonstrasikan bahwa mereka dapat membuat sertifikat Certificate Authority palsu yang akan dipercaya oleh semua peramban utama. Serangan mengeksploitasi fakta bahwa beberapa certificate authority masih menandatangani sertifikat dengan MD5. Para peneliti menghasilkan kolisi antara permintaan sertifikat yang terlihat sah dan sertifikat CA yang dibuat sendiri — kemudian membuat CA nyata menandatangani yang sah, menghasilkan tanda tangan yang juga valid untuk sertifikat CA palsu.

Setiap peramban utama segera memblokir sertifikat yang ditandatangani MD5. Sebagian besar certificate authority berhenti menerbitkannya. Satu pelajaran utama: kelemahan kriptografis menjadi dapat dieksploitasi pada saat penyerang mengontrol input ke fungsi hash.

2012 — Malware Flame

Malware cyberespionage Flame, ditemukan pada 2012 dan diatribusikan kepada aktor negara, memalsukan sertifikat Windows Update Microsoft menggunakan kolisi chosen-prefix MD5. Serangan ini lebih canggih daripada demonstrasi 2008: penyerang dapat membuat payload jahat yang berkolisi dengan sertifikat Microsoft yang sah dalam kondisi di mana infrastruktur penandatanganan Microsoft akan bekerja sama tanpa sadar.

Hasilnya: Flame dapat mendistribusikan dirinya sendiri melalui Windows Update seolah-olah itu adalah pembaruan Microsoft yang sah, dengan tanda tangan Microsoft yang valid. Ratusan ribu mesin Windows di Iran, Lebanon, Suriah, dan Sudan terinfeksi. Ini adalah eksploitasi dunia nyata serangan kolisi MD5 pada skala negara. Lihat artikel Wikipedia tentang malware Flame untuk sejarah lengkapnya.

2019–2025 — HashClash dan kolisi instan

Proyek HashClash (Marc Stevens, CWI Amsterdam) terus mendorong pembangkitan kolisi MD5 ke batas praktis. Pada 2019, kolisi MD5 chosen-prefix — di mana penyerang dapat memilih prefix arbitrer untuk kedua pesan yang berkolisi — dapat dihasilkan dalam hitungan hari pada perangkat keras commodity. Pada 2022, implementasi yang dioptimalkan mengurangi ini menjadi hitungan jam. Pada 2024, sebuah makalah HashClash mendemonstrasikan kolisi dalam waktu kurang dari satu menit pada satu GPU modern.

Lintasannya jelas: serangan kolisi MD5 tidak menjadi lebih sulit seiring perangkat keras meningkat — mereka menjadi lebih mudah. Apa yang membutuhkan klaster pada 2004 membutuhkan laptop pada 2026.

SHA-256 — Mengapa Ia Bertahan

SHA-256 adalah bagian dari keluarga SHA-2, dirancang oleh NSA dan distandarisasi oleh NIST pada 2001. Ia menghasilkan digest 256-bit (32-byte). Tidak ada serangan kolisi praktis terhadap SHA-256 yang diketahui pada 2026. Serangan terbaik yang dipublikasikan mengurangi faktor kerja teoretis untuk menemukan kolisi menjadi sekitar 2^187 operasi — masih jauh di luar sumber daya komputasi apa pun yang ada atau dapat diramalkan.

Margin keamanan SHA-256 secara sengaja konservatif. Bahkan jika perangkat keras meningkat dengan faktor satu miliar (sekitar 30 penggandaan dalam istilah Hukum Moore), memecahkan SHA-256 tetap secara komputasi tidak layak. Faktor kerja efektif MD5 2^18 hingga 2^23 untuk kolisi berada dalam jangkauan perangkat keras sederhana pada 2004.

SHA-256 juga lebih cepat dari yang mungkin Anda harapkan: CPU modern menyertakan instruksi SHA khusus (Intel SHA Extensions, ARM Cryptography Extensions) yang memungkinkan perangkat lunak menghitung jutaan hash SHA-256 per detik per core. Ia tidak secara berarti lebih lambat daripada MD5 untuk kasus penggunaan tipikal.

Kapan MD5 Masih Dapat Diterima (Jarang)

"Rusak" tidak berarti "tidak berguna untuk setiap tujuan." MD5 tetap dapat diterima dalam konteks di mana:

  • Tidak ada lawan: mendeteksi kerusakan file yang tidak disengaja dalam sistem internal tepercaya — bukan memverifikasi unduhan dari internet, tetapi memeriksa apakah salinan file selesai dengan sukses.
  • Kecepatan lebih penting daripada keamanan: menghitung kunci cache atau pengenal shard di mana kolisi hanya berarti cache miss, bukan pelanggaran keamanan. Model penyerang tidak ada.
  • Anda mencocokkan sistem eksternal yang ada: beberapa API legacy masih mengirim MD5 ETag atau checksum. Anda dapat menerima dan menghitung MD5 untuk interoperabilitas, selama Anda tidak menggunakannya untuk keputusan keamanan.
  • Partisi tabel hash: mendistribusikan data di seluruh bucket berdasarkan MD5 dari kunci. Kolisi di sini menyebabkan ketidakseimbangan, bukan kegagalan keamanan.

Benang merah yang sama: MD5 dapat diterima ketika aplikasi tidak bergantung pada resistensi kolisi dan tidak ada lawan yang dapat membuat input. Segera setelah salah satu kondisi pecah — penyerang hadir, atau kolisi = kegagalan keamanan — beralihlah ke SHA-256.

Mitos Umum Tentang MD5

"MD5 baik-baik saja jika kita menambahkan salt"

Salting mengubah input sehingga dua pengguna dengan password yang sama mendapatkan hash yang berbeda — itu mencegah serangan rainbow table. Tetapi itu tidak memperbaiki masalah kolisi. Penyerang dengan hash MD5 yang di-salt masih dapat melakukan brute-force secara efisien karena MD5 cepat: GPU modern menghitung sekitar 10–30 miliar hash MD5 per detik. Salt menambahkan kerja yang proporsional dengan ruang pencarian, bukan kesulitan algoritma.

Untuk hashing password, baik MD5 maupun SHA-256 tidak tepat terlepas dari salting. Gunakan bcrypt, scrypt, atau Argon2.

"MD5 baik-baik saja karena kami hanya menggunakannya secara internal"

Sistem internal dibobol. Model ancaman "penyerang tidak dapat mengakses input kami" cenderung berlaku hingga serangan supply-chain, ancaman orang dalam, atau kesalahan konfigurasi mengekspos sistem. Serangan Flame terjadi terhadap sistem yang mungkin memiliki kepercayaan serupa pada kontrol internal mereka.

"SHA-256 berlebihan — MD5 lebih cepat"

Pada perangkat keras modern dengan instruksi akselerasi SHA, SHA-256 sekitar 2–5x lebih lambat daripada MD5. Untuk sebagian besar aplikasi — pemeriksaan integritas file, tanda tangan API, kunci cache — perbedaannya adalah mikrodetik per operasi, tidak terlihat dalam praktik. Argumen kinerja untuk MD5 atas SHA-256 hanya berlaku dalam skenario throughput sangat tinggi di mana bahkan mikrodetik penting, dan bahkan kemudian biasanya ada solusi yang lebih baik daripada menggunakan algoritma yang rusak.

Panduan Migrasi — MD5 ke SHA-256

Hashing password

// SALAH: MD5 untuk hashing password
const crypto = require('crypto');
const hash = crypto.createHash('md5').update(password).digest('hex');
// Waktu crack dengan GPU modern: detik hingga menit
// SALAH: SHA-256 untuk hashing password (masih terlalu cepat)
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update(password).digest('hex');

// BENAR: gunakan bcrypt, scrypt, atau Argon2 untuk password
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 12);

Migrasi hash password yang disimpan membutuhkan pendekatan bertahap. Pada setiap login yang berhasil: verifikasi password terhadap hash MD5 yang ada, lalu segera rehash dengan bcrypt dan ganti nilai yang disimpan. Tandai setiap akun sebagai bermigrasi. Setelah periode yang wajar (90 hari adalah tipikal), paksa reset password untuk akun yang tersisa yang masih menggunakan hash MD5.

Integritas file / checksum

# Linux: verifikasi unduhan file
sha256sum -c ubuntu-24.04-desktop-amd64.iso.sha256

# macOS
shasum -a 256 ubuntu-24.04-desktop-amd64.iso

# Windows PowerShell
Get-FileHash ubuntu-24.04-desktop-amd64.iso -Algorithm SHA256

Mengubah pemeriksaan integritas file dari MD5 ke SHA-256 biasanya merupakan find-and-replace sederhana dalam kode. Dua hal yang harus diperhatikan: (1) checksum yang ada yang disimpan di basis data atau file perlu dihitung ulang dan diperbarui — tidak ada jalan pintas; (2) API eksternal atau sistem penyimpanan yang menyediakan ETag MD5 (seperti beberapa konfigurasi S3) memerlukan koordinasi untuk beralih.

HMAC untuk otentikasi API

// HMAC-SHA-256 untuk otentikasi pesan
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', process.env.SECRET_KEY)
  .update(message)
  .digest('hex');

Jika Anda menggunakan HMAC-MD5 untuk penandatanganan permintaan API, beralihlah ke HMAC-SHA-256. Konstruksi HMAC menambahkan kunci rahasia, yang membatasi beberapa serangan MD5, tetapi HMAC-MD5 memiliki kerentanan length-extension dan primitif yang mendasarinya masih terkompromi. Standar modern (JWT, AWS SigV4, OAuth 2.0) semua menentukan HMAC-SHA-256. Generator HMAC Toova mendukung baik HMAC-SHA-256 maupun HMAC-SHA-512 untuk pengujian.

Tanda tangan digital dan sertifikat

Setiap sertifikat yang ditandatangani dengan MD5 harus diterbitkan ulang segera — sebagian besar certificate authority berhenti menerbitkan sertifikat yang ditandatangani MD5 setelah 2008, dan semua peramban utama dan sistem operasi menolaknya. Untuk PKI internal, audit konfigurasi CA Anda dan pastikan SHA-256 adalah algoritma tanda tangan minimum yang diizinkan. RSA-SHA256 atau ECDSA-SHA256 adalah standar saat ini.

MD5 vs SHA-256 — Referensi Cepat

Sifat MD5 SHA-256
Panjang output 128 bit (32 karakter heksa) 256 bit (64 karakter heksa)
Resistensi kolisi Rusak (serangan praktis) Aman (tidak ada serangan yang diketahui)
Hashing password Jangan pernah Tidak (gunakan bcrypt/Argon2)
Tanda tangan digital Jangan pernah Ya
Integritas file (keamanan) Jangan pernah Ya
Checksum non-keamanan Dapat diterima (tanpa penyerang) Selalu baik
Kunci cache Dapat diterima Selalu baik
Penandatanganan sertifikat TLS Ditolak oleh peramban Standar
Sesuai FIPS 140-3 Tidak (deprecated) Ya

Kesimpulan

MD5 telah rusak secara kriptografis sejak 2004. Kolisi chosen-prefix — teknik yang menggerakkan malware Flame — kini murah secara komputasi. Aplikasi apa pun yang bergantung pada MD5 untuk keamanan (tanda tangan, verifikasi integritas, otentikasi) rentan terhadap serangan yang membutuhkan menit waktu komputasi untuk dieksekusi.

SHA-256 tidak memiliki serangan praktis yang diketahui, diakselerasi perangkat keras pada CPU modern, dan merupakan standar untuk integritas kriptografis di seluruh TLS, penandatanganan kode, dan otentikasi API. Biaya kinerja dibandingkan dengan MD5 dapat diabaikan untuk hampir setiap kasus penggunaan.

Jalur migrasinya lurus: pemeriksaan integritas file adalah find-and-replace. Tanda tangan API memerlukan koordinasi version bump. Hash password memerlukan strategi rehash bertahap saat login. Untuk kode baru apa pun, SHA-256 harus menjadi pilihan default. Hitung dan bandingkan hash secara langsung dengan MD5 Toova dan SHA-256 Toova — atau hasilkan kode otentikasi HMAC-SHA-256 dengan generator HMAC.