Pour remplacer reCAPTCHA par un outil hébergé chez soi, trois CAPTCHA libres font calculer une preuve de travail au navigateur au lieu de montrer des images au visiteur, mais ils ne s'installent pas de la même façon. ALTCHA est un widget et une bibliothèque à brancher dans le backend existant, et garde pour ses offres payantes les défis ajustés au risque. Cap est un serveur Docker avec tableau de bord, dont l'appel de vérification reprend les paramètres de celui de Google. mCaptcha, un serveur Rust dont la difficulté suit le trafic, n'a publié qu'une version, en mars 2024, et son mainteneur dit ne plus croire à la preuve de travail.
Ce que la preuve de travail coûte à un visiteur et à un robot
Une preuve de travail remplace la question posée à l'humain par un calcul demandé à sa machine. Le serveur émet un défi, le navigateur essaie des nombres jusqu'à trouver celui dont le hachage remplit la condition fixée, et le serveur vérifie la réponse en un seul calcul. Chez ALTCHA, le navigateur cherche dans des Web Workers le compteur dont la clé dérivée commence par le préfixe demandé, en PBKDF2 avec SHA-256 par défaut.
Pour le visiteur, le coût se compte en secondes. À la difficulté par défaut de Cap, le calcul prend 578 ms en médiane sur un ordinateur de bureau à huit cœurs sous Chrome, et de 1,1 à 5,9 secondes sur les téléphones mesurés par le projet. Le README de mCaptcha annonce de zéro à deux secondes selon la charge du site.
Pour un robot, tout dépend du matériel. Une analyse publiée dans le ticket #186 du dépôt de mCaptcha a produit environ 250 preuves valides par seconde avec un seul processeur Ryzen 9 7950X, au palier le plus difficile par défaut, quand le serveur n'absorbait qu'environ 650 requêtes par seconde de preuves invalides : une marge de protection inférieure à trois. Le mainteneur a confirmé ces résultats en juin 2026, en écrivant que la preuve de travail ne coûte presque rien aux robots d'indexation des LLM.
Les cartes graphiques creusent l'écart sur SHA-256. Selon les mesures de tevador reprises par la documentation de Cap, un GPU y résout environ 150 fois plus de défis qu'un CPU, contre deux fois plus avec HashWX, la fonction de hachage que Cap génère pour chaque défi et applique par défaut aux nouvelles clés de son serveur. ALTCHA propose dans le même but Argon2id et scrypt, deux algorithmes gourmands en mémoire, à charger en workers séparés. mCaptcha reste en SHA-256 : son mainteneur écarte les parades contre le calcul SIMD ou ASIC, qui pénaliseraient les visiteurs ordinaires.
Ce que chaque outil ajoute à la preuve de travail
mCaptcha ajuste la difficulté à la charge. Pour chaque clé de site, un compteur monte à chaque visite et redescend après une période de refroidissement, et chaque palier de visiteurs a son facteur de difficulté, de 50 000 à 5 000 000 par défaut en mode simple. Le calcul suit donc le trafic du site, pas le comportement du visiteur.
Cap ajoute un second défi, actif par défaut sur les nouvelles clés de son serveur : un programme JavaScript généré à chaque requête, qui manipule le DOM dans une iframe et dont le serveur connaît le résultat. Une option bloque en plus les navigateurs automatisés par sept contrôles. La documentation dit elle-même ce qui passe : undetected-chromedriver et nodriver pilotant un Chrome avec interface, et Firefox sans interface. Face à eux ne reste que la preuve de travail, qui renchérit chaque requête sans l'interdire.
La version libre d'ALTCHA applique la même vérification à tous les visiteurs. Sa page de comparaison réserve aux offres payantes les défis ajustés au risque, le renseignement sur les menaces en temps réel et le tableau de bord. L'analyse des signaux d'interaction, que le widget collecte pourtant par défaut, est elle aussi une fonction de Sentinel, le serveur payant.
Ce que chaque outil demande pour tourner
Relevé dans les dépôts et les documentations le 7 octobre 2026.
| Outil | Licence | À faire tourner | Calcul demandé | Vérification par le backend | Dernière version |
|---|---|---|---|---|---|
| ALTCHA | MIT ; Sentinel sous licence payante | une bibliothèque dans le backend existant ; un store partagé comme Redis à plusieurs instances | PBKDF2 et SHA-256, Argon2id ou scrypt en option | dans le backend, par la bibliothèque | widget 3.3.0, 5 oct. 2026 |
| Cap | Apache-2.0 | un conteneur sous Bun et Valkey ou Redis, environ 50 Mo au repos ; ou la bibliothèque capjs-core | HashWX (SHA-256 dans capjs-core), plus un défi d'instrumentation | /siteverify de l'instance, secret et response comme reCAPTCHA | Standalone 3.1.14, 24 sept. 2026 |
| mCaptcha | AGPL-3.0 ou ultérieure pour le serveur, MIT ou Apache-2.0 pour le widget | un binaire Rust et PostgreSQL ; Redis avec un module maison à plusieurs instances ; images amd64 seulement | SHA-256, difficulté selon le trafic | /api/v1/pow/siteverify, format propre | 0.1.0, 15 mars 2024 |
ALTCHA n'a pas de serveur à lui. Ses bibliothèques sous MIT existent en onze langages, dont PHP, Go, Python, Java, Rust et .NET : le backend crée un défi signé par HMAC, puis vérifie la solution. L'anti-rejeu lui revient aussi. Les plugins de altcha-lib fournissent un store en mémoire, CappedMap ; avec plusieurs instances, la documentation demande un store central doté d'un setIfAbsent atomique, faute de quoi deux envois simultanés du même défi passent tous les deux. En JavaScript, la bibliothèque demande Node.js 20 au moins et ne tourne ni sous Bun ni sous Deno.
Cap Standalone garde toutes ses données dans Valkey ou Redis depuis sa v3, et tourne sous Bun avec environ 50 Mo de mémoire au repos selon sa documentation. L'instance doit être joignable depuis Internet, derrière un reverse proxy : Cap lit l'adresse du client dans X-Forwarded-For sans la contrôler, et un conteneur exposé en direct laisse contourner sa limite par défaut de 30 requêtes par IP toutes les cinq secondes. La bibliothèque capjs-core fait le même travail sans état, par jetons JWT signés, dans un backend existant ou sur Cloudflare Workers, mais l'anti-rejeu est alors à fournir.
mCaptcha s'appuie sur PostgreSQL, que le Compose fourni lance en version 18. Sans Redis, ses compteurs de visiteurs restent dans la mémoire du processus, ce qui limite à une seule instance ; avec Redis, il faut l'image mcaptcha/cache, dotée d'un module maison. Aucun besoin en mémoire ni en processeur n'est documenté, une question ouverte depuis août 2025 dans le ticket #189. Les identifiants donnés par le README n'existent qu'en mode démo, que la configuration Docker désactive en même temps que l'inscription.
Remplacer l'appel de vérification de reCAPTCHA
Le backend d'un site protégé par reCAPTCHA envoie secret et response à Google et lit un champ success en retour, comme le décrit la documentation de vérification de reCAPTCHA. Le /siteverify de Cap Standalone attend les mêmes paramètres, mais en JSON et à l'adresse de l'instance, et le formulaire envoie un champ cap-token au lieu de g-recaptcha-response. Le site de mCaptcha annonce des API compatibles avec reCAPTCHA et hCaptcha, mais son point de vérification documenté attend token, key et secret et répond valid : le contrôle du backend est à réécrire. ALTCHA n'a pas d'appel distant à remplacer, puisque la bibliothèque vérifie la solution dans le backend lui-même.
Cap et mCaptcha figurent aussi parmi les défis antibot de BunkerWeb, un pare-feu applicatif placé en reverse proxy, qui les applique service par service.
Ce que chaque outil garde des visiteurs
ALTCHA, Cap et mCaptcha ne posent pas de cookie par défaut. Le widget d'ALTCHA envoie sa preuve dans un champ caché, mais le serveur peut lui imposer un cookie par l'en-tête X-Altcha-Config. Les routes du CAPTCHA de mCaptcha n'en posent pas selon son README, et son site dit ne pas limiter le débit par adresse IP, ce qui épargne les visiteurs derrière un NAT.
Le code de Cap Standalone tient des compteurs par clé de site : défis réussis, échoués ou limités et latence, heure par heure, plus la plateforme et le système d'exploitation tirés du User-Agent. L'adresse IP sert de clé à la limite de débit et s'efface quelques secondes après. Pays et ASN ne s'ajoutent que si on les configure, par un en-tête du proxy ou une base d'adresses : DB-IP Lite ou MaxMind GeoLite2 téléchargées sur le serveur, ou l'API IPInfo, qui reçoit alors chaque adresse.
Côté navigateur, la version libre d'ALTCHA ne passe par aucun service tiers. La documentation de Cap promet une vérification sans appel tiers, mais sa balise d'installation charge le widget depuis cdn.jsdelivr.net, où il prend aussi ses deux fichiers WASM au moment du calcul. L'extrait HTML de mCaptcha charge son script d'intégration depuis unpkg.com. Pour qu'aucune requête ne quitte le domaine, il faut installer ces paquets depuis npm et les servir soi-même, ou, chez Cap, activer le serveur d'assets de Standalone, éteint par défaut.
Accessibilité et défis de secours
ALTCHA et Cap revendiquent tous deux le niveau AA des WCAG 2.2, sans citer d'audit externe. La page de conformité d'ALTCHA laisse la responsabilité finale à l'intégrateur. Celle de Cap ajoute la norme européenne EN 301 549 et la Section 508 américaine, en précisant qu'elle décrit la façon dont l'outil est conçu pour y répondre et ne constitue pas un avis juridique. ALTCHA documente la navigation au clavier, des libellés pour lecteur d'écran et plus de 50 langues. Son défi de secours, un code à recopier depuis une image ou un enregistrement audio, exige Sentinel ou une implémentation serveur maison.
La durée du calcul compte aussi pour l'accès : chez Cap, 1,1 à 5,9 secondes sur des téléphones à la difficulté par défaut, et HashWX exige WebAssembly, faute de quoi la clé doit repasser en SHA-256. Le README de mCaptcha ne dit rien de l'accessibilité, mais le projet documente un chemin sans JavaScript : un outil en ligne de commande calcule la preuve à partir de l'adresse de la page, et le visiteur colle le code obtenu dans le formulaire.
Licences et offres payantes
ALTCHA est sous MIT pour le widget et ses onze bibliothèques serveur. Sentinel ne l'est pas : seuls ses scripts et charts de déploiement sont publiés sur GitHub, il tourne 30 jours en essai sans clé et exige une licence en production, à partir de 99 € par mois pour trois instances et dix comptes, 799 € pour l'offre Enterprise. Le cloud d'ALTCHA, hébergé dans l'UE, commence à 47 € par mois pour 1 000 requêtes par jour et trois sites ; au-delà, les requêtes reçoivent une erreur HTTP 429 sans être vérifiées. Le plugin WordPress gratuit couvre la connexion, l'inscription et les commentaires, et protéger Contact Form 7 ou WooCommerce demande l'offre à 18,90 € par mois.
Cap est sous Apache-2.0 pour tout son dépôt, sans version payante ni hébergement géré ; sa documentation renvoie ceux qui ne veulent rien héberger vers Turnstile ou FriendlyCaptcha. mCaptcha est sous AGPL-3.0 ou ultérieure côté serveur : qui expose une version modifiée en service réseau doit en publier le code. Son widget est sous MIT ou Apache-2.0, au choix. Le projet ne vend rien, et la base de ses instances de démonstration est « fréquemment effacée », prévient le README.
Où en sont les projets
ALTCHA a réécrit son widget et son protocole de preuve de travail avec la v3.0.0 du 7 avril 2026, puis publié 16 versions jusqu'à la v3.3.0 du 5 octobre. Cette dernière corrige un contournement de verifySolution dans altcha/lib : sans signature de clé, n'importe quel compteur passait sans calcul. Le même jour, altcha-lib 2.6.0 a corrigé un contournement en mode déterministe et deux failles d'anti-rejeu dans ses plugins, et la bibliothèque Go avait retiré ses versions 2.0.0 à 2.3.0 le 3 octobre. Mettre à jour le widget ne suffit donc pas, la bibliothèque serveur doit suivre.
Le dépôt de Cap date de janvier 2025. Standalone a publié 25 versions depuis janvier 2026, dont la v3 et son stockage Valkey en avril, et un développeur signe 668 des 709 commits. Le README cite bunny.net et AdGuard parmi ses utilisateurs en production.
mCaptcha n'a publié que la v0.1.0, le 15 mars 2024. Son dernier commit date du 7 octobre 2025, un développeur signe 761 des 879 commits, et le README affiche toujours « active development ». Dans le ticket #186, le mainteneur se dit « désillusionné » par la preuve de travail ; son plan est de mettre à jour les dépendances, de publier une version, puis de chercher une autre approche, Privacy Pass étant évoqué.
