Hashing adalah proses mengubah data berukuran sembarang menjadi string dengan panjang tetap, digunakan untuk memeriksa integritas dan penyimpanan kata sandi yang aman. Menurut Open Web Application Security Project (OWASP, 2025), penggunaan fungsi hash yang benar mencegah hingga 70% kerentanan terkait kebocoran kredensial. Hash kriptografi mendasari tanda tangan digital, teknologi blockchain, dan kontrol versi.
Poin Penting
Hashing — proses penghitungan fungsi hash yang mengubah kumpulan data masukan sembarang menjadi string bit dengan panjang tetap, yang disebut digest atau nilai hash. Berbeda dengan enkripsi, hashing adalah proses satu arah: memulihkan data asli dari hash tidak mungkin dilakukan.
Fungsi hash kriptografi memiliki empat properti wajib: determinisme (masukan yang sama selalu menghasilkan hash yang sama), ketidakmampuan balik (secara komputasi tidak mungkin memulihkan masukan dari hash), efek longsoran (perubahan satu bit pada masukan mengubah rata-rata setengah bit hash) dan ketahanan terhadap tabrakan (secara komputasi tidak mungkin menemukan dua masukan berbeda dengan hash yang sama).
Penting untuk memahami perbedaan antara hashing dan enkripsi. Enkripsi adalah proses dua arah: data terenkripsi dapat didekripsi dengan kunci. Hashing adalah proses satu arah: setelah transformasi, data tidak dapat dipulihkan. Properti ini membuat hashing ideal untuk menyimpan kata sandi: sistem hanya menyimpan hash, dan bahkan jika basis data bocor, kata sandi tetap terlindungi.
Tidak semua fungsi hash sama-sama cocok untuk tugas keamanan. Pembagian ke dalam kategori kriptografi dan non-kriptografi sangat penting saat memilih algoritma untuk tugas tertentu dalam pengembangan seluler.
Fungsi-fungsi ini sengaja dibuat lambat dan kompleks untuk mempersulit serangan brute-force. Mereka harus tahan terhadap tabrakan dan serangan preimage. Keluarga SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) disertifikasi oleh NIST dan direkomendasikan untuk digunakan dalam sistem pemerintahan. Untuk hashing kata sandi, algoritma bcrypt, scrypt, dan Argon2 juga digunakan dengan kompleksitas yang dapat dikonfigurasi.
Fungsi-fungsi ini dioptimalkan untuk kecepatan, bukan keamanan. Contoh: CityHash, MurmurHash, xxHash. Mereka digunakan dalam tabel hash, deduplikasi data, dan checksum untuk verifikasi cepat integritas data non-kritis. Penting untuk tidak pernah menggunakannya untuk menyimpan kata sandi atau memverifikasi tanda tangan digital — kecepatan tinggi membuatnya rentan terhadap serangan brute-force.
| Tipe | Contoh | Bidang penerapan |
|---|---|---|
| Kriptografi | SHA-256, SHA-3, bcrypt | Kata sandi, tanda tangan, TLS |
| Non-kriptografi | MurmurHash, xxHash | Tabel hash, cache |
| KDF kata sandi | bcrypt, scrypt, Argon2 | Penyimpanan kata sandi |
Mari kita lihat algoritma hashing yang paling umum digunakan dalam pengembangan seluler modern. Masing-masing memiliki kelebihan dan kekurangan.
SHA-256 — simbol kriptografi modern, direkomendasikan oleh NIST dalam kerangka standar FIPS 180-4. Algoritma ini menghasilkan digest 256-bit dan merupakan komponen utama protokol TLS, jaringan blockchain, dan sistem kontrol versi. Menurut laporan NCC Group (2025), SHA-256 digunakan dalam 96% sertifikat TLS untuk menandatangani certificate transparency.
SHA-3 — keluarga fungsi hash terbaru, distandarisasi oleh NIST pada tahun 2015 sebagai FIPS 202. Berbeda dengan SHA-2 yang dibangun di atas struktur Merkle–Damgård, SHA-3 didasarkan pada konstruksi Keccak yang berbeda dengan fungsi spons. Hal ini membuat SHA-3 tahan terhadap serangan yang mungkin muncul di masa depan pada SHA-2. Untuk pengembang seluler, SHA-3 tersedia melalui pustaka kriptografi standar mulai dari Android 7.0 dan iOS 13.
import java.security.MessageDigest
fun hashWithSHA256(input: String): String {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(input.toByteArray())
return hashBytes.joinToString("") { String.format("%02x", it) }
}
Untuk menyimpan kata sandi, hash kriptografi umum tidaklah cukup — mereka terlalu cepat. bcrypt dirancang khusus untuk hashing kata sandi: ia menyertakan garam dan parameter biaya yang mengatur waktu komputasi. Meningkatkan biaya 2 kali lipat menggandakan waktu hashing, membuat serangan brute-force tidak efektif bahkan pada perangkat keras yang kuat.
import at.favre.lib.crypto.bcrypt.BCrypt
fun hashPassword(password: String): String {
return BCrypt.create()
.hashToString(BCrypt.MIN_COST, password.toCharArray())
}
fun verifyPassword(password: String, hash: String): Boolean {
val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
return result.verified
}
Argon2 — pemenang Password Hashing Competition (2015), direkomendasikan oleh OWASP sebagai pilihan terbaik untuk hashing kata sandi. Argon2id — varian yang tahan terhadap serangan saluran samping dan serangan time-memory trade-off. Berbeda dengan bcrypt, Argon2 memungkinkan konfigurasi terpisah untuk waktu eksekusi, penggunaan memori, dan tingkat paralelisme, memberikan perlindungan yang fleksibel terhadap berbagai jenis serangan.
Hashing memecahkan banyak tugas praktis dalam pengembangan seluler — dari otentikasi pengguna hingga verifikasi integritas file yang diunduh. Mari kita lihat skenario penggunaan utama.
Skenario utama — penyimpanan kata sandi yang aman di sisi server. Saat pendaftaran, aplikasi mengirimkan kata sandi ke server, di mana kata sandi tersebut di-hash dengan garam menggunakan algoritma bcrypt atau Argon2 dan disimpan di basis data. Saat masuk, server meng-hash kata sandi yang dimasukkan dan membandingkannya dengan hash yang disimpan. OWASP merekomendasikan penggunaan Argon2id dengan parameter: waktu 2 detik, memori 64 MB, tingkat paralelisme 4.
Saat mengunduh file besar, seperti paket OBB atau pembaruan konten, aplikasi seluler dapat memverifikasi integritasnya melalui hashing. Server memublikasikan hash SHA-256 file, dan aplikasi menghitung hash data yang diunduh dan membandingkannya. Ini menjamin bahwa file tidak rusak atau diganti selama transmisi. Menurut Google Play Console (2025), verifikasi hash aplikasi bersertifikat mencegah hingga 99,9% serangan unduhan rusak.
Hash digunakan secara aktif untuk membangun cache yang efisien dan deduplikasi data. Alamat gambar atau respons JSON di-hash dan digunakan sebagai kunci cache: pada permintaan berulang, sistem membandingkan hash dan mengembalikan hasil yang disimpan jika data tidak berubah. Untuk tugas ini, fungsi hash non-kriptografi seperti MurmurHash atau xxHash yang memberikan kinerja maksimum sangat cocok.
import java.security.MessageDigest
fun calculateFileHash(fileBytes: ByteArray): String {
val digest = MessageDigest.getInstance("SHA-256")
val hash = digest.digest(fileBytes)
return hash.joinToString("") { String.format("%02x", it) }
}
fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
val actualHash = calculateFileHash(data)
return actualHash == expectedHash
}
Bahkan pengembang berpengalaman pun membuat kesalahan saat bekerja dengan hashing. Mari kita lihat masalah paling umum yang dapat meniadakan semua keunggulan perlindungan kriptografi.
MD5 dan SHA-1 — algoritma usang yang memiliki serangan tabrakan praktis. MD5 dipecahkan pada tahun 2004 oleh sekelompok peneliti Tiongkok (tabrakan dalam satu jam). SHA-1 dipecahkan pada tahun 2017 oleh tim Google dan Centrum Wiskunde & Informatica (serangan SHAttered). Penggunaan algoritma ini dalam proyek baru dianggap sebagai kesalahan keamanan besar menurut klasifikasi OWASP.
Hashing kata sandi tanpa garam — kerentanan kritis. Garam adalah string acak, unik untuk setiap pengguna, yang ditambahkan ke kata sandi sebelum hashing. Tanpa garam, dua kata sandi yang identik akan menghasilkan hash yang sama, memungkinkan penggunaan tabel pelangi untuk brute-force. OWASP merekomendasikan penggunaan garam yang kuat secara kriptografi dengan panjang setidaknya 32 byte, yang dihasilkan secara terpisah untuk setiap pengguna.
Bahkan saat menggunakan bcrypt atau Argon2, perlindungan dapat dilemahkan dengan memilih parameter biaya yang terlalu rendah. Menurut OWASP (2025), jumlah minimum iterasi bcrypt harus 10 (2^10 = 1024 iterasi), dan untuk Argon2id — waktu komputasi setidaknya 1 detik pada platform target. Parameter yang terlalu rendah membuat serangan brute-force praktis dapat dilakukan di GPU farm.
Pertanyaan yang Sering Diajukan
Hashing — proses satu arah yang hasilnya tidak dapat diubah kembali menjadi data asli. Enkripsi adalah proses dua arah: data terenkripsi dapat didekripsi dengan kunci. Hashing digunakan untuk menyimpan kata sandi dan memeriksa integritas, enkripsi digunakan untuk transmisi rahasia data antara klien dan server.
OWASP merekomendasikan Argon2id sebagai pilihan terbaik untuk hashing kata sandi berkat perlindungan yang dapat dikonfigurasi terhadap serangan GPU dan serangan saluran samping. Alternatif: bcrypt (terbukti dan mudah dikonfigurasi), scrypt (tahan terhadap serangan ASIC) dan PBKDF2. SHA-256 dan SHA-512 tidak cocok untuk kata sandi — mereka terlalu cepat dan tidak melindungi dari brute-force massal.
Tabrakan — situasi di mana dua set data masukan berbeda menghasilkan hash yang sama. Untuk fungsi hash kriptografi, menemukan tabrakan harus mustahil secara komputasi. Misalnya, probabilitas tabrakan SHA-256 untuk dua pesan acak adalah sekitar 1 banding 2^128 — nilai yang sangat kecil.
Tidak, bcrypt secara otomatis menyertakan garam dalam algoritmanya. Saat BCrypt.hashToString() dipanggil, pustaka menghasilkan garam yang kuat secara kriptografi sepanjang 16 byte dan menyematkannya ke dalam string keluaran bersama dengan hash dan parameter biaya. Scrypt dan Argon2 juga bekerja dengan cara yang sama. Ini adalah salah satu alasan mengapa para ahli merekomendasikan penggunaan KDF khusus daripada fungsi hash umum untuk perlindungan kata sandi.
Ya, hash digunakan untuk membuat daftar putih dan hitam file. Basis data antivirus berisi hash dari malware yang dikenal. Namun, penyerang dapat mengubah satu byte dalam program, yang akan mengubah hash sepenuhnya. Oleh karena itu, sistem modern menggunakan fuzzy-hashing (SSDeep, TLSH), yang menemukan file yang mirip secara semantik, bukan hanya kecocokan tepat.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga