::...Penguasaan akan teknologi di masa mendatang akan lebih menuntut sumber daya manusia yang berkualitas dalam penguasan teknologi. Dengan adanya tehnologi segala kegiatan atau aktvitas manusia akan lebih terbantu dan menjadi lebih mudah, efisien waktu, tenaga, biaya dan tidak terikat oleh jarak dan waktu ...::

Minggu, Desember 19, 2010

Tips Memperpanjang Karakter Password dengan Kombinasi Hashing

Mungkin dulu password dengan panjang karakter 6 digit sudah cukup handal untuk mengamankan data-data penting. Semakin lama dengan semakin murahnya biaya komputasi maka 6 digit sudah dianggap tidak aman dan kemudian ditingkatkan menjadi 8 digit. Perkembangan selanjutnya adalah mengkombinasikan apa yang biasa disebut 'salt' untuk 'memperpanjang' digit password. Dengan penambahan salt maka password yang tadinya memiliki panjang n maka sekarang setelah ditambahi salt maka panjangnya menjadi bertambah.

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: