Ні, немає можливості використовувати JavaScript браузера для поліпшення захисту паролів. Настійно рекомендую прочитати цю статтю . У вашому випадку найбільшою проблемою є проблема курячих яєць:
У чому полягає "проблема курячого яйця" з доставкою криптографії Javascript?
Якщо ви не довіряєте мережі надавати пароль або, що ще гірше, не довіряєте серверу, що не зберігає таємниці користувачів, ви не можете довірити їм доставку коду безпеки. Той самий зловмисник, який нюхав паролі або читав щоденники перед тим, як ви ввели крипто, просто викрадає крипто-код після вас.
[...]
Чому я не можу використовувати TLS / SSL для доставки криптокоду Javascript?
Ти можеш. Це складніше, ніж здається, але ви безпечно передаєте Javascript crypto до браузера за допомогою SSL. Проблема в тому, що, встановивши захищений канал за допомогою SSL, вам більше не потрібна криптографія Javascript; у вас є "справжня" криптографія.
Що призводить до цього:
Проблема запуску криптокоду в Javascript полягає в тому, що практично будь-яка функція, від якої залежить крипто, може бути безшумно замінена будь-якою частиною вмісту, що використовується для створення сторінки хостингу. Криптозахист може бути скасований на початку процесу (шляхом створення підставних випадкових чисел, або підробки констант та параметрів, що використовуються алгоритмами), або пізніше (шляхом передачі ключового матеріалу назад зловмиснику), або --- у найбільш імовірному сценарії --- повністю обійшовши крипто.
Немає надійного способу для будь-якого фрагмента коду Javascript перевірити середовище його виконання. Крипто-код Javascript не може запитати: "Я справді маю справу з генератором випадкових чисел або з факсимільним файлом, який надає зловмисник?" І це, безумовно, не може стверджувати, що "нікому не дозволяється робити що-небудь із цією криптосекретною службою, за винятком способів, схвалених мною, автором". Це дві властивості, які часто надаються в інших середовищах, що використовують крипто, і в Javascript вони неможливі.
В основному проблема полягає в наступному:
- Ваші клієнти не довіряють вашим серверам, тому вони хочуть додати додатковий код безпеки.
- Цей код безпеки постачають ваші сервери (ті, яким вони не довіряють).
Або ж,
- Ваші клієнти не довіряють SSL, тому вони хочуть, щоб ви використовували додатковий код безпеки.
- Цей код безпеки доставляється через SSL.
Примітка: Крім того, SHA-256 не підходить для цього, оскільки так легко застосувати несольові неітераційні паролі . Якщо ви вирішили зробити це в будь-якому випадку, подивіться на реалізацію Bcrypt , Scrypt або PBKDF2 .