i (am) Blogger and U?

from X-periment to X-perience

Template Toko Online: Shopper

SHOPPER adalah HTML template (menggunakan Bootstrap 3.3.6) yang ditujukan untuk toko online. Template ini terdiri dari 6 halaman siap pakai yaitu home, product lists, shopping cart, det [...]

Aplikasi Web: URL Shortener Complete 2

URL Shortener Complete 2 adalah aplikasi yang membantu Anda untuk menjalankan situs/web yang memiliki fasilitas URL shortener. Pemendek URL sesuai namanya berfungsi untuk memangkas alam [...]

Online Shop Basic 1

Online Shop Basic 1 adalah paket minimalis aplikasi toko online instan yang dapat digunakan untuk menjalankan bisnis secara online. Aplikasi ini adalah aplikasi toko online yang "sudah [...]

Aplikasi Web: Custom Form

Aplikasi Web Custom Form, software berbasis web dengan fitur utama adalah pembuatan DYNAMIC FORM (form web dinamis). Form ini terdiri dari berbagai jenis field, seperti field input text [...]

Aplikasi Web: Online Shop PRO 2

Toko Online Pro 2 memiliki fitur-fitur yang sama persis dengan Toko Online Pro 1 tapi dengan theme/template yang berbeda.

Starter: Anime/Movie Sharing

Produk yang satu ini adalah aplikasi web yang dikhususkan bagi Anda yang ingin memiliki situs/web yang dengan fasilitas untuk menampilkan anime/movie dan dapat ditonton oleh para pengun [...]

2010
15Sept

Tips Memperpanjang (Mengamankan) Password dengan Hashing

Post category: Tips dan Trik

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". Satu hal lagi yang perlu diingat adalah jangan menyimpan password user ke database dalam bentuk "plain text" tanpa dilakukan hashing terlebih dahulu (jadi yang tahu password aslinya hanyalah user yang bersangkutan).

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 "tentu saja (seharusnya)" lebih singkat lagi. Bahkah 6 digit password yang semuanya berupa huruf dapat dipecahkan dalam beberapa menit saja. Tentu saja semakin "ke sini" bakalan semakin cepat.

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 misalnya "brute force attack" maka yang didapatkan adalah iNi_SaLtd41d8cd98f00b204e9800998ecf8427e dan bukannya password asli Anda. "Salt" sebaiknya isinya sesuatu yang unik (tiap user memiliki "salt" yang berbeda) dengan panjang karakter minimal 15 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 disimpan dalam database). Kalau sama berarti valid. Sebenarnya sekuat apapun sistem yang dibangun ada banyak hal yang mempengaruhi keamanannya. Kalau sistemnya sudah lumayan "secure" tapi user banyak yang ceroboh maka tetap bisa kebobolan. Jadi, sudahkan Anda memiliki password (atau sistem penyimpanan password) yang aman?

Update:
Mulai PHP 5.6.0 untuk memeriksa dua hash apakah sama dapat digunakan "function" hash_equals(). Apabila server Anda masih menggunakan PHP versi di bawah 5.6.0 maka Anda bisa menggunakan "function" di bawah ini untuk melakukan hal yang sama:

if(! function_exists('hash_equals')) {
function hash_equals($a, $b) {
$ret = strlen($a) ^ strlen($b);
$ret |= array_sum(unpack("C*", $a^$b));
return !$ret;
}
}


Untuk saat ini sebaiknya dihindari menggunakan "hash yang lemah" seperti sha1 dan md5 untuk penyimpanan password (karena sha1 dan md5 dibuat bukan ditujukan untuk "password storage"). Anda bisa menggunakan "function" hash_pbkdf2() atau password_hash() (mulai ada sejak PHP 5.5.0) atau kalau server Anda masih menggunakan PHP versi di bawah 5.5.0 maka Anda bisa menggunakan https://defuse.ca/php-pbkdf2.htm atau https://github.com/ircmaxell/password_compat/ untuk melakukan hal yang sama.


No comments...
>> Comments closed. <<