La double authentification est une sécurité de plus en plus demandée sur les sites Internet, avec des applications spécifiques, telle que Google Authenticator. Ainsi une fois votre nom d’utilisateur et mot de passe entrés, le site va vous demander le code généré par l’application.
Mais quel est le fonctionnement technique de Google Authenticator ? Comment les codes sont générés sur l’application d’authentification et pourquoi cela fonctionne même sans réseau sur le smartphone ?
1/ Génération de la clé secrète et inscription via le serveur
- Initialisation : lors de l’inscription de l’appareil (par exemple le smartphone avec l’application Google Authenticator), le serveur génère une clé secrète aléatoire unique pour chaque utilisateur.
- Encodage : cette clé est ensuite encodée dans un QR code ou une chaîne de caractères pour être facilement transmise.
- Stockage local : l’utilisateur scanne le QR code ou saisit la chaîne de caractères sur son téléphone. L’application stocke la clé secrète localement sur l’appareil (souvent dans une base de données sécurisée ou le Keystore Android), chiffrée pour plus de sécurité.
2/ Génération des codes sur le smartphone dans l’application
L’algorithme HMAC-SHA1 (voir * et **) est utilisé pour générer des codes uniques à partir de la clé secrète.
Celui-ci va prendre en compte 3 éléments :
- La clé secrète qui est propre à chaque utilisateur ;
- Un compteur incrémenté à chaque génération de code ;
- Un timestamp c’est à dire l’heure actuelle.
Les données sont combinées et un hachage est calculé. Une partie du hachage est extraite et convertie en un code à 6 chiffres, facilement utilisable. Le serveur et l’application doivent être synchronisés au niveau de l’heure pour valider les codes.
3/ Fonctionnement sans réseau et validation
Tous les calculs sont effectués sur l’appareil de l’utilisateur, rendant l’authentification possible sans connexion internet et sans réseau.
Lorsque l’utilisateur saisit le code, le serveur refait le calcul avec la clé secrète correspondante et vérifie si le code est valide. Pour compenser les légers décalages horaires, le serveur accepte généralement une petite plage de codes valides.
4/ Sécurité et limites
Les attaques par force brute sont théoriquement possibles mais extrêmement difficiles en pratique, puisque le temps de validité d’un code est assez court.
Le problème de sécurité majeur peut par exemple se situer au niveau de l’appareil générant la clé secrète et de son verrouillage. En effet si celui-ci n’est pas actif ou peu sécurisé (0000 ou 1234) et que les mots de passes sont enregistrés dans un navigateur, la double authentification n’aura aucune utilité puisque la personne souhaitant accéder à un compte qui n’est pas le sien devra juste ouvrir Google Authenticator sur le téléphone et entrer le code.
La première sécurité reste donc le comportement de l’utilisateur.
Conclusion et résumé
Pour résumer le fonctionnement, la génération des codes sur Google Authenticator et les autres applications de double authentification se fait en combinant plusieurs éléments : la clé secrète, le compteur et l’heure au moment de la génération du code.
L’algorithme HMAC-SHA1 fait ensuite un calcul à partir de ces données et extrait un code à 6 chiffres pour l’utilisateur. Le calcul se fait indépendamment sur le serveur et sur le smartphone et cela ne nécessite donc pas de connexion Internet ou réseau pour l’appareil de l’utilisateur.
Commentez pour toute question ou remarque !
*HMAC : Hash-Based Message Authentication Code
**SHA1 : Secure Hash Algorithm 1