S'il y a bien une application qui ne doit pas me faire défaut, c'est 2FAuth!
Comme je l'expliquais dans le tutoriel, et je vois après coup que Bubka a eu une expérience similaire, quand j'ai changé de smartphone en oubliant, comme un grand champion, de récupérer ces fichus codes, je me suis retrouvé dans une merde pas possible.
Je me suis dis plus jamais Google Authenticator, ce n'est pas fait pour les distraits comme moi, et puis j'étais dans ma phase ou je commençais à remplacer, tant que possible, tous les services Google par des solutions libres et open-source. Et c'est là que j'ai trouvé 2FAuth!
C'est pourquoi j'ai eu envie d'en apprendre plus sur l'application et son développeur!
L'interview
belginux: Bonjour Bubka et merci de prendre de ton temps pour répondre à quelques questions pour belginux !
Bubka: "Bonjour Zarev, bonjour à tous les lecteurs de Belginux. C’est avec plaisir que je me prête à cet exercice plutôt nouveau pour moi."belginux:Je voudrais commencer par te remercier de partager gracieusement ton application que j’utilise au quotidien ainsi que quelques amis à moi !
Bubka: "Merci, c’est toujours plaisant d’avoir ce genre de retour, je suis vraiment content que 2FAuth soit utile à d’autres. C’est clairement une des raisons premières de sa distribution sous licence libre."belginux: Peux-tu te présenter en quelques mots ? Tu n'es déjà pas forcément facile à trouver... 😎
Bubka: "Bubka, je suis le développeur de l'application web 2FAuth. J’ai 45 ans, je vis à Toulouse dans le sud de la France et je suis développeur C#/.NET depuis un peu plus d’un an suite à une reconversion professionnelle. En réalité je code depuis bien plus longtemps, mes premiers pas dans le dev datent du milieu des années 90 lorsque Internet a commencé d'arriver dans les foyers français.Évidement à l’époque cela se limitait à la création de petites pages web en HTML mais l’intérêt pour la chose était déjà bien présent. Depuis ma pratique n’a fait que s’intensifier, en autodidacte pendant longtemps (sur le langage PHP notamment), et maintenant en tant que professionnel donc. C’est une passion avant tout, comme chez pas mal de développeurs il me semble.
D’ailleurs peut être que certains de vos lecteurs me connaissent car 2FAuth n’est pas le seul projet avec un peu de visibilité auquel je suis associé. En effet j’ai co-créé les sites customxp.net puis pngfactory.net qui ont eu leurs petites heures de gloire au sein des communautés francophones de geeks amateurs de customisation Windows et de graphisme durant les années 2000. Une autre époque quand j’y pense, le web n’avait pas grand chose à voir avec celui d’aujourd’hui !"
belginux: Comment t'es venu l’idée de te lancer dans le développement de 2FAuth ?
Bubka: "Les origines du projet sont multiples.Il y a d'abord une démarche de « dégooglelisation » comme l'appelle l’association Framasoft. Je suis très sensible aux problématiques de respect des données personnelles, j'ai donc entrepris il y a quelques années de basculer mes usages sur des solutions non propriétaires et auto-hébergeables. J’ai trouvé dans le monde du logiciel libre beaucoup d’outils pour mener à bien cette démarche, sauf pour la gestion de la double authentification (2FA).
Ensuite, j’avais été pas mal échaudé par la perte d’un smartphone et donc de mes codes 2FA qui a l’époque était dans Google Authenticator, sans sauvegarde Cloud comme c’est le cas maintenant. Ça avait été une vraie galère de récupérer les accès à mes comptes, je cherchais donc une solution me permettant de maîtriser la sauvegarde de ces données.
Il y avait aussi une problématique d’expérience utilisateur que je souhaitais améliorer. J’ai toujours trouvé pénible de devoir sortir mon smartphone pour générer des codes 2FA quand je suis devant un ordinateur. Par ailleurs, je ne suis vraiment pas fan des interfaces graphiques comme celle de Google Auth qui affichent tous les codes sur le même écran. Je trouve ça confus et pressant, je voulais là aussi rendre mon usage plus confortable.
Pour finir, c’était un très bon sujet pour développer mes compétences en dev. Je souhaitais à ce moment la apprendre Laravel et vue.js (des frameworks de développement PHP et Javascript) et me plonger dans l’implémentation d’API. C’était le projet idéal."
belginux: Quand on est un utilisateur amateur, encore moins développeur, il n’est pas forcément évident de se rendre compte de la masse de travail que cela représente. Peux-tu me dire combien de temps approximativement, a-t-il été nécessaire à la réalisation de 2FAuth et combien de lignes de code en moyenne cela représente ?
Bubka: "Houlà, difficile à dire ! Je n’ai jamais vraiment compté le temps passé sur le projet, et surtout ce n’est pas linéaire. Il y a eu des périodes de forte activité et d’autres ou je ne travaillais pas du tout dessus, on le voit assez bien sur mon graph de contributions Github. De plus, comme tout est réalisé sur mon temps perso, certains jours ça ne va être que quelques minutes, et d’autres cela va m’occuper la journée entière.Ce que je peux dire malgré tout, c’est que ça se chiffre en centaines de jours. Entre le code a proprement dit, le travail sur l’ergonomie et le design, l’écriture des tests ou encore la rédaction de la documentation, le compteur grimpe vite. Il faut cela dit pondérer cette valeur, je prends le temps pour bien faire les choses (de mon point de vue bien sûr) et je ne suis certainement pas le plus véloce des développeurs.
En terme de chiffre, le projet a commencé en 2019. Le code propre à 2FAuth (c’est à dire sans les frameworks) c’est environ 6500 lignes de code PHP, 7300 lignes de code Javascript/HTML et 9700 lignes de tests. Le dépôt sur Github contient lui presque 1600 commits."
belginux: Quelle est la plus grande difficulté que tu as rencontré pendant le développement de 2FAuth ?
Bubka: "Je dirai la mise au point du système de rotation des codes qui s’accompagne de l’affichage cadencé des pastilles de couleur vertes, jaunes et rouges sous ces mêmes codes. Ce n’est pas d’une grande complexité algorithmique en soi, mais ça passe par l’utilisation de timers javascript dont je n’aime guère la syntaxe, et des systèmes de composants et d’évènements de vue.js que je découvrais à ce moment la. Le truc bien casse-pieds à concevoir et à déboguer, surtout avec l’architecture client/serveur de 2FAuth !Globalement 2FAuth n’est pas une application très complexe. Certaines fonctionnalités comme par exemple la gestion de l’authentification sont grandement simplifiées, le framework Laravel proposant bon nombre de fonctionnalités prêtes à l’emploi. Le schéma de base de données de l’application est également très simple, avec peu de tables et de relations.
Je pense que les difficultés sont plutôt à venir en fait. Avec l’évolution récente de 2FAuth vers l’architecture multi-utilisateur et l’arrivée très probable de fonctionnalités de partage, la complexité va certainement monter d’un cran."
belginux: Comment fonctionne le principe de la double authentification, hormis le fait que c'est un code qui change régulièrement et qui déverrouille l'accès à une application protégée par 2FA ?
Bubka: "Déjà un rappel de la problématique à laquelle répond l’authentification à double facteurs (A2F) : Utiliser un seul mot de passe pour s’authentifier sur un système ne permet pas de garantir que c’est bien vous qui cherchez à vous y connecter. En effet votre mot de passe peut très bien avoir été dérobé, cela prouve donc seulement que quelqu’un connaît le mot de passe. On introduit donc un second élément de vérification, un facteur, qui doit permettre de garantir que c’est vous et vous seul qui êtes en train de vous connecter.Cette garantie s’obtient ainsi : L’utilisateur, lorsqu’il active l’A2F sur un de ses comptes, reçoit une clé de la part du système hébergeant le compte. Cette clé est unique, seul l’utilisateur la reçoit, le système lui en conserve une copie. Grâce à elle, l’utilisateur est en mesure de générer des codes, et il lui sera demandé d’en fournir un à chaque fois qu’il voudra se connecter sur le système. Étant donné qu’il est le seul à avoir reçu la clé, si le code qu’il fournit lors d’une tentative de connexion est valide, c’est qu’il ne peut s’agir que de lui et de personne d’autre.
Maintenant que l’on a le principe, voici comment cela s’opère. La clé, nous la récupérons au moment ou nous scannons le QR Code qui nous est présenté à l’activation de l’A2F. Concrètement, il s’agit d’une chaîne de caractères qui va être utilisée comme clé de chiffrement. Lorsque l’on demande à obtenir un code, 2FAuth introduit cette clé dans un algorithme cryptographique et affiche le résultat de l’algorithme. Ensuite, lorsque l’utilisateur saisi ce code pour se connecter, le système va réaliser exactement le même traitement de son côté (rappelez-vous, le système possède aussi la clé) et comparer les codes. Si celui saisi par l’utilisateur est identique à celui qu’il a obtenu alors l’identification est validée et l’utilisateur peut être connecté.
Pour finir, et sans trop rentrer dans des détails techniques, il est intéressant de s’arrêter un peu sur ce qui rend les codes à usage unique. Lors du traitement cryptographique, des variables spécifiques sont introduites afin de modifier le résultat du traitement. Il s’agit soit d’un repère temporel associé à une période, soit d’un compteur. Dans le cas du compteur, sa valeur sera incrémentée à chaque génération d’un nouveau code. Pour le repère temporel, sa valeur change toutes les secondes par définition. Ainsi, dès que la valeur du compteur augmente ou que la valeur du repère temporel change de période, le code généré change lui aussi. Comme ni le compteur ni le repère temporel ne peuvent avoir deux fois la même valeur, les codes sont dits à usage unique."
belginux: Vu le service sensible dont se charge 2FAuth, à condition évidemment que l’utilisateur respecte les bonnes pratiques de son installation et utilisation, quelles sont les mesures prises côté développement pour s’assurer que l'on peut utiliser 2FAuth en tout confiance et sécurité ?
Bubka: "Sur l’aspect sécurité, ce n’est pas si différent de mon côté que du côté utilisateur en réalité. Pour moi cela passe par l’application des bonnes pratiques (de développement) et le respect des connaissances établies en la matière. Donc ne pas chercher à réinventer la roue, s’appuyer sur des solutions éprouvées, multiplier les niveaux de protections et se tenir à jour.Pour la partie confiance c’est un peu plus délicat car il y a une part de subjectif. Cela étant, je pense qu’il faut avant tout de la transparence. Et la le modèle Open source est idéal. Certes tout le monde n’aura pas le temps, l’envie ou les connaissances pour se pencher sur le code, mais ceux qui le veulent le peuvent.
J’essaie par ailleurs d’être présent et réactif pour tout ce qui touche au support et aux corrections de bugs/failles. Un projet informatique n’est jamais sûr à 100 %, c’est impossible. Par contre, il faut absolument qu’il y ait une réaction quand quelque chose se passe mal sans quoi la confiance se dégrade voire disparaît. Il se trouve que c’est une activité que j’aime bien faire, donc c’est plutôt facile pour moi. C’est par contre assez chronophage."
belginux: Il règne une grande confusion dans le mode de l’open source. En tout cas chez certaines personnes. Open source/Linux = gratuit. N’est-ce pas un frein quand on est développeur et qu’on voudrait monnayer son travail, ce qui serait légitime...
Bubka: "Effectivement il y a un vrai sujet autour du modèle économique. Est-ce que c’est un frein ? Je crois que ça dépend de pourquoi on décide d’aller vers le libre, ce qui nous anime, des objectifs que l’on se fixe. Il y a beaucoup de possibilités pour dégager des revenus, le tout est de trouver celle qui est en adéquation avec ses valeurs et ses objectifs.Quand j’ai démarré 2FAuth il était évident pour moi que ce serait un logiciel libre. J’utilise au quotidien plusieurs applications libres, ouvrir mon travail était ma façon de rétribuer la communauté pour ce qu’elle m’apporte. Bon, et puis pour être honnête, je n’avais pas vraiment d’ambition pour ce projet. C’était avant tout destiné à usage personnel, l’intérêt d’une telle application (surtout vu tout ce qui existe sur mobile pour l’A2F) me paraissait très limité, voire réduit par la lourdeur de sa mise en œuvre. J’étais enthousiaste à l’idée que d’autres puissent y avoir accès et s’en servir, mais c’est à peu prêt tout !
Aujourd’hui je n’ai évidemment plus le même regard sur le projet. 2FAuth s’est fait une petite place dans le monde de l’A2F (mais au sein d’une population au profil technique cela dit), il y a même des professionnels qui l’utilisent me semble-t-il. Tout ce chemin s’est fait grâce à un investissement personnel conséquent et qui est encore d’actualité, donc l’idée d’en faire une source de rémunération a naturellement émergée. J'ai opté pour la mise en place des dons/tips, car c'est ce qui aujourd'hui répond le mieux à mes critères. Si je décide demain d’accélérer sur ce point, je sais que d'autres solutions s'offrent à moi, sans pour autant sortir du modèle du libre."
belginux: As-tu un autre projet d’application self-hosted en tête dans le futur ?
Bubka: "Non aucun. J’ai encore beaucoup de choses en tête pour 2FAuth, je reste donc concentré sur ce seul projet. Et puis de toutes façons je n’aurai pas suffisamment de temps pour me lancer dans un autre projet."belginux: Quel est ton top 5 des applications self-hosted, pas forcément celle que tu utilises, mais celle que tu estimes, hormis 2Fauth, bien entendu !
Bubka: "Snappymail, qui est un fork de RainLoop. C’est le webmail que j’utilise au quotidien.Firefly-III, un gestionnaire de finances personnelles.
KeeWeb, une application de gestion des mots de passe qui permet de gérer une base de mots de passe au format KeePass.
PeerTube, la plateforme vidéo de l'association FramaSoft. Je suis super admiratif de l'ambition du projet et de comment il évolue.
FreeTube, un lecteur de vidéo Youtube qui limite le tracking."
belginux: Dernière question, la « question polémique » : dis-tu Linux ou gnu/Linux ? 😜
Bubka: "Lol, j'avoue ne pas être trop dans le coup à ce niveau, s'il y a vraiment un match entre ces 2 noms je ne suis même pas au courant.Perso je dis Linux, mais c'est parce que je suis du genre fainéant, ça va plus vite à dire ^^!"
belginux: C'est ici que se termine l'interview, encore merci Bubka d'avoir bien voulu répondre à mes questions et bonne continuation!
Bubka: "C'était avec grand plaisir. L'exercice n'a pas été simple, j'ai sûrement pris trop de temps pour y répondre (la c'est mon côté "appliqué" qui a pris le dessus), mais j'espère avoir réussi à partager ma vision et de façon intéressante.Bonne continuation à Belginux, à bientôt."
belginux: Oui, c'était parfait, encore merci, à bientôt! 😃
Conclusion
Ce n'est pas parce qu'une application est gratuite que vous ne pouvez pas y contribuer, soit en devenant un sponsor, en faisant un don et en donnant une petite étoile sur GitHub!
Et n'oubliez pas, belginux a fait un amaziiiiiing tutoriel pour installer 2FAuth!