(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
- Kirim plain text
- Kirim encrypted text
- Kirim standard hash, hanya md5(password) saja
- Kirim private salted hash, md5(private salt + password)
- Kirim random salted hash, md5(random salt + password)
- Server side
- Simpan plain text
- Simpan encrypted text
- Simpan standard hash, hanya md5(password) saja
- Simpan private salted hash, md5(private salt + password)
- Simpan random salted hash, md5(random salt + password)
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…. |
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.