Pour le second élément de la fonction, le HOTP utilise un compteur partagé par le serveur et l’utilisateur. Dans ce cas, le problème est que le mot de passe généré est valable jusqu’à ce qu’il soit utilisé. TOTP y ajoute une restriction : le code généré ne peut être utilisé que pendant une période limitée. Quel en est le fonctionnement ?
Trois formules sont essentielles pour l’algorithme Time-based-One-time :
TOTP = HOTP(SecretKey,CurrentTime)
Cette formule simple établit uniquement que TOTP est une procédure HOTP disposant des mêmes paramètres SecretKey et CurrentTime :
- SecretKey : mot de passe généré au hasard et connu aussi bien du serveur que du client
- CurrentTime : moment actuel en temps Unix
Cependant, l’indication temporelle change toutes les secondes et ce délai n’est pas suffisant pour transmettre le code à l’application. Une seconde suffirait pour que le TOTP ne soit plus valide et pour que le serveur génère une nouvelle valeur de hachage. C’est la raison pour laquelle on utilise une autre formule :
CurrentTime = floor((unixtime(now) – unixtime(T0))/T1)
Le paramètre CurrentTime est donc défini :
- unixtime(now) : moment actuel en temps Unix
- unixtime(T0) : le temps Unix à l’instant T0 à partir duquel le décompte est effectué, dans la plupart des cas le 01/01/1970 à minuit (= 0)
- T1 : intervalle dans lequel le TOTP doit être valide, généralement 30 secondes
- floor : fonction permettant d’arrondir la valeur calculée à un nombre entier