Haaai kawan! ^^ Apa kabar? Sudah lama sekali sekali tak bersua di blog saya yang sederhana ini. Daaaan, tidak terasa ya sekarang sudah masuk minggu ke dua di bulan Ramadhan. Selamat menunaikan ibadah shaum di bulan suci Ramadhan untuk kita yang menjalankan.. ^^ Gimana shaumnya? masih pada semangat - semangat kan? oh iya, sebelumnya saya minta maaf jikalau ada salah - salah kata selama saya menulis artikel di blog saya ini..

Lalu, apa yang akan kita bahas sekarang ya?

Sekarang ini saya ingin membahas soal mengamankan password. Belakangan ini saya sering perhatikan postingan di grup PHP Indonesia. Dan salah satu dari pertanyaan yang sering muncul di grup kami, ialah tentang keamanan data, terutama dalam hal menyimpan password di database. Member grup sering bertanya cara terbaik untuk menyimpan password. Apakah pakai md5 atau SHA1? FYI, md5 dan SHA1 itu termasuk fungsi hash.

Apa itu Hash?

Hash adalah sebuah fungsi yang mengubah input menjadi string acak yang disebut "hash value" atau "digest". Fungsi ini biasanya digunakan untuk mengubah data yang besar menjadi ukuran yang lebih kecil, tetapi juga dapat digunakan untuk menyamarkan data asli. Hash biasanya digunakan dalam sistem keamanan untuk menyimpan password atau untuk memverifikasi integritas data. Ketika sebuah password dimasukkan ke dalam sistem, password tersebut akan dihash menggunakan algoritma hashing yang telah ditentukan, dan hash value yang dihasilkan akan disimpan dalam basis data. Ketika seorang pengguna login ke sistem, password yang dimasukkan akan dihash kembali dan hash value yang dihasilkan akan dibandingkan dengan hash value yang tersimpan dalam basis data. Jika hash value yang dihasilkan sama dengan hash value yang tersimpan, maka login akan diterima.

Apa itu MD5 dan SHA1?

MD5 (Message-Digest Algorithm 5) dan SHA-1 (Secure Hash Algorithm 1) adalah algoritma hashing yang digunakan untuk menghasilkan hash value dari sebuah data. Kedua algoritma ini sering digunakan untuk mengecek integritas data, menyimpan password, dan berbagai aplikasi keamanan lainnya.

MD5 adalah algoritma hashing yang paling umum digunakan. Algoritma ini mengubah data yang masuk menjadi hash value dengan panjang 128 bit. Namun, kekuatan hashing dari MD5 sudah terlalu lemah untuk digunakan sebagai enkripsi password, karena hash value yang dihasilkan dapat dengan mudah dipecahkan dengan menggunakan komputer yang kuat.

SHA-1 adalah algoritma hashing yang lebih kuat daripada MD5. Algoritma ini mengubah data yang masuk menjadi hash value dengan panjang 160 bit. Meskipun lebih kuat daripada MD5, kekuatan hashing dari SHA-1 juga sudah terlalu lemah untuk digunakan sebagai enkripsi password saat ini.

Lalu, apa yang mesti digunakan untuk mengamankan password di database? apa pakai MD5 atau SHA1?

JAWABANNYA, bukan kedua -duanya.

Lalu mesti pakai apa dong?

Kabar baiknya banyak sekali yang merekomendasikan untuk pakai algoritma yang lebih kuat buat hashing password, yaitu pakai bcrypt atau Argon2. Dan untuk sekarang kita akan fokus ke bcrypt terlebih dahulu.

Apa itu Bcrypt?

BCrypt adalah algoritma enkripsi yang digunakan untuk menyimpan password yang aman dalam basis data. Algoritma ini menggunakan teknik hashing yang mengubah password menjadi string acak yang tidak dapat dikembalikan ke password asli. Selain itu, BCrypt juga menambahkan fitur salting, yang membuat setiap password yang dihash dengan BCrypt akan memiliki hash yang berbeda meskipun passwordnya sama. Hal ini membuat sulit bagi orang yang tidak berwenang untuk memecahkan password yang tersimpan dalam basis data. BCrypt sering digunakan dalam aplikasi web untuk menyimpan password pengguna yang aman.

