Không, không có cách nào sử dụng JavaScript của trình duyệt để cải thiện tính bảo mật của mật khẩu. Tôi rất khuyên bạn nên đọc bài viết này . Trong trường hợp của bạn, vấn đề lớn nhất là vấn đề trứng gà:
"Vấn đề với quả trứng gà" với việc phân phối mật mã Javascript là gì?
Nếu bạn không tin tưởng mạng cung cấp mật khẩu, hoặc tệ hơn, không tin tưởng máy chủ không giữ bí mật của người dùng, bạn không thể tin tưởng họ cung cấp mã bảo mật. Cũng chính kẻ tấn công đã đánh hơi mật khẩu hoặc đọc nhật ký trước khi bạn giới thiệu tiền điện tử chỉ đơn giản là chiếm đoạt mã tiền điện tử sau khi bạn làm vậy.
[...]
Tại sao tôi không thể sử dụng TLS / SSL để phân phối mã tiền điện tử Javascript?
Bạn có thể. Nghe có vẻ khó hơn nhưng bạn có thể truyền mã hóa Javascript tới trình duyệt bằng SSL một cách an toàn. Vấn đề là, sau khi thiết lập một kênh an toàn với SSL, bạn không cần mã hóa Javascript nữa; bạn có mật mã "thực".
Dẫn đến điều này:
Vấn đề với việc chạy mã tiền điện tử trong Javascript là trên thực tế bất kỳ chức năng nào mà tiền điện tử phụ thuộc vào đều có thể bị ghi đè âm thầm bởi bất kỳ phần nội dung nào được sử dụng để xây dựng trang lưu trữ. Bảo mật tiền điện tử có thể được hoàn tác sớm trong quá trình này (bằng cách tạo các số ngẫu nhiên không có thật hoặc bằng cách giả mạo các hằng số và thông số được sử dụng bởi các thuật toán) hoặc sau đó (bằng cách viết lại tài liệu chính cho kẻ tấn công) hoặc --- trong trường hợp có khả năng xảy ra nhất --- bằng cách bỏ qua hoàn toàn tiền điện tử.
Không có cách nào đáng tin cậy cho bất kỳ đoạn mã Javascript nào để xác minh môi trường thực thi của nó. Mã tiền điện tử Javascript không thể hỏi, "tôi thực sự đang xử lý một trình tạo số ngẫu nhiên hay với một số bản fax của một số do kẻ tấn công cung cấp?" Và chắc chắn không thể khẳng định "không ai được phép làm bất cứ điều gì với bí mật tiền điện tử này ngoại trừ những cách mà tôi, tác giả, chấp thuận". Đây là hai thuộc tính thường được cung cấp trong các môi trường khác sử dụng tiền điện tử và chúng là không thể trong Javascript.
Về cơ bản, vấn đề là:
- Khách hàng của bạn không tin tưởng máy chủ của bạn, vì vậy họ muốn thêm mã bảo mật bổ sung.
- Mã bảo mật đó được phân phối bởi các máy chủ của bạn (những máy chủ mà họ không tin tưởng).
Hay cách khác,
- Khách hàng của bạn không tin tưởng SSL, vì vậy họ muốn bạn sử dụng mã bảo mật bổ sung.
- Mã bảo mật đó được gửi qua SSL.
Lưu ý: Ngoài ra, SHA-256 không phù hợp cho việc này, vì quá dễ dàng để ép buộc các mật khẩu không lặp lại không được đánh giá cao . Nếu bạn vẫn quyết định thực hiện việc này, hãy tìm cách triển khai bcrypt , scrypt hoặc PBKDF2 .