Caputchin
Comprendre Caputchin

Proof of work

Chaque vérification demande au navigateur du visiteur de résoudre un petit casse-tête de calcul avant que Caputchin n'émette un token. Ce casse-tête est le proof of work.

Comment ça marche

Caputchin remet au navigateur un défi et lui demande de trouver un nombre (un nonce) qui, haché avec le défi, produit un hash commençant par un nombre requis de zéros en tête. Il n'y a pas de raccourci : le navigateur doit essayer nonce après nonce jusqu'à ce que l'un fonctionne par hasard. Trouver un nonce valide prend de nombreuses tentatives ; en vérifier un est un seul hash. Donc le travail est dur à faire mais bon marché à vérifier, et Caputchin confirme que la réponse passe la difficulté requise.

Content-Security-Policy

Le solveur tourne dans un Web Worker, que le widget crée à partir d'une URL blob:, donc la Content-Security-Policy de la page d'intégration doit autoriser blob: pour les workers (worker-src blob:, ou child-src / default-src comme chaîne de repli). Cette partie est requise : il n'y a pas de repli sur le fil principal, donc une politique qui bloque le worker bloque la vérification. À part, le solveur compile une routine WebAssembly pour la vitesse, qui a besoin de 'wasm-unsafe-eval' dans script-src. Cette partie est optionnelle : sans elle, le même solveur tourne plus lentement en JavaScript pur dans le Worker. Vois bac à sable des jeux pour la politique complète de la page hôte.

Pourquoi ça dissuade l'abus

Le but n'est pas de rendre une résolution unique impossible. C'est de rendre l'abus à grande échelle non rentable.

Un vrai visiteur résout un casse-tête en une fraction de seconde et ne le remarque jamais. Un bot qui veut tirer des milliers de requêtes paie ce coût de calcul des milliers de fois. Si réussir l'épreuve coûte plus que ce que vaut le spam, l'attaque cesse d'avoir un sens financier. Le proof of work déplace l'objectif de « incassable » vers « pas la peine ».

Les molettes

Deux réglages sur la page Sécurité d'une clé règlent le coût :

  • Difficulté fixe combien de zéros en tête le hash doit avoir, ce qui élève le coût de chaque résolution.
  • Défis par requête multiplie ce coût en demandant plusieurs résolutions à la fois.

Une limite honnête

Aucune épreuve n'est incassable ; avec assez d'argent, tout peut être résolu. Le proof of work l'accepte et rivalise sur le coût à la place. Il ne prouve aussi que de l'effort a été dépensé, pas qu'un vrai navigateur l'a dépensé, ce qui est pourquoi Caputchin l'associe à l'instrumentation pour vérifier l'environnement aussi.

Sur cette page