Saat mengunduh berkas ISO Ubuntu atau installer perangkat lunak dari situs resminya, Anda mungkin pernah melihat deretan 64 karakter acak di dekat tombol unduh. Di tempat lain, saat lupa password, sebuah situs hanya menawarkan tautan reset, bukan mengirimkan password lama Anda. Dua hal yang tampak tidak berhubungan ini bekerja di atas mekanisme yang sama, yaitu hashing. Secara singkat, hashing adalah proses mengubah data berukuran apa pun menjadi nilai pendek berpanjang tetap yang tidak bisa dikembalikan ke bentuk asalnya.

Di artikel ini kita akan membahas cara kerja hashing, tiga pekerjaannya, algoritma yang layak dipakai pada 2026, dan cara memverifikasi berkas unduhan sendiri.

Apa Itu Hashing?

Hashing adalah proses mengolah data, entah teks, berkas, atau password, menjadi nilai berpanjang tetap memakai rumus matematika yang disebut fungsi hash (hash function). Hasilnya disebut hash, nilai hash, atau digest. Prosesnya satu arah: dari data, hash mudah dihitung, tetapi dari hash tidak ada rumus untuk kembali ke data asalnya.

Secara harfiah, hash artinya mencincang atau mengaduk sampai tidak berbentuk. Arti itu pas, karena fungsi hash memang mengaduk setiap bit data sampai polanya tidak lagi bisa dikenali. Konsepnya dikenal di dunia komputer sejak Hans Peter Luhn dari IBM menuliskannya dalam memo internal pada Januari 1953, jauh sebelum dipakai untuk keamanan.

Dalam percakapan sehari-hari, "hash" dan "hashing" sering dipertukarkan. Lebih tepatnya, hashing adalah prosesnya, hash function adalah rumusnya, dan hash adalah hasilnya. Jadi saat seseorang bertanya apa itu hash, jawabannya adalah deretan karakter keluaran proses tersebut, misalnya 64 karakter heksadesimal untuk algoritma SHA-256.

Arti hash di luar komputer berangkat dari makna "mencincang" yang sama. Hash brown adalah kentang yang dicacah lalu digoreng, sedangkan olahraga hash adalah lari lintas alam ala komunitas Hash House Harriers. Artikel ini hanya membahas hash di dunia komputer.

Cara Kerja Fungsi Hash dari Satu Kata sampai 100 MB

Cara termudah memahami fungsi hash adalah melihat contoh keluarannya langsung. Kami menghitung SHA-256 dari tiga masukan yang hampir sama di terminal macOS. Anda bisa mengulanginya dan akan mendapat hasil yang persis sama:

Bash
printf 'Indowebsite' | shasum -a 256
printf 'indowebsite' | shasum -a 256
printf 'Indowebsite.' | shasum -a 256

Hasilnya kami pecah menjadi dua baris berisi 32 karakter supaya muat di layar ponsel. Di terminal, tiap hash tampil dalam satu baris:

TEXT
Indowebsite
81f252ac6f73fa6123607f4fa4366a9a
7df2a6ffdaa4b6b478edccb1b20a871f

indowebsite
d36524a9c1f5024a139709904947f74d
6fa817bde68ee2b76d1f86e81d7813fb

Indowebsite.
c2a213a37c5a6767db165f3079339d5a
41b10d49518fb23a6101d651805adc8e

Dari tiga baris itu terlihat tiga sifat dasar fungsi hash:

  1. Deterministik: Masukan yang sama selalu menghasilkan hash yang sama, di komputer mana pun. Inilah yang membuat hash bisa dipakai untuk mencocokkan.
  2. Panjang keluaran tetap: Satu kata menghasilkan 64 karakter. Kami juga menghitung berkas 100 MB, dan hasilnya tetap 64 karakter, selesai dalam 0,034 detik.
  3. Efek longsor (avalanche effect): Mengganti satu huruf kapital saja mengubah 130 dari 256 bit keluaran, sekitar separuhnya. Tidak ada jejak kemiripan yang bisa ditelusuri balik.

