Facebook Ilmuwebsite

Ini Alasan Mengapa Tidak Dianjurkan Menyimpan Hash Password Di Database Menggunakan Metode MD5 atau SHA1!

Bagi Anda seorang web developer yang kerap kali bermesraan dengan fitur login, hak akses, dan hal serupa lainnya. Serupa tak melulu sama. Sudah bisa dipastikan jika tidak menggunakan MD5 maka SHA1 jadi metode alternatif untuk menyimpan password user ke dalam database, dalam bentuk hash tentunya. Dan mungkin segelintir web developer ada yang menyimpan saltnya juga dengan alasan keamanan yang lebih baik.

Kali ini saya tidak akan menjelaskan mengenai salt. Yang jadi penekanan di sini adalah menyimpan hash password menggunakan MD5 maupun SHA1. Namun sebelum kita membahas itu semua ada beberapa pemahaman fundamental yang kemungkinan perlu Anda ketahui. Jika Anda sudah tahu mungkin ini sekedar merefresh saja.

Apakah Password Yang Disimpan Dalam Database Harus Di Enkripsi Terlebih Dulu?

Dalam demokrasi kebenaran suara terbanyak itu lazimnya menjadi tolak ukur kebenaran, lain halnya dengan musyawarah. Dalam musyawarah pendapat yang paling kuat lagi bermanfaat bagi orang banyaklah yang jadi tolak ukur meski hanya sebagian kecil, satu dua orang yang menyuarakannya. Kita tidak akan bahas itu namun yang terbanyak itu bukan yang selalu benar. Bahkan untuk beberapa hal cenderung tidak benar. Begitu juga dengan password, jangan pernah sekalipun menyimpan password dalam bentuk enkripsi. Nah loh?!

Sesuatu yang dienkripsi itu memiliki peluang yang sangat besar untuk bisa didekripsi. Menyimpan sesuatu dalam enkripsi sudah barang tentu tinggal nunggu waktu saja, ketika orang lain diluar wilayah Anda dengan gigih menunggu waktu menggunakan suatu cara untuk mendapatkan keynya. Yang mana key atau kunci dekripsi ini digunakan untuk mendapatkan string aslinya yang telanjang tanpa enkripsi. Bagi seorang intruder ada 1001 cara untuk menemukan keynya.

Normalnya untuk tingkat keamanan yang lebih, password seharusnya di buat saltnya terlebih dahulu baru dibuat kemudian hash passwordnya. Cara kerjanya bisa dibilang sederhana namun sangat ampuh karena algoritmanya sangat-sangatlah tidak sesederhana yang dikira.

Dalam penyimpanan dengan metode hash password, satu-satunya cara untuk mendapatkan password adalah mengira-ngira passwordnya dengan bruteforce kemudian menggunakan salt untuk mendapatkan password yang benar yang mana nantinya password tersebut dikonversi ke dalam hash yang benar.

Tidak seperti enkripsi yang mana jika satu kunci diketahui maka semua hal yang dienkripsi dengan kunci yang sama akan mendapatkan perlakuan yang sama pula di tangan katakanlah cracker atau sejenisnya. Dekripsi dengan mudah dilakukan jika sudah tahu kuncinya bukan?

Zaman Berubah Teknologi Pun Pesat sekali Berubah, Jadi Waspadalah!

Dahulu kala kita menggunakan performa CPU untuk menghasilkan kecepatan yang dibutuhkan dalam melakukan brute force hash password. Tapi sekarang dengan adanya library semacam CUDA dan OpenCL komputer standar pun mampu melakukan hal seperti Super Komputer untuk mendapatkan password menggunakan metode brute force password.

Dengan keadaan seperti ini baik enkripsi maupun metode hash tidak lagi cocok digunakan untuk menyimpan password. Karena standarnya metode hashingnya selalu memiliki hasil hash password yang statis. Meski tidak statis tetap saja MD5 dan SHA1 memiliki kelemahan yang akan dijelaskan pada artikel kali ini.

JIka Anda perhatikan diluar sana terdapat banyak sekali layanan untuk hack password hash md5 dan sha1 yang mana layanan ini bisa Anda dapatkan secara cuma-cuma. Silahkan saja ketik di google, misalnya md5 password cracker, sha1 password cracker. Ada puluhan  website penyedia layanan untuk crack password yang masih aktif sampai saat ini. Bahkan ada yang menyediakan sampai ke aplikasi yang spesifik seperti hack password phpBB. Dan lain sebagainya.

