Authentification forte pour votre site web

Salut,

Ça faisait un petit moment que je n’avais pas publié d’article pour cause de vacances, mais aussi parce que j’ai passé un peu de temps ces derniers jours à développer la petite application web que je vais vous présenter maintenant.
Il s’agit d’un portail d’authentification web, écrit en PHP, qui offre une authentification double facteur (terme consacré en sécurité informatique: 2FA = 2 Factor Authentication) basé sur un mot de passe doublé d’un code à usage unique (terme consacré en sécurité informatique: OTP = One Time Password) généré par l’application « Google Authenticator » ou tout autre application compatible, que l’on installe sur son téléphone portable ou une tablette.

Pour les pressés, c’est ici que ça se passe: TwoFactorAuth sur GitHub.

Principe


Une authentification forte est aussi appelée authentification multi-facteur, c’est à dire qu’il faut au moins deux des trois facteurs d’authentification parmi les suivants:

  1. Quelque chose que l’on sait. Exemple: un mot de passe
  2. Quelque chose que l’on possède. Exemple: un téléphone, un « token » type clef SecureID
  3. Quelque chose que l’on est et qui est unique. Exemple: la biométrie par empreinte digitale, le réseau veineux, l’iris de l’œil

Bon, le mot de passe tout le monde voit ce que c’est. La biométrie aussi, du moins en gros, avec les passeports biométriques et les innombrables films y faisant référence.

Je vais donc m’attarder sur le deuxième facteur: ce que l’on possède. Il peut s’agir d’un dispositif électronique autonome, ou d’un logiciel installé sur un terminal quelconque (téléphone, tablette, ordinateur). L’idée est que ce dispositif génère un code, en général à usage unique et limité dans le temps. Ce code (OTP) constitue le deuxième facteur.

Les dispositifs électroniques


 On rencontre les dispositifs électroniques sous les formes suivantes:

  • Token SecureID:
  • Lecteur de carte du milieu bancaire, nécessitant de posséder la carte bancaire correspondante:

Il existe plusieurs autres dispositifs similaires bien que fonctionnant avec certaines variations (pin code, challenge/response), mais dans tous les cas ils sont associés à un utilisateur et fournissent le second facteur.

Les téléphones


L’utilisation des téléphones est possible pour la génération du second facteur.

Un premier moyen consiste à recevoir par SMS un code à usage unique, celui-ci étant envoyé uniquement si le premier facteur d’authentification (le mot de passe par exemple) s’est bien passé. L’utilisateur doit associer son numéro de téléphone portable à son profil. Ce procédé fonctionne avec des téléphones portables qui ne sont pas des « smartphones », mais nécessite d’avoir du réseau GSM.

Un deuxième moyen consiste à recevoir le code à usage unique par message vocal. Mêmes inconvénients et avantages que pour les SMS.

Un autre moyen consiste à installer une application qui reproduit de manière logicielle ce que font les dispositifs électroniques de type « token » . Ce procédé nécessite donc un smartphone mais ne nécessite pas de réseau GSM. L’exemple qui nous intéresse dans cet article est l’application « Google Authenticator » disponible sur toutes les plateformes (Android / iOS / Windows Phone).

Google Authenticator


Dans « Google Authenticator » , on configure un compte en renseignant un secret partagé, c’est à dire une clef générée par le système d’authentification. Cela peut être fait de deux manières:

  • Soit en rentrant la clef manuellement
  • Soit en scannant un QRCode contenant toutes les informations (nom du compte, site, clef partagée)

Une fois le compte créé, l’application va générer un code à usage unique toutes les 30 secondes, basé sur:

  • la clef partagée avec le système d’authentification
  • la date et heure précise du système

Il faut que l’heure du téléphone soit parfaitement synchronisée sur l’heure universelle, ce qui est facilement réalisable en activant la synchronisation de l’horloge du téléphone avec le réseau GSM. NB: la connexion au réseau GSM n’est pas nécessaire en permanence, juste suffisamment souvent pour ne pas que l’horloge du téléphone ne se décale trop.

TwoFactorAuth


L’utilisation de deux facteurs d’authentification constitue une bonne amélioration de la sécurité d’un compte, et la tendance est à la généralisation de son utilisation sur de plus en plus de plateformes (sites web bancaire, GMail, WordPress, Gandi, GitHub, etc.).

J’étais tenté depuis longtemps de m’offrir ce genre d’authentification pour le site web hébergé sur mon Raspberry Pi frontal. J’ai donc développé un petit portail web, en PHP, qui offre une authentification forte basée sur « Google Authenticator » , ou toute autre application compatible, ainsi que toutes les fonctionnalités de base de gestion des utilisateurs:

  • Création de la base de données des utilisateurs
  • Création / Effacement / Modification des utilisateurs
  • Authentification forte
  • Configuration du compte utilisateur « Google Authenticator » par QRCode (plus facile)

Par ailleurs, j’ai rajouté une petite fonctionnalité permettant l’intégration avec le module auth_request du serveur web Nginx. J’ai essayé de développer ce portail pour qu’il soit réutilisable et assez facilement intégrable avec des applications web (PHP) déjà existantes.

J’ai mis l’ensemble du code sur GitHub, sous licence GPL, avec moult explications d’installation, de configuration, des saisies d’écrans etc… :

–> TwoFactorAuth <–

Have fun !

A+

Vous aimez cet article ? Faites le savoir avec quelques bitcoins !

Publicités

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