Di balik layar, SHA-256 memotong data menjadi blok 512 bit, lalu mengolah tiap blok dalam 64 putaran operasi geser bit, putar bit, dan penjumlahan. Hasil satu blok menjadi bahan blok berikutnya, sehingga setiap bit masukan ikut menentukan keluaran akhir. Karena itu tidak ada "rumus hashing" sederhana yang bisa dihitung balik dengan tangan.

Fungsi hash SHA-256 mengubah Indowebsite, indowebsite, dan berkas 100 MB menjadi hash yang sama-sama 64 karakter.
Fungsi hash SHA-256 mengubah Indowebsite, indowebsite, dan berkas 100 MB menjadi hash yang sama-sama 64 karakter.

Tiga Sifat Hash Kriptografis dan Mitos "Hash Itu Unik"

Fungsi hash yang dipakai untuk keamanan disebut fungsi hash kriptografis. NIST mendefinisikan tiga sifat yang harus dipenuhinya, dan masing-masing melindungi hal yang berbeda:

  1. Tahan preimage: Dari sebuah hash, tidak layak secara komputasi menemukan data asalnya. Kalau sifat ini runtuh, password yang tersimpan sebagai hash bisa dibalik.
  2. Tahan second preimage: Diberi satu data, tidak layak membuat data lain dengan hash yang sama. Kalau runtuh, penyerang bisa menukar berkas unduhan tanpa mengubah hash resminya.
  3. Tahan tabrakan (collision resistance): Tidak layak menemukan dua data apa pun yang hash-nya sama. Kalau runtuh, penyerang bisa menyiapkan dua dokumen kembar hash, satu untuk ditandatangani dan satu lagi untuk diakui.

Perhatikan kata "tidak layak", bukan "tidak mungkin". Hash tidak pernah unik. SHA-256 hanya punya 2^256 kemungkinan keluaran, sedangkan kemungkinan masukannya tidak terbatas. Seperti 13 surat yang dimasukkan ke 12 kotak pos, pasti ada satu kotak yang berisi dua surat. Prinsip ini disebut pigeonhole principle (prinsip sarang merpati): tabrakan pasti ada, yang dijamin hanyalah bahwa menemukannya terlalu mahal.

Seberapa mahal, dihitung dengan paradoks ulang tahun. Di ruangan berisi 23 orang, peluang dua orang berulang tahun sama sudah di atas 50%. Logika yang sama membuat tabrakan hash n bit bisa ditemukan setelah sekitar 2^(n/2) percobaan. Untuk SHA-256, itu 2^128 atau sekitar 3,4 × 10^38 percobaan, di luar jangkauan komputer mana pun.

SHA-1 (160 bit) seharusnya baru bertabrakan setelah 2^80 percobaan. Namun pada Februari 2017, tim Google dan CWI Amsterdam lewat proyek SHAttered menemukan tabrakan nyata. Biayanya sekitar 2^63 komputasi, setara 6.500 tahun CPU dan 110 tahun GPU. Itulah arti "rusak" dalam kriptografi: ada serangan yang jauh lebih murah dari batas teoretisnya. MD5 mengalami nasib yang sama lebih dulu.

Tiga Pekerjaan Hashing yang Tuntutannya Bertolak Belakang

Kata hashing dipakai untuk tiga pekerjaan yang tuntutannya saling bertentangan. Memakai fungsi hash untuk pekerjaan yang salah adalah sumber kesalahan paling umum dalam topik ini.

  1. Hash table: Struktur data yang memakai hash untuk menentukan "laci" penyimpanan sebuah data, sehingga pencarian tidak perlu menyisir semua isi. Dipakai di dictionary Python, Map di JavaScript, dan cache seperti Redis. Tuntutannya hanya cepat. Tabrakan dianggap wajar dan ditangani dengan menaruh dua data di laci yang sama. Penjelasan lengkapnya ada di artikel struktur data.
  2. Hash kriptografis: SHA-256, SHA-512, dan SHA-3. Tetap harus cepat, karena dipakai untuk berkas berukuran gigabyte, tetapi tabrakan wajib sangat sulit ditemukan.
  3. Hash password: bcrypt, scrypt, dan Argon2id. Justru sengaja dibuat lambat dan memakai garam acak, karena musuhnya adalah penyerang yang menebak jutaan password.
