Tidak, tidak ada cara menggunakan JavaScript browser untuk meningkatkan keamanan kata sandi. Saya sangat menyarankan Anda membaca artikel ini . Dalam kasus Anda, masalah terbesar adalah masalah telur ayam:
Apa "masalah telur ayam" dengan pengiriman kriptografi Javascript?
Jika Anda tidak mempercayai jaringan untuk memberikan kata sandi, atau, lebih buruk lagi, tidak mempercayai server untuk tidak menyimpan rahasia pengguna, Anda tidak dapat mempercayai mereka untuk mengirimkan kode keamanan. Penyerang yang sama yang mengendus kata sandi atau membaca buku harian sebelum Anda memperkenalkan crypto hanya membajak kode crypto setelah Anda melakukannya.
[...]
Mengapa saya tidak dapat menggunakan TLS / SSL untuk mengirimkan kode kripto Javascript?
Kamu bisa. Ini lebih sulit daripada kedengarannya, tetapi Anda mengirimkan kripto Javascript dengan aman ke browser menggunakan SSL. Masalahnya adalah, setelah membuat saluran aman dengan SSL, Anda tidak lagi memerlukan kriptografi Javascript; Anda memiliki kriptografi "nyata".
Yang mengarah ke ini:
Masalah dengan menjalankan kode crypto di Javascript adalah bahwa hampir semua fungsi yang bergantung pada crypto dapat diganti secara diam-diam oleh konten apa pun yang digunakan untuk membangun halaman hosting. Keamanan kripto dapat dibatalkan di awal proses (dengan menghasilkan angka acak palsu, atau dengan merusak konstanta dan parameter yang digunakan oleh algoritme), atau nanti (dengan memasukkan materi kunci kembali ke penyerang), atau --- dalam skenario yang paling mungkin --- dengan melewati crypto seluruhnya.
Tidak ada cara yang dapat diandalkan untuk setiap bagian kode Javascript untuk memverifikasi lingkungan eksekusinya. Kode kripto Javascript tidak bisa bertanya, "apakah saya benar-benar berurusan dengan generator nomor acak, atau dengan beberapa faksimili yang disediakan oleh penyerang?" Dan tentu saja tidak dapat menyatakan "tidak ada yang diizinkan untuk melakukan apa pun dengan rahasia crypto ini kecuali dengan cara yang saya, penulis, setujui". Ini adalah dua properti yang sering disediakan di lingkungan lain yang menggunakan kripto, dan tidak mungkin di Javascript.
Pada dasarnya masalahnya adalah ini:
- Klien Anda tidak mempercayai server Anda, jadi mereka ingin menambahkan kode keamanan ekstra.
- Kode keamanan itu dikirimkan oleh server Anda (yang tidak mereka percayai).
Atau sebagai alternatif,
- Klien Anda tidak mempercayai SSL, jadi mereka ingin Anda menggunakan kode keamanan ekstra.
- Kode keamanan itu dikirim melalui SSL.
Catatan: Selain itu, SHA-256 tidak cocok untuk ini, karena sangat mudah untuk memaksa kata sandi non-iterasi tanpa salt . Jika Anda tetap memutuskan untuk melakukannya, cari implementasi dari bcrypt , scrypt atau PBKDF2 .