Hashing — apa itu, algoritma kriptografi dan penerapan

Penulis: IT Sectr Diterbitkan: 2026-04-02 Waktu membaca: 8 mnt

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

  • Fungsi hash mengubah data masukan menjadi string dengan panjang tetap — digest.
  • Hash kriptografi memiliki sifat tidak dapat dibalik: dari hash tidak dapat dipulihkan data asli.
  • SHA-256 — standar hashing kriptografi yang direkomendasikan NIST untuk sistem modern.
  • Garam — data acak yang ditambahkan ke kata sandi sebelum hashing untuk melindungi dari tabel pelangi.
  • Hashing banyak digunakan dalam aplikasi seluler untuk menyimpan kata sandi dan memeriksa integritas data.

Apa itu hashing?

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.

Properti dasar fungsi hash

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).

Perbedaan antara hashing dan enkripsi

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.

Fungsi hash kriptografi dan non-kriptografi

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 hash kriptografi

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 hash non-kriptografi

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.

TipeContohBidang penerapan
KriptografiSHA-256, SHA-3, bcryptKata sandi, tanda tangan, TLS
Non-kriptografiMurmurHash, xxHashTabel hash, cache
KDF kata sandibcrypt, scrypt, Argon2Penyimpanan kata sandi

Mari kita lihat algoritma hashing yang paling umum digunakan dalam pengembangan seluler modern. Masing-masing memiliki kelebihan dan kekurangan.

SHA-256

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 — penerus SHA-2

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.

kotlin
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) }
}

bcrypt untuk kata sandi

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.

kotlin
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 — standar modern

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.

Penerapan hashing dalam aplikasi seluler

Hashing memecahkan banyak tugas praktis dalam pengembangan seluler — dari otentikasi pengguna hingga verifikasi integritas file yang diunduh. Mari kita lihat skenario penggunaan utama.

Penyimpanan kata sandi

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.

Verifikasi integritas file

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.

Caching dan deduplikasi

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.

kotlin
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
}

Kesalahan umum dalam penggunaan hash

Bahkan pengembang berpengalaman pun membuat kesalahan saat bekerja dengan hashing. Mari kita lihat masalah paling umum yang dapat meniadakan semua keunggulan perlindungan kriptografi.

Penggunaan MD5 atau SHA-1

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 tanpa garam

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.

Jumlah iterasi yang tidak memadai

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

Apa perbedaan antara hashing dan enkripsi?

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.

Algoritma hashing mana yang terbaik untuk kata sandi?

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.

Apa itu tabrakan fungsi hash dan mengapa berbahaya?

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.

Apakah perlu menambahkan garam secara manual ke bcrypt?

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.

Bisakah hashing digunakan untuk perlindungan terhadap malware?

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

  • Hashing — transformasi satu arah data menjadi string dengan panjang tetap dengan jaminan ketidakmampuan balik.
  • Fungsi hash kriptografi memberikan ketahanan terhadap tabrakan dan efek longsoran.
  • SHA-256 — standar NIST untuk hashing kriptografi dalam sistem modern.
  • KDF kata sandi (bcrypt, Argon2, scrypt) wajib untuk penyimpanan kata sandi yang aman.
  • Garam melindungi dari tabel pelangi dan harus unik untuk setiap pengguna.
  • MD5 dan SHA-1 dianggap rusak dan tidak boleh digunakan dalam proyek baru.
  • Hashing diterapkan untuk penyimpanan kata sandi, verifikasi integritas data, caching, dan perlindungan antivirus.

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.

Diskusikan proyek

Baca juga