
Setiap hari, kita berinteraksi dengan berbagai layanan online yang memerlukan password: mulai dari email, media sosial, perbankan, hingga e-commerce. Pernahkah Anda bertanya-tanya bagaimana website-website tersebut menyimpan password Anda dengan aman? Jawabannya terletak pada sebuah teknik kriptografi fundamental yang disebut hashing. Hashing bukan sekadar alat pelindung, melainkan fondasi keamanan digital yang memastikan bahwa meskipun data suatu layanan diretas, password asli Anda tetap terlindungi. Artikel ini akan mengupas tuntas apa itu hashing, bagaimana cara kerjanya, mengapa ia krusial untuk keamanan password, dan praktik terbaik yang digunakan di baliknya.
Apa Itu Hashing?
Secara sederhana, hashing adalah proses mengubah data input (misalnya, password Anda) menjadi deretan karakter dengan panjang tetap yang disebut hash value, hash code, digest, atau fingerprint. Proses ini dilakukan oleh sebuah fungsi matematika yang disebut fungsi hash. Beberapa karakteristik utama dari fungsi hash yang aman meliputi:
- Satu Arah (One-Way): Sangat mudah untuk mengubah input menjadi hash, tetapi hampir mustahil untuk membalikkan prosesnya; yaitu, mendapatkan kembali input asli dari hash.
- Deterministik: Input yang sama akan selalu menghasilkan output hash yang sama persis.
- Sensitif terhadap Perubahan Kecil: Perubahan sekecil apa pun pada input (bahkan satu karakter) akan menghasilkan output hash yang sama sekali berbeda.
- Resistensi Terhadap Kolisi: Sangat sulit (secara komputasi) untuk menemukan dua input berbeda yang menghasilkan hash value yang sama. Ini disebut juga sebagai “collision resistance”.
- Panjang Output Tetap: Berapapun panjang inputnya, output hash akan selalu memiliki panjang yang sama.
Bagaimana Hashing Melindungi Password Anda?
Ketika Anda mendaftar atau login ke sebuah website, password Anda tidak disimpan dalam bentuk teks biasa (plaintext). Ini adalah praktik yang sangat berbahaya dan harus dihindari. Sebaliknya, prosesnya adalah sebagai berikut:
- Ketika Anda membuat password baru, sistem akan menjalankan password tersebut melalui fungsi hash.
- Output hash (misalnya,
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
) yang kemudian disimpan di database, bukan password asli Anda. - Ketika Anda mencoba login, password yang Anda masukkan akan kembali di-hash menggunakan fungsi yang sama.
- Sistem kemudian membandingkan hash baru ini dengan hash yang tersimpan di database.
- Jika kedua hash cocok, maka Anda berhasil login. Jika tidak, login gagal.
Dengan metode ini, bahkan jika seorang penyerang berhasil meretas database dan mencuri semua hash password, mereka tidak akan secara langsung mendapatkan password asli Anda. Mereka harus mencoba menebak atau memecahkan hash tersebut, yang mana sangat sulit dan memakan waktu (jika hashing dilakukan dengan benar).
source: https://codesigningstore.com
Mengapa Tidak Boleh Menyimpan Password Plaintext?
Menyimpan password dalam bentuk plaintext adalah mimpi buruk keamanan. Berikut adalah beberapa alasannya:
- Rentan Terhadap Pelanggaran Data: Jika database diretas, semua password pengguna akan langsung terekspos. Penyerang dapat menggunakan password ini untuk mengakses akun lain pengguna (karena banyak orang menggunakan password yang sama untuk berbagai layanan).
- Penyalahgunaan Internal: Karyawan yang memiliki akses ke database dapat melihat password pengguna, yang merupakan pelanggaran privasi dan etika.
- Kegagalan Audit Keamanan: Sistem yang menyimpan plaintext password akan gagal dalam audit keamanan dan standar kepatuhan industri (misalnya GDPR, HIPAA).
Sejarah telah mencatat banyak insiden pelanggaran data besar yang disebabkan oleh penyimpanan password plaintext, yang berujung pada kerugian finansial, reputasi, dan kepercayaan pengguna.
Jenis-jenis Algoritma Hashing Populer untuk Password
Tidak semua algoritma hashing diciptakan sama, terutama untuk tujuan keamanan password. Beberapa algoritma yang lebih tua, seperti MD5 dan SHA-1, kini dianggap tidak aman untuk password karena kerentanannya terhadap serangan kolisi dan kecepatan komputasinya. Untuk password, kita memerlukan algoritma yang dirancang khusus untuk menjadi “lambat” dan resisten terhadap serangan brute-force dan rainbow table.
Algoritma Hashing Modern yang Direkomendasikan:
- bcrypt: Salah satu fungsi hash password yang paling banyak digunakan. bcrypt dirancang untuk menjadi lambat dan memiliki faktor “cost” atau “work factor” yang dapat disesuaikan. Semakin tinggi faktor cost, semakin lambat proses hashing, membuatnya lebih tahan terhadap serangan brute-force.
- scrypt: Mirip dengan bcrypt, scrypt juga dirancang untuk lambat dan membutuhkan banyak memori, sehingga lebih resisten terhadap serangan dengan perangkat keras khusus (misalnya GPU).
- Argon2: Pemenang Password Hashing Competition (PHC) tahun 2015, Argon2 dianggap sebagai standar emas saat ini. Ia menawarkan tiga parameter yang dapat disesuaikan: waktu iterasi, memori, dan paralelisme, memberikan fleksibilitas tinggi untuk menyeimbangkan keamanan dan kinerja.
Ancaman dan Mitigasi: Pentingnya Salt dan Pepper
Meskipun hashing adalah fondasi yang kuat, ada ancaman yang perlu diatasi, yaitu rainbow table dan serangan brute-force.
Salt
Sebuah salt adalah deretan karakter acak unik yang ditambahkan ke setiap password sebelum di-hash. Salt harus dihasilkan secara acak untuk setiap password dan disimpan bersama dengan hash-nya di database. Mengapa salt penting?
- Mencegah Rainbow Table Attacks: Rainbow table adalah database besar berisi pasangan plaintext-hash yang sudah dihitung sebelumnya. Tanpa salt, jika dua pengguna memiliki password yang sama, hash mereka juga akan sama, dan penyerang bisa dengan mudah menemukannya di rainbow table. Dengan salt, bahkan jika dua pengguna memiliki password yang sama, karena salt mereka berbeda, hash yang dihasilkan juga akan berbeda, sehingga rainbow table menjadi tidak efektif.
- Mencegah Serangan Brute-Force Massal: Salt memaksa penyerang untuk menghitung ulang hash untuk setiap password dan setiap pengguna secara individual, bukan hanya menghitung satu kali untuk satu password dan membandingkannya dengan semua hash yang dicuri.
Setiap password harus memiliki salt uniknya sendiri. Salt tidak perlu dirahasiakan; ia disimpan bersama hash password.
Pepper
Pepper adalah rahasia tambahan yang serupa dengan salt, tetapi berbeda karena tidak disimpan bersama hash di database. Sebaliknya, pepper adalah rahasia yang disimpan terpisah dari database (misalnya, di file konfigurasi server atau sebagai variabel lingkungan). Pepper ditambahkan ke password (bersama dengan salt) sebelum di-hash.
Keuntungan menggunakan pepper:
- Jika database dicuri, pepper masih aman.
- Menambahkan lapisan keamanan ekstra jika salt dan hash password dicuri.
Kelemahan pepper adalah jika pepper hilang atau tidak dapat diakses, tidak ada cara untuk memverifikasi password, bahkan untuk administrator sistem.
Praktik Terbaik dalam Hashing Password
Untuk memastikan keamanan password yang optimal, ikuti praktik terbaik ini:
- Gunakan Algoritma Hashing yang Kuat: Prioritaskan Argon2, bcrypt, atau scrypt. Hindari MD5, SHA-1, dan SHA-256 (jika tidak digabungkan dengan salt dan iterasi yang cukup) untuk hashing password.
- Selalu Gunakan Salt Unik: Hasilkan salt acak yang unik untuk setiap password dan simpanlah bersama hash-nya.
- Tingkatkan Faktor Biaya (Cost Factor): Untuk bcrypt dan scrypt, sesuaikan faktor biaya seiring perkembangan kecepatan komputasi. Untuk Argon2, sesuaikan parameter waktu, memori, dan paralelisme. Semakin tinggi faktor biaya, semakin lambat proses hashing, dan semakin aman password Anda.
- Perbarui Hashing secara Berkala: Seiring waktu, algoritma lama bisa menjadi rentan. Pastikan sistem Anda dapat memperbarui hash password pengguna ke algoritma atau konfigurasi yang lebih baru.
- Jangan Pernah Menyimpan Password Plaintext: Ini adalah aturan emas yang tidak boleh dilanggar.
- Pertimbangkan Pepper: Untuk lapisan keamanan ekstra, pertimbangkan penggunaan pepper, tetapi pahami risikonya.
Kesimpulan
Hashing adalah pahlawan tanpa tanda jasa di balik keamanan password kita. Dengan mengubah password menjadi deretan karakter yang tidak dapat dibalikkan, dan menggabungkannya dengan teknik seperti salting, kita dapat secara signifikan mengurangi risiko saat terjadi pelanggaran data. Memahami dan menerapkan praktik hashing yang kuat bukan hanya tanggung jawab developer sistem, tetapi juga merupakan pengetahuan penting bagi setiap pengguna internet yang peduli akan privasi dan keamanannya. Dengan demikian, kita dapat lebih yakin bahwa informasi pribadi kita tetap terlindungi di era digital yang semakin kompleks ini.