Dalam bahasa pemrograman PHP sendiri, fungsi bcrypt ini sudah ada di fungsi bawaan PHP. Apa saja itu? Terdapat empat fungsi yang dapat kita gunakan dalam hashing password:

  1. password_hash() :: fungsinya untuk hashing password.
  2. password_verify() :: kalau yang ini buat verifikasi password yang sudah dihash pakai fungsi password_hash().
  3. password_needs_rehash() :: digunakan kalau password perlu dihash ulang.
  4. password_get_info() :: fungsi ini bakalan ngebagiin info tentang algoritma dan juga opsi yang digunakan ketika kita hashing password.

Sekarang, kita coba pakai fungsi password_hash() sama password_verify().

Step 1 - Uji Coba Hash menggunakan password_hash()

Pertama kita buat file php dengan nama password_hash.php, lalu kita ketik sintaks di bawah ini:

 <?php 
      echo password_hash("gungunpriatna", PASSWORD_DEFAULT)."\n"; 
 ?> 

Save filenya, lalu kita coba run di browser. Hasil hashnya itu bakalan beda-beda lho. Random gitu. Dan di bawah ini salah satu contoh hasilnya:

hasil hash

Kita simpan dulu hasil hashnya ya.. saya pastekan di sini:

 $2y$10$uYEYjBw.sXE02evtHIsqwO2OE/XEIMYyXMI4FadLbpfhIvsg5dXba  

Step 2 - Uji Coba Verifikasi Hash menggunakan password_verify()

Sekarang kita buat file untuk verifikasi password yang udah kita hash tadi pakai password_verify(). Kasih nama filenya password_verify.php, lalu selanjutnya kita ketik sintaks di bawah ini di dalam file password_verify.php.

 <?php 

 // diambil dari hasil file password_hash.php 

 $hash = '$2y$10$uYEYjBw.sXE02evtHIsqwO2OE/XEIMYyXMI4FadLbpfhIvsg5dXba'; 

 if (password_verify('gungunpriatna', $hash)) { 

   echo 'Password kamu benar, Selamat!'; 

 } else { 

   echo 'Password kamu salah, silakan coba lagi..'; 

 } 

 ?> 

Save file password_verify.php. Lalu coba kita run di browser dan hasilnya adalah ....

Verifiy password

Yep, password kamu benar :D

Sekarang kita coba perhatikan sintaks yang ada di file password_verify.php. Di variabel $hash itu ada hasil hashing password dari file password_hash.php yang sudah kita run sebelumnya (dan sudah saya catat di atas). Begitu kita masukan ke dalam parameter fungsi password_verify(), biarpun hasil dari password_hash() itu acak banget, kalau kata yang dijadiin password dan hashnya itu cocok, maka password_verify() akan bernilai TRUE dan selanjutnya bakalan menampilkan output di browser Password kamu benar, Selamat!.

Penutup

Sebagian besar developer masih menggunakan algoritma hash yang lebih tua dan lebih lemah seperti MD5 dan SHA1. Kabar baiknya ada algoritma yang banyak direkomendasikan dan diakui sebagai 'best practice' untuk hashing password, yaitu menggunakan bcrypt. Di dalam bahasa PHP sendiri bcrypt ini bisa kita gunakan langsung karena sudah tersedia sebagai fungsi built-in dari PHP, yaitu password_hash() untuk hash password menggunakan bcrypt dan password_verify() untuk verifikasi hash dengan password.

Semoga bermanfaat.. ^^


Referensi :

Gun Gun Priatna
Software Engineer, Content Writer and Founder qadrlabs.com
Komentar

blog comments powered by Disqus