PekerjaanContoh algoritmaKecepatanTabrakan
Hash tablebawaan Python, Javasecepat mungkinwajar, ditangani
Hash kriptografisSHA-256, SHA-3cepatharus sangat sulit
Hash passwordArgon2id, bcryptsengaja lambatharus sangat sulit

Kesalahan yang sering terjadi adalah memakai SHA-256 untuk menyimpan password. Algoritmanya aman untuk pekerjaan kedua, tetapi kecepatannya justru menjadi kelemahan untuk pekerjaan ketiga.

Tiga pekerjaan hashing: hash table dan hash kriptografis harus cepat, sedangkan hash password sengaja lambat dan bersalt.
Tiga pekerjaan hashing: hash table dan hash kriptografis harus cepat, sedangkan hash password sengaja lambat dan bersalt.

Fungsi Hash dalam Kehidupan Sehari-hari

Fungsi hash bekerja diam-diam di banyak tempat yang Anda pakai setiap hari:

  1. Memastikan berkas unduhan utuh: Nilai SHA-256 di halaman unduhan dipakai untuk membuktikan bahwa berkas yang sampai di komputer Anda sama persis dengan yang dirilis pembuatnya.
  2. Menyimpan password tanpa menyimpan password: Situs yang benar hanya menyimpan hash password. Saat login, password yang Anda ketik di-hash ulang lalu dibandingkan. Itu sebabnya situs tidak bisa mengirim ulang password lama Anda, dan proses autentikasi cukup membandingkan dua hash.
  3. Memberi identitas pada data: Git menamai setiap commit dengan hash dari isinya, yaitu 40 karakter heksadesimal. Mengubah satu baris kode menghasilkan ID commit baru.
  4. Tanda tangan digital: Yang ditandatangani bukan dokumen utuhnya, melainkan hash dokumen tersebut. Sertifikat SSL dan DKIM pada email bekerja dengan cara ini.
  5. Blockchain dan crypto: Hash di crypto dipakai sebagai segel setiap blok. Bitcoin meng-hash header blok berukuran 80 byte dengan SHA-256 dua kali. Penambang mencari angka yang membuat hash itu berada di bawah target tertentu, proses yang disebut proof of work. Setiap blok juga menyimpan hash blok sebelumnya, sehingga mengubah satu blok lama memutus seluruh rantai sesudahnya.

Perbedaan Hashing dan Enkripsi

Hashing dan enkripsi sering disamakan, padahal keduanya menjawab pertanyaan yang berbeda. Enkripsi menjawab "siapa yang boleh membaca data ini?", sehingga sifatnya dua arah: data dikunci lalu bisa dibuka kembali oleh pemegang kunci. Hashing menjawab "apakah data ini masih sama?", sehingga satu arah dan tanpa kunci.

AspekHashingEnkripsi
PertanyaanMasih sama?Siapa boleh baca?
Bisa dibalikTidakYa, dengan kunci
Butuh kunciTidakYa
Panjang hasilSelalu tetapMengikuti data
ContohSHA-256, bcryptAES, RSA

Konsekuensinya, istilah "dekripsi hash" sebenarnya tidak ada. Situs hash decrypt yang mengaku bisa membuka hash hanya mencocokkannya dengan daftar hash dari kata-kata umum yang sudah dihitung lebih dulu. Kalau password Anda tidak ada di daftar itu, situs tersebut tidak bisa berbuat apa-apa. Lain lagi dengan encoding seperti Base64, yang bisa dibalik siapa saja dan sama sekali bukan pengaman.

