Perlu diingat, password dengan panjang 8 digit dalam sebuah penelitian di Georgia Tech sudah bisa dipecahkan dalam beberapa jam dengan menggunakan "clusters of graphics cards". Password yang diteliti adalah password 8 digit dalam bentuk setelah dikenakan hashing. Kalau panjang 8 digit saja 'hanya' perlu beberapa jam saja maka kalau digitnya kurang dari itu maka waktu yang dibutuhkan lebih singkat lagi. Bahkah 6 digit password yang semuanya berupa huruf dapat dipecahkan dalam beberapa menit saja.
Oke, tak usah basa-basi lagi. Sekarang mari kita coba membuat password dengan kombinasi hashing sehingga password yang tadinya hanya 8 digit sekarang seolah-olah menjadi lebih panjang. Katakanlah password yang digunakan adalah "$aYaLup4" (tanpa tanda petik).
Maka sekarang kita akan melakukan kombinasi hashing seperti ini
$password1 = md5("$aYaLup4");
$password2 = sha1("iNi_SaLt".$password1);
$password1 hasilnya adalah d41d8cd98f00b204e9800998ecf8427e kemudian ditambahi salt ("iNi_SaLt" tanpa tanda petik) lalu dikenakan hashing md5 akhirnya password menjadi iNi_SaLtd41d8cd98f00b204e9800998ecf8427e lalu password ini dikenakan hashing sha1. Dengan demikian maka password yang disimpan di database (atau tempat lain) adalah 84959bdaa6b843e352fdd365cf7991055c3ee731
Dengan cara ini meskipun ditemukan bahwa password anda adalah 84959bdaa6b843e352fdd365cf7991055c3ee731 tapi ketika dilakukan katakanlah brute force attack maka yang didapatkan adalah iNi_SaLtd41d8cd98f00b204e9800998ecf8427e dan bukannya password asli anda. Salt sebaiknya isinya sesuatu yang unik dan susah ditebak agar lebih susah lagi password untuk dipecahkan.
Kombinasi hashing di atas sangat sederhana dan bisa digunakan lagi yang lainnya. Sebagai contoh dengan dua buah salt:
$password1 = md5("$aYaLup4");
$password2 = sha1("iNi_SaLt".$password1);
$password3 = sha1("iNi_SaLt_ke-2".$password2);
dan yang ini dengan dua buah salt dan salah satu salt dikenakan hashing:
$password1 = md5("$aYaLup4");
$password2 = sha1("iNi_SaLt".$password1);
$password3 = sha1(sha1("iNi_SaLt_ke-2").$password2);
dan yang ini dengan dua buah salt dan kedua salt dikenakan hashing:
$password1 = md5("$aYaLup4");
$password2 = sha1(md5("iNi_SaLt").$password1);
$password3 = sha1(sha1("iNi_SaLt_ke-2").$password2);
Untuk validasinya ya sama saja. Cukup cocokkan password yang diinputkan dengan password yang tersimpan. Misalnya untuk kombinasi:
$password1 = md5("$aYaLup4");
$password2 = sha1("iNi_SaLt".$password1);
maka validasinya (dalam PHP):
$password1 = md5($_POST['password']);
$password2 = sha1("iNi_SaLt".$password1);
Cocokkan $password2 dengan misalnya $password_user (yang diambil dari database misalnya). Kalau sama berari valid. Sebenarnya sekuat apapun sistem yang dibangun ada banyak hal yang mempengaruhi keamanannya. Kalau sistemnya sudah secure tapi user banyak yang ceroboh maka tetap bisa kebobolan. Jadi, sudahkan anda memiliki password (atau sistem penyimpanan password) yang aman?
Tidak ada komentar:
Posting Komentar