Caputchin
Entendendo a Caputchin

Proof of work

Toda verificação pede ao navegador do visitante que resolva um pequeno quebra-cabeça computacional antes de a Caputchin emitir um token. Esse quebra-cabeça é o proof of work.

Como funciona

A Caputchin entrega ao navegador um desafio e pede que ele ache um número (um nonce) que, quando combinado por hash com o desafio, produza um hash começando com uma quantidade exigida de zeros à esquerda. Não há atalho: o navegador tem de tentar nonce após nonce até um por acaso funcionar. Achar um nonce válido leva muitas tentativas; conferir um é um único hash. Então o trabalho é difícil de fazer mas barato de verificar, e a Caputchin confirma que a resposta resolve a dificuldade exigida.

Content-Security-Policy

O solver roda em um Web Worker, que o widget cria a partir de uma URL blob:, então a Content-Security-Policy da página que embute precisa permitir blob: para os workers (worker-src blob:, ou child-src / default-src como a cadeia de fallback). Esta parte é obrigatória: não há fallback na thread principal, então uma política que bloqueia o worker bloqueia a verificação. Separadamente, o solver compila uma rotina WebAssembly por velocidade, que precisa de 'wasm-unsafe-eval' em script-src. Essa parte é opcional: sem ela o mesmo solver roda mais devagar em JavaScript puro dentro do Worker. Veja sandbox de jogos para a política completa da página anfitriã.

Por que desestimula o abuso

O ponto não é tornar qualquer resolução individual impossível. É tornar o abuso em escala inviável economicamente.

Um visitante real resolve um quebra-cabeça numa fração de segundo e nunca percebe. Um bot que quer disparar milhares de requisições paga esse custo de computação milhares de vezes. Se resolver o desafio custa mais do que o spam vale, o ataque para de fazer sentido financeiro. O proof of work muda o objetivo de "inquebrável" para "não vale a pena".

Os botões

Duas configurações na página de Segurança de uma chave ajustam o custo:

  • Dificuldade define quantos zeros à esquerda o hash precisa ter, o que eleva o custo de cada resolução.
  • Desafios por requisição multiplica esse custo pedindo várias resoluções de uma vez.

Um limite honesto

Nenhum desafio é inquebrável; com dinheiro suficiente, qualquer coisa pode ser resolvida. O proof of work aceita isso e compete no custo em vez disso. Ele também só prova que esforço foi gasto, não que um navegador real o gastou, e é por isso que a Caputchin o emparelha com a instrumentação para checar o ambiente também.

Nesta página