Ada satu titik temu keduanya, yaitu HMAC (Hash-based Message Authentication Code), yang dibakukan dalam RFC 2104 pada 1997. Hash polos bisa dihitung siapa pun, termasuk penyerang yang baru saja mengubah sebuah berkas. HMAC memasukkan kunci rahasia ke dalam perhitungan hash, sehingga hanya pemegang kunci yang bisa membuat nilai yang sah. Mekanisme inilah yang dipakai untuk menandatangani notifikasi webhook dari layanan seperti GitHub dan Stripe, juga token JWT bertipe HS256.

Algoritma Hash yang Dipakai Saat Ini

Tidak semua algoritma hash masih layak dipakai. Tabel berikut merangkum yang paling sering Anda temui beserta statusnya per 2026:

AlgoritmaPanjang hashStatus 2026
MD5128 bit (32 karakter)Rusak, bukan untuk keamanan
SHA-1160 bit (40 karakter)Dipensiunkan, batas 2030
SHA-256256 bit (64 karakter)Standar umum
SHA-512512 bit (128 karakter)Aman, cepat di 64-bit
SHA-3224–512 bitAman, cadangan SHA-2
bcrypt, Argon2idbervariasiKhusus password

MD5 bisa dibuat bertabrakan dalam hitungan detik di laptop biasa, sehingga hanya layak untuk mendeteksi kerusakan tidak disengaja. SHA-1 dipensiunkan NIST pada Desember 2022 dan wajib ditinggalkan paling lambat 31 Desember 2030. SHA-3, yang dibakukan pada Agustus 2015 (FIPS 202), memakai desain berbeda dari SHA-2 sehingga menjadi cadangan bila SHA-2 suatu saat melemah.

Peralihan dari algoritma lama memakan waktu bertahun-tahun. Git, misalnya, masih memakai SHA-1 sebagai bawaan. Sejak versi 2.13, Git memakai implementasi SHA-1 yang diperkeras sehingga kebal terhadap serangan SHAttered. Git 3.0 berencana menjadikan SHA-256 sebagai bawaan untuk repository baru, tetapi belum ada tanggal rilisnya.

Untuk kebutuhan umum, rekomendasi kami sederhana. Pakai SHA-256 untuk integritas data, atau SHA-512 dan SHA-3 bila standar yang Anda ikuti memintanya. Jangan memakai MD5 maupun SHA-1 untuk apa pun yang berkaitan dengan keamanan.

Hashing Password: Kenapa Hash Cepat Justru Berbahaya

Untuk password, kecepatan adalah musuh. Kami mengukurnya sendiri di laptop Apple M5 memakai Python dengan satu inti prosesor. Satu juta hash SHA-256 selesai dalam 0,19 detik, atau sekitar 5 juta tebakan per detik. Bila database sebuah situs bocor, penyerang bisa menebak password dengan kecepatan seperti itu di komputernya sendiri, dan kartu grafis bahkan jauh lebih cepat lagi. Serangan tebak semacam ini dibahas di artikel brute force.

Bandingkan dengan PBKDF2-HMAC-SHA256 berulang 600.000 kali, angka yang direkomendasikan OWASP. Di laptop yang sama, satu tebakan memakan 0,133 detik, sehingga hanya sekitar 7 tebakan per detik, atau kurang lebih 700.000 kali lebih lambat. Bagi pengguna yang login sekali, jeda 0,13 detik tidak terasa. Bagi penyerang yang mencoba jutaan password, jeda itu menjadi tembok.

Bahan kedua adalah salt (garam), yaitu string acak unik yang dibuat untuk setiap password dan disimpan bersama hash-nya. Berkat salt, dua pengguna dengan password sama tetap mendapat hash berbeda, dan daftar hash siap pakai (rainbow table) menjadi tidak berguna. Fungsi password_hash() di PHP membuat salt secara otomatis. Perintah berikut meng-hash password yang sama dua kali:

Bash
php -r 'foreach ([1, 2] as $i) {
  echo password_hash("rahasia",
    PASSWORD_DEFAULT), "\n";
}'

Hasilnya dua string yang berbeda, padahal masukannya sama. Tiap string kami pecah di batas salt; di terminal keduanya tampil satu baris:

