Comment faire pour envoyer le mot de passe de manière sécurisée via HTTP à l'aide de Javascript, en l'absence de HTTPS?
La question très fondamentale à tous les développeurs visage: à Chaque fois que l'utilisateur soumet le formulaire, le mot de passe est envoyé via le réseau et il doit être protégé. Le site que je développe n'ont pas de HTTPS. Ni le propriétaire voulez acheter un certificat SSL, ni est-il intéressé par une auto-signé une. Je tiens donc à protéger le mot de passe envoyé via HTTP à l'aide de Javascript lors de la soumission de formulaire.
Avides de downvoters: Comment faire pour envoyer le mot de passe de façon sécurisée via HTTP? NE donne aucune solution sensée et je suis dans une autre situation.
Si j'utilise MD5, on peut inverser la chaîne de mot de passe. Qu'en est nonce/HMAC? Toute bibliothèque Javascript pour qui? Ou avez-vous une suggestion/conseil pour attaquer? Merci à l'avance!
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen d'envoyer un mot de passe de manière sécurisée que l'utilisateur peut vérifier sans SSL.
Bien sûr, vous pouvez écrire du code JavaScript qui va faire un mot de passe sécurisé pour la transmission par fil au travers de hachage ou une clé publique de chiffrement. Mais comment l'utilisateur peut-il être sûr que le script lui-même n'a pas été altéré par un man-in-the-middle avant qu'il ne leur est parvenue, à envoyer le mot de passe pour un pirate au lieu du site, ou même simplement de compromettre la sécurité de l'algorithme? Le seul moyen serait pour eux d'être des programmeurs experts et inspecter chaque ligne de votre page et le script pour s'assurer que c'était casher avant de taper le mot de passe. Ce n'est pas un scénario réaliste.
Si vous voulez des mots de passe pour être sûr de man-in-the-middle attaques, vous devez acheter un certificat SSL. Il n'y a pas d'autre moyen. Habituez à elle.
Non... pas trivialement au moins. Tandis que le MD5 a des attaques contre elle, c'est un algorithme de hachage et donc unreversable. Vous devez brute-force.
Mais encore une fois, un homme-dans-le-milieu attaquant n'a pas besoin de regarder votre MD5s. Il peut simplement saboter le JavaScript vous envoyer à l'utilisateur de faire le MD5s.
La solution ici est de ne pas envoyer le mot de passe. L'utilisation de challenge/réponse.
Dans la forme originale d'inclure un grand bloc de texte aléatoire avec une clé. Stocker l'original du texte aléatoire dans la session en fonction de la clé sur le serveur. Lorsque le client soumet le formulaire, utiliser JS pour hacher le texte aléatoire et le mot de passe ensemble. Puis envoyer le nom d'utilisateur, la clé et haché texte aléatoire pour le serveur. NE PAS envoyer le mot de passe. Sur le serveur, utilisez la clé pour la recherche de l'origine du texte aléatoire, effectuer la même opération hachage avec le mot de passe stocké. Si le serveur hachée valeur correspond au client de la valeur de hachage, alors vous savez que le client est entré le bon mot de passe, sans jamais envoyer le mot de passe pour le serveur.
Si le mot de passe est bon ou pas, d'expiration de la clé et le texte aléatoire de sorte que chaque sont d'un emploi du temps.
Si vous voulez VRAIMENT plongée dans cette, regardez la L'échange de clés Diffie-Hellman qui a été créé pour permettre à deux parties qui n'ont aucune connaissance préalable de l'autre afin d'établir conjointement une clé secrète partagée sur l'insécurité canal de communication"
Je ne suis pas un expert en cryptographie, donc je n'ai pas bien savoir si c'est vraiment sûr si un attaquant a la fois sur le Client (JavaScript, code source) et le mécanisme de transport (Packet sniffer)
Vous pouvez utiliser un javascript la mise en œuvre du RSA pour crypter le mot de passe avant de l'envoyer. (Voici un exemple de RSA En Javascript.)
Mais je crois que cette fois l'un et à l'aide d'une fonction de hachage sera vulnérable à les attaques de relecture. Alors, soyez prudent.
Malheureusement il n'y aura aucun moyen de s'assurer de la sécurité de la non-demande chiffrée. Toute personne ayant accès à votre javascript va tout simplement être capable de désosser il/trafiquer et n'importe qui avec un renifleur de paquets seront en mesure de regarder le trafic non chiffré. Ces deux faits ensemble signifient:
Pas de SSL? Pas de sécurité.
Toute transmission que vous avez sera en clair, c'est, sans SSL, vos informations seront exposés. Il est intéressant de discuter de ce point avec le Propriétaire du site. En d'autres termes, il est préférable de prendre les mesures nécessaires pour renforcer votre transmission de données, et SSL est une base, pas cher mesures que vous pouvez prendre.
je ne pense pas que la question ici est de la technologie, mais comment vous expliquer l'importance de SSL. Leur fournir fiable du matériel de lecture, je suis sûr qu'il ya beaucoup sur le web.
La solution exige que le client soit en mesure de chiffrer le mot de passe à l'aide d'un secret de la clé de cryptage connus seulement pour le client et le serveur.
SSL accomplit cela en exigeant à la fois le serveur et le navigateur web du client de disposer de leur propre asymétrique public/privé paire de clés qu'ils utilisent pour chiffrer et de transmettre un aléatoire de la clé de session entre eux. Le reste de la conversation, puis utilise cette sécurisée de la clé de session.
Si vous vous demandez comment pour résoudre le même problème que SSL sans l'avantage d'avoir une clé secrète qui est connu seulement pour le client et le serveur. Je ne suis pas expert, mais il semble que cela ne peut pas être fait, ou du moins pas facilement.
Si vous n'avez pas accès à SSL, MD5 devrait être suffisant pour empêcher l'activation accidentelle de la découverte de mots de passe (comme dans un journal de réseau de fichiers ou de quelque chose). Autre chose serait une perte de temps. Juste assurez-vous que l'application ne donne pas accès à des informations sensibles (par exemple, numéros de carte de crédit, antécédents médicaux, etc).
Comme d'autres commentateurs l'ont suggéré, un grave attaquant sera en mesure de briser n'importe quel type de sécurité sur la page. Même SSL est un petit obstacle puisque la plupart des utilisateurs utilisent facile à deviner les mots de passe, de le ré-utiliser les mêmes mots de passe partout, donnent leur mot de passe à quelqu'un qui vous demande, ou peut-être trompé en donnant un mot de passe par une page copiée ou de "support technique" appel téléphonique.
-- Anglais --
je pense à quelque chose, mais je ne sais pas si cela pourrait être vraiment sûr. Si vous pouvez mettre votre formulaire dans un fichier php, vous pouvez créer un algorithme pour créer une chaîne de caractères en fonction dans le temps ou dans quelque chose d'autre, et puis le mettre dans cette chaîne de votre code html.
Lorsque le type d'utilisateur, un mot de passe dans un champ mot de passe, lorsque vous déboguez il vous canot voir la valeur saisie par l'utilisateur, donc avant d'envoyer les informations par post ou get, vous pouvez utiliser le mot de passe de l'utilisateur comme une allusion à chiffrer la chaîne cryptée previosly généré, et puis, juste envoyé insted du mot de passe tapé par l'utilisateur.
De cette façon, les attaquants n'ont pas toutes à l'intérieur du code js, donc ils auront besoin de découvrir l'algorithme que vous créez pour les déchiffrer.
C'est juste une idée, donc si vous pouvez me dire comment cela ne peut pas en être sûre, je l'apprécierais.
-- Espagnol --
Se me acaba de ocurrir algo qué puede servir, pero no se si realmente mer algo seguro. Por medio de php puedes generar de l'onu algoritmo que les cris de l'onu chaîne en base al timestamp o algo más, y después colocar esta cadena en el html.
Noter que cuando alguien escribe una contraseña en un d'entrée de campo tipo mot de passe, con un debug no se puede ver el valor que tecleo el usuario (no se si exista manera pero no quise investigar más), asi que podemos utilizar la contraseña que el usuario escribió como palabra clave para encriptar de la cadena de texto que previamente habiamos generado con php, por medio de l'onu algoritmo en JS. Sería algo así como encriptar lo encriptado. Posteriormente lo que estariamos enviado no sería la contraseña tecleada, si no esta última cadena resultante.
Buscando des nations unies contre, lo único que se me ocurra es que el atacante tendrá que dedicarle mucho tiempo para tratar de encontrar el agoritmo que creamos por medio de php y poder decriptar de la cadena de finale, o tendrá que hackear el servidor para acceder al php y obtener el algoritmo.
Esto es solo una idée, por lo que es pueden decirme como esto no puede ser seguro, se los agradecería.
Comme mentionné, rien de tout cela est sécurisé contre serveur d'usurpation d'identité, comme cela nécessite une capacité à faire confiance à l'Javascript côté client. Mais si nous sommes sûrs que le serveur ne peut pas être falsifié (signé cert, hash signature immunitaire à longueur de poste, etc.) mais pas que la connexion est à l'abri des oreilles indiscrètes, voici comment je voudrais la mettre en œuvre.
Je pense que le plus sûr moyen est, au lieu de stocker H(mot de passe), où H est votre fonction de hachage de choix, magasin de g^H(mot de passe) c'est à dire utiliser le mot de passe de la clé privée pour l'échange de clés Diffie-Hellman. (Vous devriez certainement utiliser un aléatoire g pour les différents utilisateurs, aussi, il devient de votre sel.) Ensuite, pour vérifier, vous générez un nonce b, envoyer à l'utilisateur des g^b, et de calculer (g^H(mot de passe))^b. L'utilisateur n'a pas besoin de g--ils n'ont qu'à calculer (g^b)^H(mot de passe) = (g^H(mot de passe))^b. Maintenant, vous avez un certain nombre que les deux parties connaissent iff l'utilisateur a entré le bon mot de passe, et la construction d'un défi-réponse nulle de connaissance preuve fondée sur le fait de savoir le nombre exact est trivial, alors que le nombre aléatoire utilisé en tant que serveur de la "clé privée" rend l'approche immunitaire à des attaques de relecture.