Non, il n'y a aucun moyen d'utiliser le JavaScript du navigateur pour améliorer la sécurité des mots de passe. Je vous recommande vivement de lire cet article . Dans votre cas, le plus gros problème est le problème des œufs de poule:
Quel est le "problème de l'oeuf de poule" avec la livraison de la cryptographie Javascript?
Si vous ne faites pas confiance au réseau pour fournir un mot de passe ou, pire, si vous ne faites pas confiance au serveur pour ne pas garder les secrets des utilisateurs, vous ne pouvez pas leur faire confiance pour fournir le code de sécurité. Le même attaquant qui reniflait des mots de passe ou lisait des journaux avant d'introduire la cryptographie détourne simplement du code cryptographique après vous.
[...]
Pourquoi ne puis-je pas utiliser TLS / SSL pour fournir le code crypto Javascript?
Vous pouvez. C'est plus difficile qu'il n'y paraît, mais vous transmettez en toute sécurité la cryptographie Javascript à un navigateur utilisant SSL. Le problème est qu'après avoir établi un canal sécurisé avec SSL, vous n'avez plus besoin de la cryptographie Javascript; vous avez une «vraie» cryptographie.
Ce qui conduit à ceci:
Le problème avec l'exécution de code crypto en Javascript est que pratiquement toutes les fonctions dont dépend la cryptographie peuvent être remplacées silencieusement par tout élément de contenu utilisé pour créer la page d'hébergement. La sécurité cryptographique peut être annulée tôt dans le processus (en générant de faux nombres aléatoires, ou en falsifiant les constantes et les paramètres utilisés par les algorithmes), ou plus tard (en renvoyant le matériel clé à un attaquant), ou --- dans le scénario le plus probable --- en contournant complètement la crypto.
Il n'y a aucun moyen fiable pour un morceau de code Javascript de vérifier son environnement d'exécution. Le code crypto Javascript ne peut pas demander, "est-ce que j'ai vraiment affaire à un générateur de nombres aléatoires, ou à un fac-similé de celui fourni par un attaquant?" Et il ne peut certainement pas affirmer que "personne n'est autorisé à faire quoi que ce soit avec ce crypto secret sauf d'une manière que moi, l'auteur, j'approuve". Ce sont deux propriétés qui sont souvent fournies dans d'autres environnements utilisant la cryptographie, et elles sont impossibles en Javascript.
Fondamentalement, le problème est le suivant:
- Vos clients ne font pas confiance à vos serveurs, ils souhaitent donc ajouter un code de sécurité supplémentaire.
- Ce code de sécurité est fourni par vos serveurs (ceux auxquels ils ne font pas confiance).
Ou bien,
- Vos clients ne font pas confiance à SSL, ils veulent donc que vous utilisiez un code de sécurité supplémentaire.
- Ce code de sécurité est fourni via SSL.
Remarque: De plus, SHA-256 ne convient pas à cela, car il est si facile de forcer brutalement des mots de passe non itérés non salés . Si vous décidez quand même de le faire, recherchez une implémentation de bcrypt , scrypt ou PBKDF2 .