Je réfléchis depuis quelques mois sur un projet nommé DIAS, dont l'objectif est de fournir un mécanisme d'authentification sur internet un tant soit peu global, tout en restant complètement décentralisé et indépendant.
La constatation initiale est que, sur internet, la gestion des comptes utilisateurs est gérée de façon assez "préhistorique". Le meilleur exemple, ce sont les sites web, et plus particulièrement les forums: la plupart du temps, lorsque l'on veut poster un message sur un forum, il faut se créer un compte utilisateur en remplissant un formulaire à rallonge avec toujours les mêmes infos: nom, prénom, adresse mail, blablabla, et surtout à la fin, pouf, création d'un nouveau compte utilisateur, et hop un mot de passe associé. Bien sûr, on choisit généralement toujours le même nom d'utilisateur (et très souvent le même mot de passe), mais c'est pas grave, il faut recommencer à chaque fois. Je parle des forums parce que c'est le plus fréquent, mais c'est valable pour d'autres formes de sites web, et même pour d'autres formes de communication par internet (IMAP, news, ssh, etc.).
Au final :
- C'est chiant pour l'utilisateurice, qui doit s'inscrire ou se faire inscrire partout, se souvenir de là où ille est inscrit·e, là où ille ne l'est pas, mémoriser l'identifiant, le mot de passe, etc.. D'accord, dans le cas des sites web, les navigateurs modernes offrent une manière de mémoriser ces informations, mais ce n'est qu'une manière de contourner le problème initial.
- C'est chiant pour les "serveurs" (site web, etc.), qui doivent à chaque fois réinventer un moyen de stocker les comptes utilisateurs, offrir un mécanisme de création de compte, confirmation, procédure en cas d'oubli du mot de passe, sans parler de la gestion des comptes abandonnés...
- À l'échelle d'internet, c'est complètement crétin. On a beau avoir beaucoup avancé sur des tas de choses, personne ne semble se soucier de ce point, bien qu'il concerne directement la "vie quotidienne" des gens. Ça en est devenu ridicule.
Il y a déjà eu des initiatives pour prendre en main ce problème, l'une des plus connues étant "Microsoft Passport". Je ne connais pas les détails, mais pour ce que j'en ai compris, les gens ont un identifiant "passport" unique qu'ils peuvent donner sur les sites qui participent à l'initiative. Cet identifiant et le mot de passe associé sont stockés de manière centrale chez Microsoft, à qui les sites utilisant se système vont donc déléguer l'authentification. Ce système, bien que semblant résoudre le problème, pose bien sûr un gros problème d'indépendance, de sécurité, et de pérennité: qu'est-ce qui se passe si du jour au lendemain Microsoft rend ce service indisponible, payant, si la base de données est piratée ? Je passe sur la possibilité de faire par exemple des statistiques de qui va sur tel site, combien de fois par semaine, et les possibilités d'abus que ça ouvre (revente de l'information à des tiers par exemple). Je parle ici de Microsoft Passport à titre d'exemple, mais bien sûr le problème est le même pour tout système similaire présupposant un "fournisseur d'identité" central. À ma connaissance, aucun de ces systèmes n'a vraiment accroché, et on comprend pourquoi.
Bon, donc OK, on tient le problème, mais cette approche-là est mauvaise. Du coup, j'ai essayé de réfléchir à un système qui offrirait le même type d'avantage, c'est-à-dire la possibilité in fine d'apparaître sous un identifiant unique, mais qui ne poserait pas le problème de la centralisation en termes de qui maîtrise cette information. Et bien sûr, ça fait penser à quoi, forcément ? Ben oui, les adresses Jabber (JID): tout comme les adresses mail, un JID est formé d'un identifiant et d'un nom de serveur, séparés par un "@". Ce schéma permet d'avoir des adresses globalement uniques, tout en permettant que le stockage des adresses soit complètement décentralisé: chaque serveur Jabber est responsable de son ensemble d'adresses.
Reste le problème crucial: au moment de s'authentifier sur un site web (je dis site web tout le temps, mais c'est pas forcément que ça, hein), il faut donc prouver que l'on possède le JID truc@serveur.com. Facile, me direz-vous, suffit de donner le mot de passe. Ah ben oui mais non. Hors de question de filer son mot de passe Jabber à tout site qui le demande, bonjour la confidentialité. Paf, l'éternel problème: prouver que l'on possède une information, sans pour autant la donner explicitement.
Une solution, un peu chiante, mais qui marche, est de passer par un système intermédiaire de tickets: je fais une demande de ticket à un "fournisseur de tickets" (on n'aurait qu'à l'appeler "agent", c'est plus court), en lequel le site web a confiance, et ceci je le fais via Jabber, par mon adresse truc@serveur.com. En échange, l'agent me répond par un numéro de ticket unique, que je n'ai qu'à montrer fièrement au site web, comme une sorte de "certificat" qui prouve que truc@serveur.com c'est moi. Et pouf c'est tout.
En vrai c'est pas tout, mais c'est déjà un peu long, alors du coup tout est expliqué en détail sur le site de DIAS (c'est en anglais).
Après quelques mois où j'ai été assez "occupé" (haha), cette semaine j'ai eu un peu plus de temps, alors je me suis enfin décidé à parler de ce projet sur la mailing-list jdev. Le truc rigolo est que quelqu'un (Richard Dobson) a fait quelque chose de presque exactement équivalent. C'est moins détaillé, mais ça a le mérite d'être déjà écrit sous forme de XEP. Du coup, on va probablement bosser ensemble pour enrichir cette XEP avec certaines idées présentes dans DIAS.
Il existe aussi un autre système très intéressant, nommé OpenID, qui tente également de résoudre le même problème, et qui l'aborde sous un angle différent. Je n'ai toujours pas bien compris comment ça marche (mais je me soigne), ni tous les points forts/faibles, donc pas de comparatif ici.
Dans les idées que les autres gens ont eues, il y en a une qui s'appelle "Verifying HTTP requests via XMPP" (vérification de requêtes HTTP via XMPP), et son petit nom c'est XEP-0070. Contrairement à DIAS, qui fait une vérification a priori de l'identité, ce système fait une confirmation, c'est-à-dire une vérification a posteriori. Dans l'état actuel des choses il est fortement corrélé à HTTP, mais l'idée a été émise (et aimée) de changer ça.
Enfin voilà, à suivre donc. Je crois que j'ai bien envie de bosser avec Richard Robson sur l'amélioration de la XEP-0101 (Jabber tickets), et en parallèle de mieux comprendre OpenID.