TEXT
$2y$12$5xdpBbwMnW0EhHslOjGX.u
BKo7keCBVYvLkjj9l6C8IJvrSm8AnTW

$2y$12$ZO2FiOGZtwzLJARES4zBY.
SqxIWyxvg5IICa08wXwshY5NeiKgQhi

Awalan $2y$ menandakan algoritma bcrypt, 12 adalah tingkat biayanya, 22 karakter berikutnya adalah salt, dan baris kedua adalah hash-nya. Karena nama algoritma dan salt ikut tersimpan, fungsi password_verify() bisa mencocokkan tanpa tabel terpisah.

Hash password dengan salt: password dan salt diolah Argon2id lalu disimpan; saat login di-hash ulang dengan salt sama.
Hash password dengan salt: password dan salt diolah Argon2id lalu disimpan; saat login di-hash ulang dengan salt sama.

OWASP Password Storage Cheat Sheet memberi angka minimum yang konkret, berurutan dari pilihan pertama:

  1. Argon2id: Memori 19 MiB, 2 iterasi, 1 paralelisme. Pilihan utama untuk aplikasi baru.
  2. scrypt: N = 2^17 (128 MiB), r = 8, p = 1.
  3. bcrypt: Tingkat biaya minimal 10. Sejak PHP 8.4, bawaan password_hash() dinaikkan dari 10 menjadi 12.
  4. PBKDF2-HMAC-SHA256: 600.000 iterasi, terutama bila sistem Anda wajib memakai algoritma bersertifikat FIPS.

Dari angka itu juga terlihat kenapa "SHA-256 ditambah salt" belum cukup. Salt menangkal rainbow table, tetapi tidak memperlambat tebakan satu per satu. Hash yang lambat pun tidak menyelamatkan password 123456, karena password itu ada di urutan awal daftar tebakan mana pun; dasarnya tetap password yang kuat. Satu lagi, jangan mengetik password asli ke situs hash generator online, karena Anda tidak tahu apa yang disimpan situs itu.

Kekurangan Hashing dan Hal yang Perlu Dipertimbangkan

Hashing bukan jawaban untuk semua masalah keamanan. Ada enam batas yang perlu Anda pertimbangkan:

  1. Data tidak bisa dipulihkan: Sifat satu arah berarti data yang hanya disimpan sebagai hash hilang selamanya bila aslinya hilang. Untuk data yang perlu dibaca kembali, yang dibutuhkan adalah enkripsi.
  2. Masukan yang mudah ditebak tetap bisa ditebak: Hash nomor telepon atau NIK bukan anonimisasi. Ruang kemungkinannya kecil, sehingga penyerang cukup meng-hash semua kemungkinan lalu mencocokkannya.
  3. Hash di halaman yang sama dengan berkasnya bukan jaminan: Bila situs unduhan diretas, penyerang bisa mengganti berkas sekaligus nilai hash-nya. Perlindungan sesungguhnya datang dari daftar hash yang ditandatangani secara digital oleh pembuatnya.
  4. Algoritma menua: MD5 lalu SHA-1 sudah runtuh. Sistem yang baik menyimpan nama algoritma bersama hash, seperti format $2y$ atau $argon2id$, supaya bisa bermigrasi tanpa memaksa semua pengguna mengganti password sekaligus.
  5. Hash password membebani server: Argon2id dengan 19 MiB per login berarti 100 login serentak membutuhkan sekitar 1,9 GB RAM. Parameter perlu disesuaikan dengan kapasitas server, bukan diturunkan sembarangan.
  6. Batas 72 byte pada bcrypt: Sebagian besar implementasi bcrypt mengabaikan karakter setelah byte ke-72. Passphrase yang sangat panjang tidak bertambah kuat di atas batas itu.

Cara Memverifikasi Berkas Unduhan dengan SHA-256

Contoh berikut memakai berkas ISO Ubuntu, tetapi langkahnya sama untuk installer apa pun.

Langkah #1: Ambil Nilai Hash Resmi

