Setiap password pengguna aplikasi hendaknya dienkripsi untuk
keperluan faktor keamanan. Mengapa password harus dienkripsi? atau apa
sih enkripsi itu? OK… enkripsi adalah teknik penyandian pesan, yang
semula pesan tersebut dapat dibaca dan bermakna, setelah dienkripsi
menjadi tidak terbaca dan tidak bermakna. Lantas… mengapa password harus
dienkripsi? Pertanyaan tersebut saya balik, bagaimana jika password
tidak dienkripsi? Apabila password tidak dienkripsi, maka dapat dengan
mudah dibaca, dan digunakan oleh orang lain yang tidak berhak untuk
masuk ke dalam sistem atau aplikasi.
Dalam PHP, tentu kita tidak asing dengan perintah atau function
md5(). Function ini sering digunakan para programmer untuk mengenkripsi
password sebelum hasil enkripsi tersebut disimpan dalam database sistem,
ketika registrasi user baru. Hasil enkripsi md5() berupa suatu string
acak dengan panjang 32 karakter (256 bit). Sudah amankah penggunaan
md5()? Artikel ini akan membahasnya, serta memberikan tips bagaimana
cara membuat script PHP yang baik untuk mengolah password.
Nah… biasanya, struktur code untuk mengenkripsi password dengan md5
dan menyimpannya ke dalam database (pada registrasi user baru) adalah
sebagai berikut:
01.
02.
03.
// input username baru
04.
// input password asli baru ($passAsli)
05.
06.
$passEnkrip
= md5(
$passAsli
);
07.
08.
/* procedure simpan data username
09.
dan password hasil md5() ke db */
10.
11.
?>
Sedangkan struktur code untuk loginnya adalah
01.
02.
03.
// input login username
04.
// input login password asli ($passAsli)
05.
06.
if
(md5(
$passAsli
) ==
$passEnkrip
)
07.
{
08.
// login sukses
09.
// procedure jika login sukses
10.
}
11.
else
{
12.
// login gagal
13.
// procedure jika login gagal
14.
}
15.
16.
?>
Lantas… benar-benar sudah amankah penggunaan md5() dengan struktur code di atas?
Beberapa periode yang lalu, mungkin penggunaan struktur seperti di
atas sudah dirasa aman. Namun saat ini tidak aman lagi, karena sudah
banyak tool untuk mendekripsi hasil enkripsi md5(). Salah satu toolnya
seperti yang ada di situs http://md5.rednoize.com. Apa akibatnya jika password ini didekripsi? wah bahaya… bisa-bisa password aslinya ketahuan.
So… gimana donk? apakah md5() tidak usah digunakan lagi? Tidak usah
khawatir, kita tetap bisa menggunakan md5() namun perlu sedikit kreatif.
Maksudnya adalah bahwa kita perlu mengkombinasikan penggunaan md5()
dengan pengacak, misalnya kita gunakan md5() berulangkali, atau
menggabungkan password asli dengan suatu string tertentu lalu
dienkripsi.
Berikut ini contoh struktur code untuk menyimpan password terenkripsi menggunakan pengacak
01.
02.
03.
// input username baru
04.
// input password baru ($passAsli)
05.
06.
$pengacak
=
"AJWKXLAJSCLWLW"
;
07.
$passEnkrip
= md5(
$pengacak
. md5(
$passAsli
) .
$pengacak
);
08.
09.
/* procedure simpan data username
10.
dan password $passEnkrip ke db */
11.
12.
?>
Sedangkan berikut ini adalah struktur untuk loginnya
01.
02.
03.
// input login username
04.
// input login password asli ($passAsli)
05.
06.
$pengacak
=
"AJWKXLAJSCLWLW"
;
07.
08.
if
(md5(
$pengacak
. md5(
$passAsli
) .
$pengacak
) ==
$passEnkrip
)
09.
{
10.
// login sukses
11.
// procedure jika login sukses
12.
}
13.
else
{
14.
// login gagal
15.
// procedure jika login gagal
16.
}
17.
?>
Anda dapat mengubah isi pengacak atau mungkin mengubah format
enkripsinya menjadi model lain, misalnya menggabungkan 3 atau lebih
md5() dalam enkripsi. Dalam hal ini, hanya kita yang tahu format
enkripsi atau pengacaknya. Intinya adalah jangan mengenkripsi password
menggunakan md5() secara langsung, karena hal ini rawan untuk dihack
pada saat ini.
Mudah-mudahan artikel ini membantu…
EmoticonEmoticon