Bonjour !
Effectivement, dans notre effort SSO, mais aussi pour tenter de remplacer reCAPTCHA et consort, nous avons posé de nombreuses réflexions autour des CAPTCHA. Nous avons identifié deux sujets au coeur de la chose :
- Comment disposer de challenges intéressants, vérifiables, et pas trivialement contournables ?
- Comment héberger une plateforme de CAPTCHA mutualisée au minimum pour un hébergeur.
Nous avons actuellement pris un raccourci sur chacun de ces sujets - utiliser des challenges lettres/chiffres bateaux et contournables, utiliser des CAPTCHA uniquement sur notre SSO pour déjà limiter le spam à l’inscription - mais nous avions et devrions continuer de pousser la réflexion.
Les idées fondatrice de notre projet étaient très simples. D’abord pour l’hébergement, l’objectif est de pouvoir fournir du CAPTCHA en mode service, avec une API si possible au minimum comparable à reCAPTCHA, pour ne pas perdre trop de futurs utilisateurs (développeurs). Il faut évidemment intégrer au coeur du modèle le multi-homing de la chose, et donc que les bibliothèques clientes n’hardcodent pas les URL d’API cela va de soi. Surtout, il faut que ce soit extrêmement respectueux de la vie privée, et donc intégrable en ne faisant fuiter que le strict minimum, si possible même pas le referer du site qui appelle. Evidemment, aucune information personnelle ne doit être collectée, et le suivi d’un utilisateur - par cookies ou autre - doit être le plus anonymisé possible, et exclusivement aux fins de CAPTCHA.
Le second sujet est plus délicat, la génération des CAPTCHA eux-mêmes, avec une expérience de pensée toute bête qui mène à la conclusion : il est globalement impossible de fabriquer mécaniquement un CAPTCHA dont la solution est calculable par un humain, vérifiable par une machine mais pas calculable par une machine. Formellement cela nous amène dans les questions de calculabilité, mais l’intuition montre bien l’impossibilité. Reste à voir ce qui est possible, au delà du « mieux que rien » que représente l’existant.
Et là vient naturellement l’idée d’enlever une contrainte de l’équation. Peut-être que le challenge peut ne pas être vérifié par une machine, ou peut-être qu’il n’est pas généré par une machine. Google, dans reCAPTCHA, a choisi la combinaison des deux : ils ne génèrent pas eux-mêmes mais posent des questions fermées sur des données assez ouvertes (prises de photos de livres, de rues, etc.) ; et ils ne vérifient pas le résultat mais le confrontent aux réponses d’autres usagers.
Pour essayer de faire pareil, il faut des données suffisamment publiques pour puvoir les employer, suffisamment privées pour ne pas être embarquées dans le premier outil de contournement venu, sur lesquelles poser des questions fermées. On avait pensé à des fils du Fediverse, et autres réseaux fédérés où il existe de la donnée publique mais pas d’ensemble global de toutes les données, chaque instance ayant sa vue de la fédération. L’idée est partiellement développée ici : Evolution des CAPTCHA (#69) · Issues · ACIDES / Hiboo / Hiboo · GitLab.
Hiboo lui-même a la base de l’infrastructure pour faire du CAPTCHA, à coup de JWT dans le formulaire etc. Il a aussi la base de l’infrastructure pour imaginer faire du CAPTCHA mutualisé, quoiqu’il faille travailler la gestion du referer, l’API, etc. On n’a toutefois jamais attaqué le sujet des challenges eux-mêmes.
Mais pour être franc, en observant la tendance pour contourner du reCAPTCHA, je suis de moins en moins convaincu de notre approche très évoluée du problème puisque la réponse en face est très simple : si ce n’est plus calculable par une machine, alors on paie des humains quelques millièmes de centimes pour les résoudre (par exemple : https://anti-captcha.com/). On peut toujours imaginer utiliser une langue locale, et autres tricks pour repousser ce genre de service, mais je suis convaincu qu’on perdra face aux spammers si on s’acharne technologiquement. Aussi, chez TeDomum, on en est rendu à une approche limitante mais efficace : en plus du CAPTCHA trivial (qu’il faut améliorer niveau accessibilité cela-dit) qui éloigne les spammers des services peu rentables, on valide les inscriptions aux services les plus sensibles au spam, et ponctuellement quand quelqu’un s’engoufre dans une brèche, on ferme temporairement les inscriptions et l’on modère à la main.