Hash File: MD5, SHA-1, SHA-256 dan Cara Memverifikasi Unduhan
Hash file adalah nilai dengan panjang tetap yang dihitung dari isi file, biasanya digunakan untuk membandingkan file yang diunduh dengan salinan referensi. Byte dan algoritma yang sama menghasilkan hasil yang sama, tetapi file yang berbeda secara teoritis bisa memiliki hash sama. Untuk verifikasi file rutin, pilih SHA-256 jika penyedia memberikannya, dan periksa dari mana nilai referensinya berasal.
Apa yang diwakili oleh hash file?
Fungsi hash menghitung ringkasan yang disebut nilai hash atau digest. MD5, SHA-1, dan SHA-256 masing-masing memiliki panjang keluaran tetap: dokumen kecil dan penginstal besar menghasilkan digest yang sama panjang ketika Anda menggunakan algoritma yang sama. Digest bukanlah salinan terkompresi dari mana Anda bisa merekonstruksi file. Tinjauan NIST tentang fungsi hash menjelaskan sifat-sifat ini dan persyaratan keamanan yang relevan.
Alat hashing file biasa membaca byte di dalam sebuah file, bukan namanya atau lokasi foldernya. Mengganti nama file tanpa mengubah isinya tidak mengubah hash. Sebaliknya, dua dokumen yang menampilkan teks yang sama mungkin mengandung byte yang berbeda karena akhiran baris, encoding karakter, atau metadata yang tersimpan di dalam file.
Hash dapat digambarkan sebagai sidik jari, tetapi itu bukan pengenal yang sepenuhnya unik. Terjadi tabrakan ketika input yang berbeda menghasilkan digest yang sama. Hash kriptografi yang aman dirancang agar sulit menemukan input seperti itu. MD5 dan SHA-1 tidak lagi memenuhi persyaratan keamanan untuk aplikasi yang tahan terhadap tabrakan.
MD5 vs SHA-1 vs SHA-256
MD5 adalah singkatan dari Message-Digest Algorithm 5; SHA adalah singkatan dari Secure Hash Algorithm. SHA-256 termasuk dalam keluarga SHA-2 dan menghasilkan 256 bit. Alat biasanya menampilkan hasil sebagai teks heksadesimal. Setiap karakter heksadesimal mewakili empat bit, sehingga menghasilkan panjang sebagai berikut:
| Algoritma | Ukuran digest | Panjang heksadesimal | Pilihan untuk verifikasi file |
|---|---|---|---|
| MD5 | 128 bit · 16 byte | 32 karakter | Mungkin diperlukan untuk membandingkan checksum warisan, tetapi tidak boleh digunakan untuk menetapkan perlindungan terhadap manipulasi berbahaya. |
| SHA-1 | 160 bit · 20 byte | 40 karakter | Dapat dibandingkan dengan referensi lama; hindari memilihnya untuk aplikasi keamanan baru. |
| SHA-256 | 256 bit · 32 byte | 64 karakter | Pilihan praktis untuk pemeriksaan integritas unduhan rutin ketika penerbit menyediakan nilai SHA-256. |
Keterbatasan MD5 dan ketahanannya terhadap tabrakan dibahas dalam pertimbangan keamanan MD5 dalam RFC 6151. Spesifikasi SHA dijelaskan dalam Secure Hash Standard dari NIST. Mendeteksi kesalahan transmisi yang tidak disengaja dan melindungi dari penyerang yang dapat mengubah file merupakan dua kebutuhan yang berbeda.
Selalu bandingkan hash dari algoritma yang sama. Nilai SHA-256 yang dihitung secara lokal tidak dapat diperiksa terhadap nilai MD5 yang dipublikasikan. Selain itu, output 256-bit tidak berarti kekuatan 256-bit terhadap setiap jenis serangan. Lihat panduan algoritma dan kekuatan keamanan NIST untuk batasan SHA-1 dan perbedaan antara jenis serangan.
Apa yang terjadi ketika satu karakter berubah?
Contoh Python ini menghitung SHA-256 untuk byte ASCII abc dan abC. Hanya karakter terakhir yang berubah, dan tidak ada input yang menyertakan baris baru di akhir. Output yang ditampilkan telah diperiksa dengan Python 3.12; kedua digest mengandung 64 karakter heksadesimal.
import hashlib
for data in (b"abc", b"abC"):
print(data.decode("ascii") + ": " + hashlib.sha256(data).hexdigest())
Output:
abc: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
abC: 0a2432a1e349d8fdb9bfca91bba9e9f2836990fe937193d84deef26c6f3b8f76
Input yang terlihat mirip ini menghasilkan digest yang sangat berbeda. Contoh ini tidak membuktikan bahwa setiap pasangan input yang berbeda harus memiliki hash yang berbeda. Output deterministik untuk input yang sama, kemungkinan terjadinya tabrakan, dan ketahanan terhadap serangan yang disengaja adalah properti yang terpisah.
Cara memverifikasi file yang diunduh
Pemeriksaan integritas memeriksa apakah data berbeda dari referensi. Menghitung digest baru saja bukanlah verifikasi: Anda memerlukan hash referensi tepercaya untuk dibandingkan dengannya.
- Dapatkan hash referensi dari halaman unduhan resmi penerbit atau saluran distribusi tepercaya lainnya.
- Pastikan sistem operasi, arsitektur CPU, versi, dan nama file sesuai dengan unduhan. Periksa algoritma yang digunakan oleh referensi.
- Tunggu hingga unduhan selesai, lalu hitung hash-nya dengan algoritma yang sama. Jangan mengubah atau menimpa file saat sedang dibaca.
- Untuk SHA-256, bandingkan semua 64 karakter heksadesimal, bukan hanya bagian awalnya. Huruf heksadesimal besar dan kecil mewakili nilai yang sama.
- Jika nilainya berbeda, jangan jalankan atau pasang file tersebut. Periksa kembali target perbandingan, lalu unduh lagi dari saluran resmi dan ulangi verifikasi.
Jika seorang penyerang dapat mengganti file sekaligus hash referensinya, nilai yang cocok tidak membuktikan siapa yang menyediakannya. Kecocokan adalah perbandingan dengan data referensi, bukan bukti bahwa file bebas dari malware. Ketika checksum yang ditandatangani atau tanda tangan digital disediakan, ikuti petunjuk penerbit dan verifikasi menggunakan kunci publik tepercaya.
Perintah SHA-256 untuk Windows, Linux, dan macOS
example.iso di bawah ini adalah contoh nama file. Ganti dengan file dan jalur unduhan Anda yang sebenarnya, dan beri tanda kutip pada jalur yang mengandung spasi. Perintah-perintah ini membaca file untuk menghitung digest-nya; mereka tidak mengubah isinya.
Windows: Get-FileHash di PowerShell
Buka PowerShell dari menu Start dan jalankan perintah berikut. -LiteralPath memperlakukan jalur secara literal daripada menafsirkan karakter wildcard. -Algorithm SHA256 secara eksplisit memilih algoritma.
Get-FileHash -LiteralPath 'C:\Downloads\example.iso' -Algorithm SHA256 | Format-List
Periksa bidang Algorithm, Hash, dan Path. SHA-256 adalah default, tetapi menyebutkannya membuat perbandingan lebih jelas. Dokumentasi Get-FileHash dari Microsoft menjelaskan algoritma dan output yang didukung. Jika file tidak dapat ditemukan, periksa jalur dan ekstensi aslinya di File Explorer.
Linux: sha256sum
Di lingkungan dengan GNU Coreutils sha256sum terpasang, buka terminal dan jalankan perintah ini. Output biasanya mencakup digest diikuti oleh nama file.
sha256sum "/home/user/Downloads/example.iso"
Jika penerbit menyediakan file SHA256SUMS berformat GNU, letakkan file tersebut di samping file yang akan diverifikasi, buka terminal di folder itu, dan periksa daftar menggunakan perintah di bawah ini. Jalur yang tercantum dalam daftar harus ada. Daftar lengkap mungkin melaporkan file yang hilang jika Anda hanya mengunduh sebagian entrinya.
sha256sum --check SHA256SUMS
Entri yang cocok dilaporkan sebagai OK; ketidakcocokan dilaporkan sebagai kegagalan. Daftar checksum itu sendiri juga harus berasal dari sumber yang tepercaya. Konsultasikan manual GNU SHA-2 utilities untuk perintah dan opsi pemeriksaannya. Jika perintah tidak ada, periksa apakah Coreutils telah terpasang di distribusi Anda.
macOS: shasum
Jika shasum tersedia di terminal Anda, pilih secara eksplisit SHA-256 dengan -a 256. Tanpa opsi itu, shasum secara default menggunakan SHA-1, yang dapat menyebabkan ketidakcocokan algoritma.
shasum -a 256 "/Users/user/Downloads/example.iso"
Untuk daftar checksum yang kompatibel, gunakan shasum -a 256 -c SHA256SUMS. dokumentasi shasum dari pengelolanya menjelaskan pemilihan algoritma dan -c. Instruksi macOS ini didasarkan pada dokumentasi alat, bukan pada eksekusi di macOS; metode Python di bawah adalah alternatif ketika alat tidak tersedia.
Hitung SHA-256 file besar dengan Python
Dengan Python 3 terpasang, Anda dapat menggunakan modul hashlib dari pustaka standar. Simpan kode ini sebagai hash-file.py. Kode ini membuka file dalam mode biner, rb, dan membaca satu mebibyte (MiB) pada satu waktu alih-alih memuat seluruh file ke dalam memori. Sintaks ekspresi-penugasan ini memerlukan Python 3.8 atau versi lebih baru.
import hashlib
import sys
if len(sys.argv) != 2:
raise SystemExit("Usage: python hash-file.py FILE")
digest = hashlib.sha256()
with open(sys.argv[1], "rb") as file:
while chunk := file.read(1024 * 1024):
digest.update(chunk)
print(digest.hexdigest())
Dari folder skrip, berikan path file sebenarnya Anda sebagai berikut. Jika perintah Python 3 Anda adalah python3 atau py, gunakan perintah tersebut menggantikan python.
python hash-file.py "example.iso"
Keluaran berupa digest SHA-256 heksadesimal sepanjang 64 karakter. Byte yang sama menghasilkan nilai yang sama dengan PowerShell dan alat lain, meskipun penggunaan huruf besar dan kecil dapat berbeda. Dokumentasi resmi modul hashlib Python menjelaskan update() dan hexdigest(). Berkas kecil, kosong, dan yang dibaca dalam beberapa blok telah diperiksa di Windows menggunakan Python 3.12.14 dan PowerShell 7.6.5; hasilnya cocok.
Yang harus diperiksa ketika hash tidak cocok
- File rilis berbeda: periksa untuk x64 versus ARM64, installer versus arsip, atau versi yang berbeda.
- Algoritma berbeda: MD5, SHA-1, dan SHA-256 menghasilkan digest yang berbeda. Periksa kembali nama algoritmanya.
- Unduhan tidak lengkap: pastikan bahwa unduhan telah selesai dan alat unduhan melaporkan tidak ada kesalahan.
- Ekstraksi atau konversi: hash referensi dari sebuah arsip tidak berlaku untuk file yang diekstrak dari arsip tersebut. Menyimpan di editor, mengubah akhir baris, dan mengompresi ulang gambar dapat mengubah byte.
- Kesalahan jalur atau penyalinan: periksa file yang benar-benar dibaca oleh perintah dan seluruh nilai referensi. Hindari digest yang terpotong atau yang disalin dari file lain.
Jangan mengganti nilai referensi yang tidak dapat dijelaskan dengan nilai yang Anda hitung sendiri untuk memaksa kecocokan. Konfirmasi saluran distribusi dan target terlebih dahulu. Jika unduhan baru masih berbeda, periksa petunjuk dari penerbit atau apakah rilis telah diperbaiki.
Apa yang bisa dan tidak bisa dilakukan hash
| Penggunaan | Peran hashing | Persyaratan tambahan |
|---|---|---|
| Integritas file | Bandingkan isi file saat ini dengan digest referensi. | Sumber referensi dan algoritme harus sesuai. |
| Deteksi duplikat | Kelompokkan file dengan hash yang cocok sebagai kandidat duplikat. | Pertimbangkan adanya benturan dan bandingkan byte ketika kesamaan tepat sangat penting. |
| Tanda tangan digital | Skema tanda tangan dapat menggunakan digest dari data. | Menghitung hash saja tidak membuat tanda tangan atau mengautentikasi penulis. |
| Penyimpanan kata sandi | Verifikasi kata sandi juga menggunakan mekanisme berbasis hash. | Gunakan metode penyimpanan kata sandi khusus alih-alih hanya melakukan hashing file dengan SHA-256. |
Hashing bukanlah enkripsi. Enkripsi dimaksudkan untuk memungkinkan pemulihan teks asli dengan kunci yang sesuai; hash bukan format untuk membangun kembali inputnya. Namun, input yang pendek atau dapat diprediksi dapat ditebak dan hash-nya dibandingkan, jadi hanya dengan melakukan hashing sesuatu tidak menjamin kerahasiaannya.
Untuk kata sandi, pilih implementasi terpercaya dari skema hash kata sandi khusus seperti Argon2id, dengan biaya yang sesuai dan salt unik, alih-alih MD5, SHA-1, atau SHA-256 biasa. Salt adalah nilai per kata sandi yang membuat serangan tebakan yang dihitung sebelumnya menjadi kurang berguna. OWASP Password Storage Cheat Sheet menjelaskan mengapa penyimpanan kata sandi dan hashing file membutuhkan desain yang berbeda. Untuk pemeriksaan unduhan, langkah-langkah esensial adalah menghitung SHA-256, mendapatkan referensi terpercaya, dan membandingkan digest secara lengkap.




