Est-ce que ssh envoie le mot de passe sur le réseau?

Fondamentalement, toute la question est dans le titre: Est-ce que ssh envoie le mot de passe sur le réseau? En supposant bien sûr que la connection via le nom d'user et le mot de passe est utilisée.

Je request parce que si ssh n'envoie pas le mot de passe sur le réseau, un homme au milieu ne peut pas get le mot de passe de l'user même si l'user ajoute l'hôte présumé à son file known_hosts.


Quelqu'un a dit qu'il fallait, alors j'ai écrit un contre-exemple dans un commentaire. Étant donné que la question de savoir comment cela pourrait éventuellement fonctionner maintenant a été soulevée à plusieurs resockets, je copy ce commentaire ici.

Le server peut indiquer au client quel hash utiliser. [Le même qui est utilisé pour hacher les passwords dans le file shadow du server.] Le client peut alors calculer le hash ψ qui devrait être dans le file shadow du server mais appelons celui sur le server ψ '. Donc, à la fois le server et le client savent ψ. Le client peut alors choisir un sel random σ un envoi (hash (ψ.σ), σ) (où est l'opérateur de concaténation) au server. Le server hache alors ψ'.σ et vérifie si le premier élément du tuple reçu du client correspond à ce hachage. Si c'est le cas, le client connaît le mot de passe.

Si vous utilisez l'authentification par mot de passe, SSH envoie le mot de passe via le réseau. La connection est cryptée, de sorte que les espions ne peuvent pas voir le mot de passe. La connection est authentifiée, à condition de ne pas cliquer aveuglément sur le message "L'authenticité de … ne peut pas être établie", de sorte que votre mot de passe ne sera envoyé à personne sauf au server légitime.

La réponse ennuyeuse à "pourquoi" est que c'est ce que le protocole SSH exige.

La réponse less ennuyeuse est que l'authentification par mot de passe doit fonctionner de cette façon. Il existe des façons d'effectuer une authentification qui ne fonctionnent pas de cette façon mais ce n'est plus une simple authentification par mot de passe.

La plupart des protocoles d'authentification qui sont plus avancés que l'authentification par mot de passe simple ont la belle propriété que le client n'envoie aucune donnée secrète au server qu'un server malveillant pourrait utiliser pour emprunter l'identité de l'user sur un troisième server. Avec l'authentification par key publique SSH, la méthode d'authentification SSH la plus courante, à part les passwords, cela fonctionne car le client envoie une signature (nécessitant la key privée) de données contenant l'identifiant de session; si le server malveillant essayait de s'authentifier sur un troisième server, il devrait générer une signature de données incluant un identifiant de session différent, ce qui ne lui serait pas possible sans la key privée qui rest sur le client.

Notez que si vous utilisez l'authentification par key publique et que vous devez taper un mot de passe pour utiliser la key, il ne s'agit pas d'une authentification par mot de passe. Le mot de passe pour utiliser la key est utilisé exclusivement du côté client, pour lire la key à partir du file key. Lors de l'utilisation de l'authentification par key publique, le server ne sait pas si la key a été stockée dans un file chiffré.


L'authentification par mot de passe nécessite l'envoi du mot de passe au server. L'envoi d'un hachage du mot de passe au lieu du mot de passe lui-même n'aide pas car le mot de passe devient le hachage: un attaquant n'aurait pas besoin de find le mot de passe actuel, mais seulement le hachage. Un attaquant pourrait attaquer en trouvant le mot de passe actuel, donc il n'y a pas d'amélioration. Mais si l'attaquant a trouvé le hash mais pas le mot de passe, dans votre schéma proposé, ce serait suffisant. En revanche, avec une authentification par mot de passe normale, l'attaquant doit connaître le mot de passe, sachant que le hash n'est pas assez bon et que le mot de passe est suffisamment fort pour que l'attaquant ne puisse pas find le mot de passe du hash. En pratique, la raison pour laquelle l'attaquant pourrait connaître le hachage mais pas le mot de passe est que l'attaquant a réussi à extraire la database des hachages de mot de passe du server, éventuellement à partir d'une sauvegarde non protégée ou d'une vulnérabilité sur le server. De telles vulnérabilités sur les sites Web font souvent les nouvelles.

Votre protocole proposé est less bon que le protocole standard. Ne roulez pas votre propre crypto!

Oui. Le mot de passe est envoyé sur la connection cryptée, mais il est en clair sur le server distant.

La méthode habituelle d'authentification consiste pour le server à calculer un hachage du mot de passe et à le comparer à une valeur enregistrée sur le server. Il existe plusieurs façons d'save les hachages, et avec les implémentations actuelles, le client ne sait pas ce que le server utilise. ( voir par exemple la page de manuel de crypt ). (Même si c'était le cas, envoyer simplement un hachage du mot de passe rendrait le hachage équivalent au mot de passe de toute façon.)

En outre, si le server utilise PAM, les modules PAM peuvent implémenter l'authentification avec n'importe quelle méthode, dont certaines peuvent exiger le mot de passe en clair.

L'authentification à l'aide de keys publiques n'envoie toutefois pas la key à l'hôte distant. (Quelques explications et des liens à ce sujet dans une question sur security.SE )

Il existe également des algorithms d'authentification par mot de passe comme SRP , qui ne nécessitent pas l'envoi du mot de passe en text brut à l'autre extrémité. Bien que SRP semble être seulement implémenté pour OpenSSH comme un patch externe.

Si vous utilisez un système d'authentification basé sur un mot de passe, alors oui, le mot de passe est passé sur le réseau jusqu'au point final …

Mais c'est un canal crypté.

par exemple

 % ssh remotehost user@remotehost's password: bash$ logout 

Dans ce scénario, le mot de passe a été envoyé crypté sur le réseau.

C'est pourquoi il est très important de manipuler les inputs known_hosts correctement et d'accorder beaucoup d'attention si vous voyez le @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ message! C'est votre défense contre une attaque MITM.

Oui, ssh envoie le mot de passe sur le réseau, mais après le chiffrement de bout en bout a été négocié. Voir la section 8 de la RFC 4252 qui dit qu'un mot de passe d'authentification contient un plaintext password in ISO-10646 UTF-8 encoding [RFC3629]

SSH envoie l'ID user et le mot de passe sur le réseau en text brut à l'intérieur d'un canal crypté. C'est pourquoi lorsque vous connectez un nouvel hôte, vous êtes invité à accepter la key. Dans le cas d'une attaque d'un homme au milieu avec un hôte connu, SSH refusera de se connecter jusqu'à ce que vous supprimiez l'ancienne key.

Le mot de passe en text brut est disponible aux points de terminaison, sur votre ordinateur et sur l'ordinateur distant. Il est possible de désactiver l'authentification par mot de passe, auquel cas le mot de passe n'est ni demandé, ni envoyé à l'hôte distant.

Il est plus sûr d'utiliser l'authentification par key avec une key protégée par mot de passe. Vous devez get votre key ajoutée au système distant. La key publique est un file text qui peut être transféré par de nombreux mécanismes. Lors de l'utilisation de l'authentification par key, il est possible de restreindre l'utilisation de la key.