Il existe de nombreux sites sur Internet qui nécessitent des informations de connexion, et le seul moyen de se protéger contre la réutilisation des mots de passe est la "promesse" que les mots de passe sont hachés sur le serveur, ce qui n'est pas toujours vrai.
Je me demande donc à quel point il est difficile de créer une page Web qui hache les mots de passe sur l'ordinateur client (avec Javascript), avant de les envoyer au serveur, où ils seraient hachés de nouveau. En théorie, cela n'apporte aucune sécurité supplémentaire, mais dans la pratique, cela peut être utilisé pour se protéger contre les "sites non autorisés" qui n'empiètent pas votre mot de passe sur le serveur.
javascript
security
client-relations
hashing
client-side
Martín Fixman
la source
la source
clear
il ne s'agit que d'une masturbation mathématique à ce stade. J'ai dû réparer un système dont j'avais hérité, conçu exactement comme vous le décrivez, ainsi que l'OP. Il était constamment piraté par des adolescents atteints de Wireshark. Nous ne l'avons verrouillé que lorsque nous avonsREAL
crypté, crypté et signé toutes les données utiles vers et depuis le serveur. La manipulation du compte s'est arrêtée et ne s'est plus jamais produite par la suite.Réponses:
Pourquoi n'est-il pas utilisé? Parce que c'est beaucoup de travail supplémentaire pour un gain nul. Un tel système ne serait pas plus sécurisé. Il est même peut-être moins sûr, car cela donne une fausse impression de sécurité, ce qui incite les utilisateurs à adopter des pratiques moins sécurisées (telles que la réutilisation des mots de passe, les mots de passe dictionnaires, etc.).
la source
Comment cela vous protège-t-il exactement? On dirait que tout ce que vous voulez faire est de hacher le mot de passe haché, ce qui est en quelque sorte inutile. Parce que le mot de passe haché deviendrait alors le mot de passe.
Pourquoi ne pas utiliser le même mot de passe pour plusieurs sites? La raison pour laquelle les sites Web hachent le mot de passe en théorie est d'empêcher l'accès à votre compte s'ils sont compromis. Utiliser le même mot de passe pour plusieurs sites Web est tout simplement stupide.
Si vous utilisiez javascript, tout ce que le "hacker" aurait à faire, c'est d'utiliser la même méthode pour les mots de passe hashed-hashed. Une fois que vous avez les informations hachées, c'est tout le temps qu'il faut pour calculer le mot de passe-> même hachage dans la base de données, ce qui empêche l'accès à un compte.
la source
Parce que cela ajouterait peu à aucune valeur. La raison en est que si votre base de données est piratée, le pirate informatique ne disposera pas d'une liste de mot de passe valide, mais simplement d'un hachage. Par conséquent, ils ne peuvent emprunter l'identité d'aucun utilisateur. Votre système n'a pas connaissance du mot de passe.
Secure provient des certificats SSL et d'une forme d'authentification. Je souhaite que mes utilisateurs fournissent un mot de passe afin que je puisse en calculer le hachage.
En outre, l'algorithme de hachage serait sur le serveur dans une zone plus sécurisée. En le mettant sur le client, il est assez facile d’obtenir le code source pour Javascript, même si ses fichiers de scripts cachés sont référencés.
la source
La solution est plus simple que cela. Certificats clients. Je crée un certificat client sur ma machine. Lorsque je m'inscris sur un site Web, nous établissons une poignée de main à l'aide de mon certificat client et du certificat du serveur.
Aucun mot de passe n'est échangé et même si quelqu'un pirate la base de données, il ne dispose que de la clé publique de mon certificat client (qui doit être salée et chiffrée par le serveur pour un niveau de sécurité accru).
Le certificat client peut être stocké sur une carte à puce (et chargé dans un coffre-fort en ligne sécurisé à l'aide d'un mot de passe principal).
La beauté de tout cela, c’est qu’elle supprime le concept de phishing: vous ne saisissez jamais de mot de passe dans un site Web, vous ne faites que toucher à ce site Web. Tout ce qu'ils obtiennent, c'est votre clé publique qui est inutile sans clé privée. La seule susceptibilité est de trouver une collision lors d'une poignée de main et cela ne fonctionnerait qu'une fois sur un seul site Web.
Microsoft a essayé de fournir quelque chose comme ceci dans Windows avec Cardspace et l'a soumis ultérieurement en tant que norme ouverte. OAuth est un peu similaire mais repose sur une "partie émettrice" intermédiaire. Les InfoCards, par contre, pourraient être auto-émises. C'est la vraie solution au problème de mot de passe ... supprimer les mots de passe tout à fait.
OAuth est cependant un pas dans la bonne direction.
la source
la plupart des réponses ici semblent complètement passer à côté du point de hachage du mot de passe côté client.
le but n'est pas de sécuriser l'accès au serveur auquel vous vous connectez, car intercepter un hachage n'est pas plus sûr que d'intercepter un mot de passe en texte brut.
le but est vraiment de sécuriser le mot de passe de l'utilisateur , ce qui est généralement beaucoup plus précieux que l'accès de connexion de site individuel puisque la plupart des utilisateurs réutilisent leur mot de passe pour plusieurs sites (ils ne devraient pas, mais la réalité est qu'ils le font, il ne devrait pas être ignoré )
ssl est idéal pour la protection contre les attaques par mitM, mais si une application de connexion est compromise sur le serveur, ssl ne protégera pas vos utilisateurs. Si une personne a accédé de manière malveillante à un serveur Web, elle sera probablement en mesure d'intercepter les mots de passe en clair, car dans la plupart des cas, les mots de passe ne sont hachés que par un script du serveur. L'attaquant peut alors utiliser ces mots de passe sur d'autres sites (généralement plus précieux) utilisant des noms d'utilisateur similaires.
la sécurité est une défense en profondeur, et le hachage côté client ajoute simplement une autre couche. N'oubliez pas que, même s'il est important de protéger l'accès à votre propre site, il est beaucoup plus important de protéger le secret des mots de passe de vos utilisateurs en raison de la réutilisation du mot de passe sur d'autres sites.
la source
C'est tout à fait possible et vous n'avez pas besoin d'attendre un site Web.
Jetez un coup d'œil à SuperGenPass . C'est un bookmarklet.
Il reconnaît simplement les champs de mots de passe, concatène ce que vous tapez avec le domaine du site Web, le hachage, le modifie quelque peu de manière à obtenir uniquement les caractères "admis" dans le mot de passe, et ce n'est qu'alors que votre mot de passe haché est envoyé sur le réseau.
En utilisant le domaine du site dans le processus, vous obtenez ainsi un mot de passe unique par site, même si vous réutilisez toujours le même mot de passe.
Ce n'est pas extrêmement sécurisé (base64-MD5), mais vous distribuez parfaitement une implémentation sha-2 si vous le souhaitez.
Le seul inconvénient est que si le domaine change, dans ce cas, vous devrez demander au site Web de réinitialiser votre mot de passe, car vous ne pourrez pas le récupérer par vous-même ... cela ne se produit pas souvent, alors compromis acceptable.
la source
password
et / ou un SHA-256 oupassword
avec un peu de sel qui est connu du client, un attaché au milieu peut le capturer.J'aime la réponse de X4u, mais à mon avis, quelque chose comme cela devrait être intégré au navigateur / à la spécification html - car, pour le moment, ce n’est que la moitié de la réponse.
Voici un problème que j'ai en tant qu'utilisateur - je ne sais pas si mon mot de passe sera haché à l'autre bout lorsqu'il sera stocké dans la base de données. Les lignes entre moi et le serveur sont peut-être cryptées, mais je n'ai aucune idée de ce qu'il advient de mon mot de passe une fois qu'il a atteint la destination. Il est peut-être stocké sous forme de texte brut. L’administrateur de la base de données finira peut-être par vendre la base de données et, avant même que vous le sachiez, le monde entier connaît votre mot de passe.
La plupart des utilisateurs réutilisent des mots de passe. Les gens non techniques parce qu'ils ne savent pas mieux. Personnel technique, car une fois que vous avez atteint le 15ème mot de passe, la plupart des gens n'ont aucune chance de les mémoriser à moins de les écrire (ce qui, nous le savons tous, est également une mauvaise idée).
Si Chrome ou IE ou tout ce que j'utilisais pouvait me dire qu'une boîte de mot de passe allait être instantanément hachée du côté client en utilisant un sel généré par le serveur et efficacement le mot de passe sandbox lui-même - alors je saurais qu'en tant qu'utilisateur, je pourrais le réutiliser un mot de passe avec moins de risque. Je voudrais toujours les canaux cryptés ainsi que je ne veux pas que les gouttières disparaissent pendant la transmission.
L'utilisateur doit savoir que son mot de passe n'est même pas disponible pour être envoyé au serveur - uniquement le hachage. À l'heure actuelle, même en utilisant la solution X4U, ils n'ont aucun moyen de savoir que c'est le cas, car vous ne savez pas si cette technologie est utilisée.
la source
Je pense que c'est une bonne méthode à utiliser lors de la création de quelque chose comme un framework, un CMS, un logiciel de forum, etc., où vous ne contrôlez pas les serveurs sur lesquels il pourrait être installé. OUI, vous devez toujours recommander l'utilisation de SSL pour les connexions et les activités connectées, mais certains sites utilisant votre framework / cms ne l'auront pas, ils pourraient donc en tirer parti.
Comme d'autres l'ont souligné, l'avantage ici n'est PAS qu'une attaque MITM ne puisse permettre à quelqu'un d'autre de se connecter à ce site en tant que vous, mais plutôt que cet attaquant ne pourrait alors pas utiliser le même nom d'utilisateur / mot de passe pour connectez-vous à des dizaines d'autres sites sur lesquels vous pourriez avoir un compte.
Un tel schéma devrait utiliser un sel aléatoire ou une combinaison de sels spécifiques à un site et à un nom d'utilisateur, de sorte que le détenteur du mot de passe ne puisse pas l'utiliser pour le même nom d'utilisateur sur d'autres sites (même les sites utilisant le même schéma de hachage) ), ni contre les autres utilisateurs du site qui pourraient avoir le même mot de passe.
D'autres ont suggéré que les utilisateurs créent des mots de passe uniques pour chaque site qu'ils utilisent ou utilisent des gestionnaires de mots de passe. Bien que ce soit un conseil judicieux en théorie, nous savons tous que c’est une folie sur laquelle compter dans le monde réel. Le pourcentage d'utilisateurs qui font l'une ou l'autre de ces choses est faible et je doute que cela change bientôt.
Donc, un hasher de mot de passe javascript est le moins du monde qu'un développeur framework / cms peut faire pour limiter les dommages d'une personne interceptant des mots de passe en transit (ce qui est facile sur les réseaux wifi de nos jours) si le propriétaire du site et les utilisateurs finaux sont négligents sur la sécurité (ce qu’ils sont probablement).
la source