Générateur d’OTP(TOTP), Authentification Forte.

otp

Qu’est ce qu’OTP ?

-One Time Password est un mot de passe unique, il est souvent représenter sous forme de Token (6 ou 8 chiffres) qui change donc à chaque utilisation.

Utilisé en complément d’une méthode d’authentification classique, il permet de combler certaines lacunes de sécurités (vols de mot de passe ou autre).

Plus d’info: wikipedia

Comment ça fonctionne ?

Le mot de passe unique est généré par un algorithme connu des deux coté (client et serveur),
c’est donc un système de chiffrement symétrique (basé sur une clé secrète).

Plus d’info : http://fr.wikipedia.org/wiki/Cryptographie_symétrique

Vous activez l’authentification forte sur votre compte (google account par exemple).
Une clé sécrète vous sera transmise (sous forme 16 ou 32 caractères en base 32 généralement qui peut être contenue dans un QR-code).
Vous devez entrer cette clé dans votre générateur de token (application google authenticator par exemple).
Votre générateur sera maintenant capable de vous transmettre l’OTP qui vous sera indispensable et qui changera à chaque connexion.

Qu’elles sont les différentes méthodes de génération d’OTP ?

En plus de se baser sur la clef sécrète, un algorithme de génération d’OTP se base sur un second paramètres, qui ne doit pas être constant afin de limiter la prédiction de token.

Les différents types d’algorithme:
-Basé sur le temps, qui peut être modifié par une opération constante (voir TOTP ci-dessous)
-Basé sur le token précédent/suite mathématique.
-Basé sur un défi (autres informations variables).

Time-Based OTP

TOTP est une implémentation d’otp qui comme vous avez pu le comprendre est basé sur le temps,
Il est même le standard de ce type d’implémentation d’otp.
Il est un  Internet Engineering Task Force standard et la pierre angulaire de l’Initiative For Open Authentication (OATH).
Il est donc utilisé par beaucoup de service, comme google account par exemple.

Algorithme TOTP

Paramètres:
-Clef secrète
-Diviseur de temps

Paramètre externe:
-Timestamp Unix (nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 UTC)

Le diviseurs de temps dépends de l’implémentation de totp, il définira le temps de validité d’un token,
la valeur 30 est souvent utilisé (c’est le cas de l’implémentation de google).

TOTP = HOTP( Clef secrète, Unix Timestamp / Diviseur de temps)

Algorithme HOTP

Requis:
-Pouvoir décoder la clef en base32
-Pouvoir obtenir un HMAC-SHA1 à partir d’une paire clé/données.
-Pouvoir convertir un décimal en hexadécimal et vis-versa.

Paramètres:
-Clef secrète
-Données (dans le cas de TOTP, Données = Unix Timestamp / Diviseur de temps)

Etape 1 Récupérer l’HMAC H :

H = HMAC-SHA1( ToHexa(base32Decode(clef secrète), ToHexa(Données))

Etape 2 récupérer l’index I :

I = 4 bit de poids faible du dernier octet de H ( Dernier octet de H & 15 (00001111))

Etape 3 récupérer les 4 octet DBC1 a partir de l’index :

DBC1 = H[I], H[I + 1], H[I + 2], H[I + 3]

Etape 4 récupérer DBC2 en appliquant un masque binaire sur DBC1

DBC2 = DBC1 & 0X7fffffff

Etape 5 récupérer le token

HOTP = decimal(DBC2)

si vous souhaitez un token a 6 chiffres, il ne faudra garder que les 6 derniers caractère de l’HOTP.

Liens utiles :
RFC 6238 – TOTP: Time-Based One-Time Password Algorithm
RFC 4226 – HOTP/IETF
Exemple de calcul d’OTP

TOTP generator in javascript

 

Advertisements

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s