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 celui de l'œuf et de la poule :
Quel est le "problème de l'œuf et de la poule" avec la cryptographie Javascript ?
Si vous ne faites pas confiance au réseau pour délivrer 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 lui faire confiance pour délivrer un code de sécurité. Le même attaquant qui reniflait les mots de passe ou lisait les journaux intimes avant que vous n'introduisiez la cryptographie ne fait que détourner le code cryptographique après que vous l'ayez fait.
[...]
Pourquoi ne puis-je pas utiliser TLS/SSL pour transmettre le code cryptographique Javascript ?
Tu peux. C'est plus difficile qu'il n'y paraît, mais vous pouvez transmettre en toute sécurité le cryptage Javascript à un navigateur en 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 la "vraie" cryptographie.
Ce qui nous amène à ceci :
Le problème de l'exécution d'un code de cryptage en Javascript est que pratiquement toutes les fonctions dont dépend le cryptage peuvent être remplacées silencieusement par n'importe quel élément de contenu utilisé pour construire la page d'hébergement. La sécurité cryptographique peut être annulée au début du processus (en générant de faux nombres aléatoires ou en modifiant les constantes et les paramètres utilisés par les algorithmes), ou plus tard (en remettant les clés à un attaquant), ou encore dans le scénario le plus probable --- en contournant entièrement la cryptographie.
Il n'existe aucun moyen fiable pour un morceau de code Javascript de vérifier son environnement d'exécution. Le code cryptographique Javascript ne peut pas demander : "Suis-je vraiment en présence d'un générateur de nombres aléatoires ou d'un fac-similé de générateur fourni par un pirate ? Et il ne peut certainement pas affirmer "personne n'est autorisé à faire quoi que ce soit avec ce secret cryptographique, sauf de la manière que moi, l'auteur, j'approuve". Ce sont deux propriétés qui sont souvent fournies dans d'autres environnements qui utilisent la cryptographie, et elles sont impossibles en Javascript.
En gros, le problème est le suivant :
- Vos clients ne font pas confiance à vos serveurs, ils veulent donc ajouter un code de sécurité supplémentaire.
- Ce code de sécurité est délivré par vos serveurs (ceux auxquels ils ne font pas confiance).
Ou alternativement,
- Vos clients n'ont pas confiance en SSL, ils veulent donc que vous utilisiez un code de sécurité supplémentaire.
- Ce code de sécurité est délivré via SSL.
Note : SHA-256 n'est pas non plus adapté à cette situation, car il est si facile de force brute mots de passe non scellés et non itérés . Si vous décidez quand même de le faire, cherchez une implémentation de bcrypt , scrypt ou PBKDF2 .