PRODUITS

RESSOURCES

INFO TETRAEDRE

PLATEFORME WEB DE DEMO

Explication Challenge/Password dans le WSDL et LoginLink

L'accès à certaines fonctionnalités du logiciel TDS requiert un mot de passe. Afin d'éviter que celui-ci ne soit transmit en clair lors des échanges HTTP, on utilise un concept de "Challenge" afin de calculer un mot de passe ayant un durée de vie limitée.

Note : Selon le type de serveur ("privé" ou "mutualisé"), le client peut éventuellement configurer un accès HTTPS pour réduire les risques d'interception des communication. Le concept de "Challenge" fonctionne sur le connexion HTTP et HTTPS

Le concept est le suivant:

  • Les utilisateurs ont un "username" et "password".
  • Le password ne doit pas être transmis sur la ligne de communication
  • On choisit un challenge et on calcule un "challenge_password" valable pendant un certain temps. C'est ce "challenge_password" qui est transmit lors de l'échange avec le serveur.

 

Comment choisir le challenge ?

Le challenge est un nombre entier de 32 bits.

Les logiciels TDS (version actuelle soft_6817_g18) utilise le challenge comme Timestamp. Ce qui veut dire que lorsqu'une connexion est effectuée, le serveur vérifie si challenge>=UNIX_TIMESTAMP()

si ce n'est pas le cas l'authentification est refusée (le challenge est trop ancien)

Si on choisit challenge=UNIX_TIMESTAMP() alors l'accès ne sera valable qu'une seconde au maximum. Donc si on fait par exemple un accès WSDL on prendra par exemple challenge=UNIX_TIMESTAMP()+10. Pour le Loginlink sur la page web, le challenge est choisi en général pour avoir trois mois de validité. Le loginlink sera donc valable trois mois.

De manière similaire, il est donc possible de créer un loginlink qui sera valable bien plus longtemps

Note: Si l'utilisateur change son "password", alors le loginlink ne fonctionne évidemment plus !

 

 

Calcul de challenge_password 

Pour calculer le "challenge_password", on utilise la formule suivante.

challenge_password = MD5(CONCAT(user.password, challenge))

Nouvelle version pour TDS g28 (2021-02-10)

$validity = 3600;
$challenge = sprintf("%d",time() + $validity);
$challenge_password = hash('sha256',$encrypted_password.$challenge, false);

Note importante : le logiciel TDS ne stocke pas le password des utilisateurs en clair. La table user contient bien le password de l'utilisateur mais celui-ci est déjà encodé. Le password qui est stocké dans la table a été encodé avec la fonction OLD_PASSWORD de MySQL. Par exemple si le mot de passe, en clair est "easyPassword", alors le mot de passe "446d5fcf152ec3ca" est stocké dans TDS. Le calcul du challenge utilise le mot de passe stocké dans TDS (446d5fcf152ec3ca dans notre exemple !)

Note importante II : Depuis la version soft_6817_g18, TDS utilise une autre méthode de hachage du mot de passe. La fonction OLD_PASSWORD a été remplacée par la fonction SHA2-256. Par exemple si le mot de passe, en clair est "easyPassword", alors le mot de passe "09da4e416785b0270a63e17e8b1313f4e29b814071892fe528060b17c1f0cf09" est stocké dans TDS. 

 

Exemple

mot de passe en clair        : easyPassword
mot de passe stocké dans TDS : 446d5fcf152ec3ca
challenge choisi : 1493363073
challenge_password calculé : f9cced548fcf0111054f10c704fdf8bd

Ce challenge_password est valable jusqu'au 28.04.2018

 

Exemple avec hachage SHA2-256

mot de passe en clair        : easyPassword
mot de passe stocké dans TDS : 09da4e416785b0270a63e17e8b1313f4e29b814071892fe528060b17c1f0cf09
challenge choisi : 1546027813
challenge_password calculé : e171c40735aae045353f9ffb617c4307037c17c91263bcd02931e24de3c4613f

Ce challenge_password est valable jusqu'au 28.12.2018