Google Authenticator

Google Authenticator est un logiciel permettant l’authentification en deux étapes, développé par Google. Le logiciel fournit un nombre de 6 chiffres que l'utilisateur doit donner lors de son authentification, en plus de son pseudo et de son mot de passe. Développé à l'origine pour les services Google (comme Gmail), le logiciel permet de s'authentifier sur des services tiers tels que LastPass, Discord ou Dropbox.

Implémentation

Google fournit l'application mobile pour les systèmes Android[1], BlackBerry, iOS[2] et des portages compatibles ont été réalisés pour Pebble[3], entre autres.

Des versions passées du logiciels étaient open source, mais les version actuelles sont sous une licence propriétaire. [4]

Description technique

Il s'agit de créer un code éphémère, calculé depuis une clef numérique propre à l'utilisateur. Lors d'une première utilisation Google génère une clef numérique secrète de 80 bits unique pour chaque utilisateur. Cette clef est transmise sous forme d'une chaîne de 16 caractères en base 32 ou par l'intermédiaire d'un code QR. L'application mobile calculera à chaque connexion une signature numérique HMAC-SHA1 basée sur cette clef fixe, en codant le nombre de périodes de 30 secondes écoulées depuis l' « epoch » Unix. Une partie de cette signature est prélevée et convertie en un nombre à 6 chiffres affiché par l'application et que l'utilisateur doit recopier sur le site web, en plus de son mot de passe.

Technologie

Google Authenticator implémente l'algorithme de mot de passe à usage unique définie dans l'IETF RFC 6238[5], et l’algorithme de génération de mot de passe unique basé sur HMAC défini dans l'IETF RFC 4226[6].

Pseudocode de l'algorithme RFC 6238[5]

La RFC 6238 est peu précise sur la taille du message passé à HMAC-SHA1. Il est écrit simplement que des tailles supérieures à 32 bits doivent être supportées. La taille de 64 bits est donc issue des implémentations usuelles que l'on trouve. De même pour le caractère Big Endian des nombres utilisés.

  function GoogleAuthenticatorCode(string secret)
      key := base32decode(secret)
      message := floor(current Unix time / 30)
      // message is seen by HMAC-SHA1 as a BigEndian 64bits number (8 chars)
      hash := HMAC-SHA1(key, message)
      offset := last nibble of hash
      truncatedHash := hash[offset..offset+3]  //4 bytes starting at the offset
      Set the first bit of truncatedHash to zero  //remove the most significant bit
      // truncatedHash is seen as a BigEndian 32bits number (4 chars)
      code := truncatedHash mod 1000000
      pad code with 0 until length of code is 6
      return code

Etat open source du logiciel pour Android

En l'état de janvier 2019, l'application Google Authenticator disponible sur Google Play Store est couverte par une licence propriétaire. Google a rendu disponibles les versions précédents de l'app Authenticator sur son répositoire GitHub. La page du projet affirme:

« This open source project allows you to download the code that powered version 2.21 of the application. Subsequent versions contain Google-specific workflows that are not part of the project. [7] »

En réponse à la transition de Google Authenticator vers une licence propriétaire, un clone open source nommé FreeOTP[8] a été créé, en incluant des parties du code original de Autenticator, mais surtout du code nouvellement écrit. Une variante moins populaire nommée OTP Authenticator[9] est également disponible sur Google Play.

Références

  • (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Google Authenticator » (voir la liste des auteurs).
  1. Version Android de Google Authenticator
  2. Version iOS de Google Authenticator
  3. (en) « How to get your two-step verification codes on your Pebble »
  4. (en) Willis, Nathan, « FreeOTP multi-factor authentication », (consulté le 7 janvier 2019)
  5. a et b (en) Request for Comments no 6238.
  6. (en) Request for Comments no 4226.
  7. (en) « Wiki Google Authenticator sur GitHub » (consulté le 9 janvier 2019)
  8. « FreeOTP »
  9. « kaie/otp-authenticator-android », GitHub

Liens externes