Ada banyak situs di Internet yang memerlukan informasi login, dan satu-satunya cara untuk melindungi terhadap penggunaan kembali kata sandi adalah "janji" bahwa kata sandi di-hash di server, yang tidak selalu benar.
Jadi saya bertanya-tanya, seberapa sulit untuk membuat halaman web yang hash password di komputer klien (dengan Javascript), sebelum mengirimnya ke server, di mana mereka akan di-hash? Secara teori ini tidak memberikan keamanan ekstra, tetapi dalam praktiknya ini dapat digunakan untuk melindungi terhadap "situs jahat" yang tidak mengaitkan kata sandi Anda di server.
javascript
security
client-relations
hashing
client-side
Martín Fixman
sumber
sumber
clear
dalamnya hanya masturbasi matematika pada saat itu. Saya harus memperbaiki sistem yang saya warisi, yang dirancang persis seperti yang Anda dan OP jelaskan, itu terus-menerus diretas oleh remaja dengan Wireshark. Kami hanya menguncinya ketika kami memasukkanREAL
enkripsi dan dienkripsi dan menandatangani semua muatan ke dan dari server, manipulasi akun berhenti dan tidak pernah terjadi lagi setelah itu.Jawaban:
Kenapa tidak digunakan? Karena itu banyak pekerjaan ekstra untuk mendapatkan nol. Sistem seperti itu tidak akan lebih aman. Bahkan mungkin kurang aman karena memberikan kesan yang salah tentang lebih aman, mengarahkan pengguna untuk mengadopsi praktik yang kurang aman (seperti penggunaan kembali kata sandi, kata sandi kamus, dll).
sumber
Bagaimana tepatnya hal ini melindungi Anda? Kedengarannya semua yang ingin Anda lakukan adalah hash kata sandi hash yang tidak berguna. Karena kata sandi hash kemudian akan menjadi kata sandi.
Bagaimana kalau tidak menggunakan kata sandi yang sama untuk lebih dari satu situs. Alasan situs web meng-hash kata sandi secara teori adalah untuk mencegah akses ke akun Anda jika MEREKA dikompromikan. Menggunakan kata sandi yang sama untuk banyak situs web adalah hal yang bodoh.
Jika Anda memang menggunakan javascript, yang harus dilakukan "peretas" adalah, gunakan metode yang sama pada kata sandi hashed-hashed. Setelah Anda memiliki informasi hash, itu hanya waktu yang diperlukan untuk menghitung kata sandi-> hash yang sama dalam basis data yang merupakan faktor yang mencegah akses ke akun.
sumber
Karena itu akan menambah sedikit tanpa nilai. Alasan hashing adalah bahwa jika database Anda diretas, peretas tidak akan memiliki daftar kata sandi yang valid, hanya hash. Karenanya mereka tidak dapat menyamar sebagai pengguna. Sistem Anda tidak memiliki pengetahuan tentang kata sandi.
Aman berasal dari sertifikat SSL plus beberapa bentuk otentikasi. Saya ingin pengguna saya memberikan kata sandi sehingga saya bisa menghitung hash darinya.
Juga, algoritma hashing akan berada di server di area yang lebih aman. Menempatkannya di klien, sangat mudah untuk mendapatkan kode sumber untuk Javascript, bahkan jika file skrip direferensikan tersembunyi.
sumber
Solusinya lebih sederhana dari itu. Sertifikat klien. Saya membuat sertifikat klien di mesin saya. Ketika saya mendaftar dengan situs web, kami berjabat tangan menggunakan sertifikat klien saya dan sertifikat server.
Tidak ada kata sandi yang dipertukarkan dan bahkan jika seseorang meretas basis data semua yang mereka miliki adalah kunci publik dari sertifikat klien saya (yang harus diasinkan dan dienkripsi oleh server untuk tingkat keamanan tambahan).
Sertifikat klien dapat disimpan pada kartu pintar (dan diunggah ke brankas online aman menggunakan kata sandi utama).
Keindahan dari semua itu adalah menghilangkan konsep phishing ... Anda tidak pernah memasukkan kata sandi ke situs web, Anda hanya berjabat tangan dengan situs web itu. Yang mereka dapatkan adalah kunci publik Anda yang tidak berguna tanpa kunci pribadi. Satu-satunya kerentanan adalah menemukan tabrakan selama jabat tangan dan itu hanya akan bekerja satu kali di satu situs web.
Microsoft mencoba menyediakan sesuatu seperti ini di Windows dengan Cardspace dan kemudian mengirimkannya sebagai standar terbuka. OAuth agak mirip tetapi bergantung pada "pihak penerbit" perantara. InfoCards di sisi lain dapat diterbitkan sendiri. Itu solusi nyata untuk masalah kata sandi ... menghapus kata sandi sekaligus.
OAuth adalah langkah ke arah yang benar.
sumber
sebagian besar balasan di sini tampaknya benar-benar ketinggalan titik hashing kata sandi sisi klien.
intinya bukan untuk mengamankan akses ke server yang Anda masuki, karena mencegat hash tidak lebih aman daripada mencegat kata sandi teks biasa.
intinya adalah benar-benar untuk mengamankan kata sandi pengguna , yang biasanya jauh lebih berharga daripada akses masuk situs individu karena sebagian besar pengguna akan menggunakan kembali kata sandi mereka untuk beberapa situs (mereka seharusnya tidak tetapi kenyataannya adalah bahwa mereka melakukannya sehingga tidak boleh dilambaikan ).
ssl sangat bagus untuk melindungi dari serangan mitm, tetapi jika aplikasi login dikompromikan di server, ssl tidak akan melindungi pengguna Anda. jika seseorang memiliki akses jahat ke server web, mereka kemungkinan akan dapat mencegat kata sandi dalam teks biasa karena dalam banyak kasus kata sandi hanya diacak oleh skrip di server. maka penyerang dapat mencoba kata sandi tersebut di situs lain (biasanya lebih berharga) menggunakan nama pengguna yang serupa.
keamanan adalah pertahanan yang mendalam, dan hashing sisi klien cukup menambahkan lapisan lain. ingat bahwa sementara melindungi akses ke situs Anda sendiri adalah penting, melindungi kerahasiaan kata sandi pengguna Anda jauh lebih penting karena penggunaan kembali kata sandi di situs lain.
sumber
Ini sangat mungkin, dan sebenarnya Anda tidak perlu menunggu situs web.
Lihatlah SuperGenPass . Ini adalah bookmarklet.
Itu hanya mengenali bidang kata sandi, menggabungkan apa yang Anda ketik dengan domain situs web, hash itu, mangles itu agak sehingga hanya mendapatkan karakter "diterima" dalam kata sandi, dan hanya dengan itu kata sandi hash Anda dikirim pada kabel.
Dengan menggunakan domain situs dalam proses, Anda mendapatkan kata sandi unik per situs, bahkan jika Anda selalu menggunakan kembali kata sandi yang sama.
Ini tidak terlalu aman (base64-MD5), tetapi Anda dengan sempurna mendistribusikan implementasi berbasis sha-2 jika Anda menginginkannya.
Satu-satunya downside adalah jika perubahan domain, dalam hal ini Anda harus meminta situs web untuk mengatur ulang kata sandi Anda karena Anda tidak dapat memulihkannya sendiri ... itu tidak sering terjadi, jadi saya menganggapnya sebagai trade-off yang dapat diterima.
sumber
password
atau atau SHA-256 daripassword
dengan sedikit garam yang diketahui klien, seorang pria di tengah lampiran dapat menangkapnya.Saya suka jawaban X4u, tetapi menurut saya sesuatu seperti itu harus diintegrasikan ke dalam browser / spesifikasi html - karena saat ini hanya setengah dari jawabannya.
Inilah masalah yang saya miliki sebagai pengguna - saya tidak tahu apakah kata sandi saya akan di-hash di ujung yang lain ketika disimpan dalam database. Garis-garis antara saya dan server mungkin dienkripsi tetapi saya tidak tahu apa yang terjadi pada kata sandi saya setelah mencapai tujuan - mungkin disimpan sebagai teks biasa. Admin admin database mungkin akhirnya menjual database dan sebelum Anda menyadarinya, seluruh dunia tahu kata sandi Anda.
Sebagian besar pengguna menggunakan kembali kata sandi. Orang yang tidak teknis karena mereka tidak tahu yang lebih baik. Orang-orang teknis karena begitu Anda mendapatkan kata sandi ke-15 atau lebih banyak orang tidak akan mengingatnya kecuali mereka menuliskannya (Yang kita semua tahu juga merupakan ide yang buruk).
Jika Chrome atau IE atau apa pun yang saya gunakan bisa memberi tahu saya bahwa kotak kata sandi secara instan akan menjadi hash sisi klien menggunakan garam yang dihasilkan server dan secara efektif mengamplas kata sandi itu sendiri - maka saya akan tahu bahwa sebagai pengguna saya dapat menggunakan kembali kata sandi dengan risiko lebih kecil. Saya masih ingin saluran yang dienkripsi juga dan saya tidak ingin ada saluran jatuh selama transmisi.
Pengguna perlu tahu bahwa kata sandi mereka bahkan tidak tersedia untuk dikirim ke server - hanya hash. Saat ini bahkan menggunakan solusi X4U, mereka tidak memiliki cara untuk mengetahui hal ini karena Anda tidak tahu apakah teknologi itu digunakan.
sumber
Saya pikir ini adalah metode yang baik untuk digunakan ketika membangun sesuatu seperti kerangka kerja, CMS, perangkat lunak forum, dll, di mana Anda tidak mengontrol server yang mungkin diinstal. Ya, Anda harus selalu merekomendasikan penggunaan SSL untuk login dan aktivitas login, tetapi beberapa situs yang menggunakan framework / cms Anda tidak akan memilikinya, sehingga mereka masih bisa mendapat manfaat dari ini.
Seperti yang telah ditunjukkan orang lain, manfaatnya di sini BUKAN bahwa serangan MITM tidak dapat mengizinkan orang lain untuk masuk ke situs khusus ini seperti Anda, tetapi bahwa penyerang itu tidak akan dapat menggunakan kombo nama pengguna / kata sandi yang sama untuk masuk ke kemungkinan lusinan situs lain tempat Anda mungkin memiliki akun.
Skema seperti itu harus digarami dengan garam acak, atau kombo garam khusus-situs dan spesifik-pengguna, sehingga seseorang yang mendapatkan kata sandi tidak dapat menggunakannya untuk nama pengguna yang sama di situs lain (bahkan situs yang menggunakan skema hashing yang sama ), atau terhadap pengguna situs situs lain yang mungkin memiliki kata sandi yang sama.
Yang lain menyarankan bahwa pengguna harus membuat kata sandi unik untuk setiap situs yang mereka gunakan, atau menggunakan pengelola kata sandi. Meskipun ini adalah nasihat yang bagus dalam teori, kita semua tahu ini adalah kebodohan untuk bergantung pada dunia nyata. Persentase pengguna yang melakukan hal-hal ini kecil dan saya ragu itu akan berubah dalam waktu dekat.
Jadi pengolah kata sandi javascript adalah jenis yang paling sedikit yang dapat dilakukan oleh pengembang kerangka / cms untuk membatasi kerusakan seseorang yang mencegat kata sandi dalam perjalanan (yang mudah melalui jaringan wifi saat ini) jika pemilik situs dan pengguna akhir menjadi lalai tentang keamanan (yang kemungkinan besar).
sumber