Password Mesti Dikasih Garam Biar Aman

Bayangkan kamu dan temanmu membuat akun di sebuah website, dengan password sama persis. Lalu website itu kena serangan hacker dan akun kalian semua langsung diambil alih. Kemungkinan besar website itu lupa kasih garam ke password kalian. Koq bisa?

Hacker biasanya akan membuka isi database website yang diserangnya. Saat menemukan beberapa baris dengan password yang sama, tinggal tebak salah satunya, lalu akun lain juga bisa diambil alih. Ini namanya rainbow table dalam dunia informatika.

<?php

//Password yang diketik user saat membuat akun.
$password = "password123";

//Proses hash menggunakan metode sha256 tanpa garam.
$hash = hash('sha256', $password);

//Hasilnya akan selalu sama seperti berikut ini
//ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94fCode language: HTML, XML (xml)

Berapa kalipun dicoba, hasilnya akan selalu sama. Ini terjadi karena tidak adanya string tambahan yang membedakan antar akun. Makanya akun dengan password sama di sistem yang masih memakai metode ini akan rentan diretas, jika salah satunya berhasil dibobol oleh hacker.

Awalnya, programmer mengakalinya dengan menambahkan string tertentu di depan atau belakang password sebelum hashing. Ini yang disebut dengan istilah salted, atau dikasih garam. Tetapi sekali lagi, cara ini tidak sepenuhnya menyelesaikan masalah. Rainbow table mungkin akan teratasi, tetapi isu keamanannya tidak.

Hacker masih bisa mencari pola string tambahan itu. Kalau sudah ketemu, masalah yang sama dengan rainbow table akan muncul kembali. Apalagi kalo string tambahannya bersifat statik alias memakai string yang sama untuk semua akun.

Maka developer bahasa pemrograman seperti PHP mengembangkan cara untuk membuatnya lebih efektif. Tidak perlu memikirkan cara bikin string tambahan, metode hashing paling aman, dan lain-lain.

<?php

//Password yang diketik user saat membuat akun.
$password = "password123";

//Proses membuat salted password menggunakan fungsi bawaan PHP.
$hashedpassword = password_hash($password, PASSWORD_DEFAULT);

//Contoh hasil salted hashed yang dihasilkan :
//$2y$12$jVCd9t4qDR/lf6kWJs0TKe9yz/04PJ.XE9wSJM2z/MNludf3y3AZiCode language: HTML, XML (xml)

Hasil salted hash tersebut memuat metodenya, cost, string garamnya, dan passwordnya sendiri. Mencari pola untuk membaca hasil ini akan sulit dilakukan dan hacker biasanya tidak punya banyak waktu untuk mencobanya.

Walaupun ada lebih dari 1 akun memakai password yang sama, hasil salted password yang dihasilkan selalu berbeda. Ini karena string yang jadi garamnya berbeda-beda, dan sehingga saat dilakukan hashing juga hasilnya berbeda.

Jadi, masih relevan kah anjuran untuk nggak memakai password yang sederhana? Toh hasil hashing passwordnya akan berbeda-beda.

Kalo password yang dipakai adalah ‘123456’ atau ‘pass1234’ sih menurutku nggak perlu baca tabel dulu. Hacker bisa langsung mencobanya karena password seperti itu terlalu umum. Setidaknya gunakan kombinasi yang sedikit aneh dan nggak mudah ditebak.

Untuk media sosial misalnya, jangan pakai tanggal lahir jadi password. Media sosial umumnya menyimpai tanggal lahirmu untuk verifikasi usia. Hacker bisa saja iseng mencobanya jadi kombinasi password. Dan kalau berhasil login, kamu baru saja kehilangan akunmu, karena kecerobohanmu sendiri.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *