No, no hay forma de utilizar JavaScript del navegador para mejorar la seguridad de las contraseñas. Le recomiendo que lea este artículo . En su caso, el mayor problema es el problema del huevo de gallina:
¿Cuál es el "problema del huevo de gallina" con la entrega de criptografía Javascript?
Si no confía en la red para entregar una contraseña o, peor aún, no confía en que el servidor no guarde secretos de usuario, no puede confiar en ellos para entregar el código de seguridad. El mismo atacante que estaba husmeando contraseñas o leyendo diarios antes de que introduzcas la criptografía simplemente está secuestrando el código criptográfico después de que tú lo hagas.
[...]
¿Por qué no puedo usar TLS / SSL para entregar el código criptográfico Javascript?
Usted puede. Es más difícil de lo que parece, pero transmite de forma segura criptografía Javascript a un navegador mediante SSL. El problema es que, después de haber establecido un canal seguro con SSL, ya no necesita la criptografía Javascript; tienes criptografía "real".
Lo que conduce a esto:
El problema con la ejecución de código criptográfico en Javascript es que prácticamente cualquier función de la que depende la criptografía podría ser anulada silenciosamente por cualquier parte del contenido utilizado para construir la página de alojamiento. La seguridad criptográfica se puede deshacer al principio del proceso (generando números aleatorios falsos o alterando las constantes y los parámetros utilizados por los algoritmos), o más tarde (enviando el material clave a un atacante), o --- en el escenario más probable --- pasando por alto la criptografía por completo.
No existe una forma confiable para que ningún fragmento de código Javascript verifique su entorno de ejecución. El código criptográfico de Javascript no puede preguntar: "¿Realmente estoy tratando con un generador de números aleatorios o con algún facsímil de uno proporcionado por un atacante?" Y ciertamente no puede afirmar que "nadie puede hacer nada con este secreto criptográfico, excepto en las formas que yo, el autor, apruebo". Estas son dos propiedades que a menudo se proporcionan en otros entornos que usan criptografía y son imposibles en Javascript.
Básicamente, el problema es este:
- Sus clientes no confían en sus servidores, por lo que quieren agregar un código de seguridad adicional.
- Ese código de seguridad lo entregan sus servidores (en los que no confían).
O alternativamente,
- Sus clientes no confían en SSL, por lo que quieren que use un código de seguridad adicional.
- Ese código de seguridad se envía a través de SSL.
Nota: Además, SHA-256 no es adecuado para esto, ya que es muy fácil forzar contraseñas no iteradas sin sal y sin forzar . Si decide hacer esto de todos modos, busque una implementación de bcrypt , scrypt o PBKDF2 .