Нет, нет возможности использовать JavaScript в браузере для повышения безопасности паролей. Я очень рекомендую вам прочитать эту статью . В вашем случае самая большая проблема - проблема курица-яйцо:
В чем «проблема куриного яйца» с предоставлением криптографии Javascript?
Если вы не доверяете сети для доставки пароля или, что еще хуже, не доверяете серверу не хранить секреты пользователей, вы не можете доверять им доставку кода безопасности. Тот же злоумышленник, который вынюхивал пароли или читал дневники до того, как вы внедрили криптовалюту, просто захватывает криптокод после того, как вы это сделаете.
[...]
Почему я не могу использовать TLS / SSL для доставки криптокода Javascript?
Вы можете. Это сложнее, чем кажется, но вы безопасно передаете шифрование Javascript браузеру с помощью SSL. Проблема в том, что, установив безопасный канал с SSL, вам больше не нужна криптография Javascript; у вас есть «настоящая» криптография.
Что приводит к следующему:
Проблема с запуском криптографического кода в Javascript заключается в том, что практически любая функция, от которой зависит криптография, может быть незаметно переопределена любым фрагментом контента, используемым для создания страницы хостинга. Криптобезопасность может быть отменена на раннем этапе процесса (путем генерации фиктивных случайных чисел или путем изменения констант и параметров, используемых алгоритмами), или позже (путем передачи ключевого материала обратно злоумышленнику) или --- в наиболее вероятном сценарии --- полностью обходя криптовалюту.
Для какой-либо части кода Javascript нет надежного способа проверить среду его выполнения. Криптографический код Javascript не может спросить: «Я действительно имею дело с генератором случайных чисел или с каким-то его факсимиле, предоставленным злоумышленником?» И он определенно не может утверждать, что «никому не разрешено делать что-либо с этой криптографической тайной, кроме тех способов, которые одобряю я, автор». Это два свойства, которые часто предоставляются в других средах, использующих шифрование, и они невозможны в Javascript.
В основном проблема заключается в следующем:
- Ваши клиенты не доверяют вашим серверам, поэтому они хотят добавить дополнительный код безопасности.
- Этот код безопасности доставляется вашими серверами (теми, которым они не доверяют).
Или, альтернативно,
- Ваши клиенты не доверяют SSL, поэтому они хотят, чтобы вы использовали дополнительный код безопасности.
- Этот защитный код доставляется через SSL.
Примечание. Кроме того, для этого не подходит SHA-256, так как несоленые неповторяющиеся пароли очень легко перебрать . Если вы все равно решите это сделать, поищите реализацию bcrypt , scrypt или PBKDF2 .