Mot de passe authentification web

Un article de Le wiki de 2 noisettes - noisette.ch.


Cet article est en cours de réalisation.


Sommaire

Principe

Ou comment ne pas faire circuler son mot de passe en clair sur un réseau.

Le protocole HTTP est en clair, et souvent sans couche de sécurité SSL. Une personne malveillante pourrait donc écouter le réseau et relever les pairs nom d'utilisateur/mot de passe et s'identifier à la place de l'utilisateur.

Théorie

Le but de ce design est d'empécher l'attaque décrite ci-dessous, nommée replay attack.

Ainsi l'attaquant, même en ayant sniffé les données de l'utilisateur, ne pourra pas s'identifier à sa place.

Client             Server
-------------------------
              <--   nonce
username, 
h(nonce, 
 h(password)) -->   fetch from db h(password) 
                     coresponding to username, 
                     and computer h(nonce, h(password)) 
                    and check with the one sent by user.

Replay attack is ok if the nonce is stored for a given ip address.

Idem pour l'authentification mutuelle client-serveur :

Le client se connecte sur le serveur, et envoie les algorithmes de chiffrement supportés (hachage et encryption). Le serveur répond par un nonce, et les 2 algos utilisés, et stocke la pair ip, nonce dans une table Le client envoie username, h(nonce, h(password)) Le serveur ressort de sa base de données le h(password) correspondant au username, et le nonce correspondant à l'ip, et calcule h(nonce, h_password), qui si est vérifié authentifie le client. Il peut donc dès lors envoyer une clé de session (concaténée au nonce pour le controle) encryptée avec h_password, qu'un adversaire n'a jamais vu passer en clair. Le client décrypte le paquet reçu, controle si le nonce du paquet est le même que celui qu'il a reçu au début. Cette étape permet au client d'authentifier le serveur de manière sûre. Finalement il enregistre la clé de session décryptée par la même occasion.

Implémentation

MD5

SHA-1