---
type: explanation
title: Proof of work
summary: Por que a Caputchin faz o navegador fazer um pouco de computação antes de emitir um token, e como isso eleva o custo do abuso.
---

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](/docs/understanding-caputchin/game-sandboxing#the-csp-you-set-on-your-own-page) 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](/docs/site-keys/security) 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](/docs/understanding-caputchin/instrumentation) para checar o ambiente também.
