(String) Password for Authentication

Manakah yang lebih baik:

  • naruh hashed password di server dan minta plain text dari client, atau
  • minta hashed password dari client dan di-cek dengan plain text pada server ?

Kalau kita breakdown lagi, ada beberapa cara pengiriman-penyimpanan untuk verifikasi password dalam bentuk string:

  • Client side
    1. Kirim plain text
    2. Kirim encrypted text
    3. Kirim standard hash, hanya md5(password) saja
    4. Kirim private salted hash, md5(private salt + password)
    5. Kirim random salted hash, md5(random salt + password)
  • Server side
    1. Simpan plain text
    2. Simpan encrypted text
    3. Simpan standard hash, hanya md5(password) saja
    4. Simpan private salted hash, md5(private salt + password)
    5. Simpan random salted hash, md5(random salt + password)

Kombinasi-kombinasi diatas bisa dipasangkan sesuka hati, hanya saja kalau pake random salted hash, pasangannya tidak boleh hash lagi (karena tidak bisa di-cek passwordnya). Dan private salted hash hanya bisa dengan private salted hash lagi / plaintext.

Menurut saya

Metode Komentar
1. Plain Text Sangat berbahaya. Kalau client ngirim plaintext mudah sekali diintercept oleh eavesdropper. Selain itu, kalo entri password kehack, sangat berbahaya ketika password semua user ketauan. Bisa2 merembet ke semua akun pengguna selain akun sistem terkompromi.
2. Encrypted Text Di sisi client bisa diasumsikan aman, apabila menggunakan SSL (walaupun tidak bisa juga dibilang 100% aman. tapi harusnya sih aman). Kalau di sisi server agak berbahaya ketika key decryptionnya dapet. Bisa-bisa terekspose seperti plaintext.
3. Standard Hash Ada bahayanya. Bisa kena attack rainbow table. Banyak situs di internet yang bisa reverse dari kode hashed md5 / sha1 ke plaintext.
4. Private Salted Hash Jauh lebih aman daripada standard hash karena ada key rahasia untuk pembuatan kode md5 nya. Hanya saja, kalau key diketahui, hanya butuh waktu untuk membuat rainbow table nya untuk membobol semua user.
5. Random Salted Hash Sedikit modifikasi dari private salted hash, dengan hash unik untuk setiap passwordnya. Bisa dibilang best practice nya pakai metode ini. Kalaupun ada yang punya salted-hash nya, perlu brute force yang lebih berat karena harus membuat rainbow table untuk setiap password. Exhaustive brute force….

Kalau situs besar sepert Facebook, Google, dlsb, biasanya menggunakan metode Client=2 (menggunakan SSL) server=(4&5) (kayaknya)

Framework PHP seperti laravel by default menggunakan Client=1(HTTP)/2(HTTPS) Server=5

Biasanya situs-situs atau aplikasi yang tidak memikirkan security menggunakan metode Client=1 server=1

Jadi, kalo kata saya sih paling aman pakai metode Client=2 dan server=(4&5). Aman dari eavesdroper dan kalo hashed passwordnya ketauan, tetep perlu cari private key nya dan brute force.

Leave a Reply

Your email address will not be published. Required fields are marked *