Unduh daftar hash dari situs resmi pembuatnya, bukan dari situs cermin atau forum. Ubuntu, misalnya, menyediakan berkas SHA256SUMS beserta tanda tangan digitalnya, SHA256SUMS.gpg, di folder rilis yang sama dengan ISO-nya.

Langkah #2: Hitung Hash Berkas yang Sudah Diunduh

Jalankan perintah sesuai sistem operasi Anda di folder tempat berkas tersimpan. Di Linux:

Bash
sha256sum ubuntu.iso

Di macOS:

Bash
shasum -a 256 ubuntu.iso

Di Windows, buka PowerShell. Tanpa parameter tambahan, Get-FileHash sudah memakai SHA-256:

POWERSHELL
Get-FileHash .\ubuntu.iso

Ketiga perintah menampilkan 64 karakter heksadesimal. PowerShell menampilkannya dalam huruf besar, tetapi nilainya sama.

Langkah #3: Bandingkan Secara Otomatis

Membandingkan 64 karakter dengan mata mudah keliru, jadi biarkan perintah yang membandingkan. Di Linux dan macOS, letakkan SHA256SUMS satu folder dengan ISO, lalu jalankan:

Bash
sha256sum -c SHA256SUMS --ignore-missing

Opsi --ignore-missing melewati berkas di daftar yang tidak Anda unduh. Hasil ubuntu.iso: OK berarti berkas utuh, sedangkan FAILED berarti berkas rusak atau sudah diubah. Di macOS, ganti sha256sum dengan shasum -a 256. Di PowerShell, simpan hash ke variabel lalu bandingkan dengan nilai resmi:

POWERSHELL
$h = (Get-FileHash .\ubuntu.iso).Hash
$h -eq "TEMPEL_NILAI_RESMI"

Hasil True berarti cocok.

Pertanyaan Seputar Hashing

Berapa panjang hash SHA-256?

Selalu 256 bit atau 32 byte, yang ditulis sebagai 64 karakter heksadesimal. Panjang itu tidak berubah, baik masukannya satu huruf maupun berkas berukuran puluhan gigabyte.

Apa bedanya hash dan checksum?

Checksum adalah istilah umum untuk nilai pemeriksa kesalahan. Sebagian checksum, seperti CRC32, hanya dirancang mendeteksi kerusakan tidak disengaja saat transfer dan mudah dipalsukan. Hash kriptografis seperti SHA-256 bisa dipakai sebagai checksum sekaligus tahan terhadap pemalsuan yang disengaja.

Apakah hashing termasuk kriptografi?

Hash kriptografis termasuk salah satu alat kriptografi, bersama enkripsi simetris dan asimetris. Namun hashing untuk hash table tidak termasuk, karena tidak dirancang menahan serangan.

Apa contoh fungsi hash yang paling sederhana?

Contoh hashing paling sederhana adalah sisa bagi. Misalnya, nomor induk mahasiswa 2310123 dibagi 10 menyisakan 3, sehingga datanya disimpan di laci nomor 3. Fungsi seperti ini cukup untuk hash table kecil, tetapi tidak aman untuk keamanan karena tabrakannya mudah dibuat dan hasilnya mudah ditebak balik.

Kesimpulan

Hashing adalah cara mengubah data menjadi nilai berpanjang tetap yang tidak bisa dibalik, dan dipakai untuk tiga pekerjaan berbeda. Hash table butuh kecepatan, hash kriptografis seperti SHA-256 butuh ketahanan terhadap tabrakan, dan hash password seperti Argon2id justru butuh kelambatan yang disengaja. Hash juga tidak pernah unik; yang dijamin hanyalah tabrakannya terlalu mahal untuk ditemukan.

Untuk praktik sehari-hari, pakai SHA-256 untuk memeriksa berkas. Untuk password, pakai Argon2id (19 MiB, 2 iterasi) atau bcrypt dengan biaya minimal 10, dan tinggalkan MD5 serta SHA-1 untuk urusan keamanan. Semoga artikel ini membantu.