Ben Tasker, seorang praktisi , ahli, dan juga seorang penetration tester melakukan beberapa percobaan untuk membuktikan tidak amannya metode penyimpanan password menggunakan hash yang dibuat oleh md5 dan sha1.

Hasil dari uji cobanya menggunakan komputer biasa, hanya dalam satu detik saja tercipta 5.357.000 hash password dibuat menggunakan MD5. Itu artinya jika salah satu member website Anda membuat password menggunakan tanggal lahir, dibutuhkan kurang dari 1 detik bagi seorang hacker untuk mendapatkannya. Cepat sekali bukan?

Lalu bagaimana dengan SHA1, sedikit lebih baik, dalam 1 detik tercipta 3.673.000 password hash yang dibuat menggunakan SHA1.

Lalu bagaimana solusinya? Tidak ada. Karena jika Anda ikutan nyemplung masuk ke dunia hitam, misalnya. Tidak ada sistem keamanan yang 100% aman, selalu saja ada celah. Para hacker pun menjamin sistem keamanan hanya sampai di tingkat 99% tidak bisa lebih dari itu. Selalu ada celah.


Lalu Selanjutnya Bagaimana? 

Solusi ditawarkan oleh para penggiat yang mengikuti library CUDA. Bcrypt namanya.
Teknik yang bisa dibilang menggabungkan hash dengan enkripsi, namun bukan juga keduanya. Karena md5 dan sha1 hanya berpatokan kepada hash, dan enkripsi berpatok kepada key. Sedangkan bCrypt tidak membutuhkan setting key, key di hasilkan secara sembarang, dengan pola generate key yang selalu berbeda. Metode ini benar-benar mampu memperlambat cracker jauh lebih lama.

Bayangkan saja butuh 0.400 detik untuk mengenerate sebuah password yang di buat menggunakan BCrypt hash dengan cost 12. Yang mana jika menggunakan md5 hanya butuh 0.008 detik saja.

Bagaimana Implementasinya dalam PHP

Berikut script yang bisa Anda gunakan untuk diimplementasikan pengganti MD5 dan SHA1.


/* pembuatan password */
$password = 'passwordAnda';
$passwordb_bCryptHash = bCrypt($password,12) ; 
/* 12 adalah cost bukan key, semakin tinggi nilainya maka
 semakin lama CPU menggenerate hash password yang lebih aman */


/* pengecekan password dari form login */
$password_dari_form_login = 'passwordAnda' ; /* diambil dari password yang dikirim lewat form login */
$password_dari_database = $passwordb_bCryptHash; 

if ($password_dari_database == crypt($password_dari_form_login ,$password_dari_database)){
 echo 'selamat datang, terima kasih sudah login! jangan sungkan-sungkan';
}
else{
 echo 'password ANDA SALAHHH!!!' 
} 

function bCrypt($pass,$cost){
      $chars='./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

      // Build the beginning of the salt
      $salt=sprintf('$2a$%02d$',$cost);

      // Seed the random generator
      mt_srand();

      // Generate a random salt
      for($i=0;$i<22;$i++) $salt.=$chars[mt_rand(0,63)];

     // return the hash
    return crypt($pass,$salt);
}

Selamat Mencoba.
Di sadur dari https://www.bentasker.co.uk/blog/security/201-why-you-should-be-asking-how-your-passwords-are-stored

Posting Komentar

6 Komentar

  1. Wah postingan yang menambah wawasan buat developer....Memang ilmuwebsite.com kreatif dan berbobot dalam memahami materi.

    DTC

    BalasHapus
  2. terimakasih pencerahannya min...semoha developer indonesia semakin jeli dlm keamanan

    BalasHapus
  3. Maaf gan, itu kan bersifat dinamis. Bagaimana cara menyimpannya di database?

    BalasHapus
    Balasan
    1. seperti biasa ketika agan menyimpan hash password md5 atau sha1 gan

      Hapus
  4. terkadang saya juga perlu melihat data yang ada diwesite
    bagaimana cara mendeskrip kembali mas? terima kasih

    BalasHapus