A defesa de proof-of-work do Tor: encarecendo a negação de serviço contra serviços onion
Um serviço onion sob inundação não pode fazer o que um site normal faz: não há endereços IP para limitar, porque nem os visitantes nem os atacantes revelam um. A resposta do Tor, entregue no Tor 0.4.8 e anunciada no blog do projeto em agosto de 2023, é cobrar a etapa de introdução em tempo de processador. O design desce da proposta 327, redigida em abril de 2020 por George Kadianakis, Mike Perry, David Goulet e tevador, que colocou o problema sem rodeios: construir circuitos de rendezvous é caro para o serviço e para a rede, e limite de taxa sozinho nunca mudou isso.
Um quebra-cabeça que só aparece sob carga
O esquema é transparente no sentido do protocolo: não há uma viagem extra de desafio e resposta. Os parâmetros do quebra-cabeça vivem dentro do descritor do serviço onion que os clientes baixam de qualquer forma - uma etiqueta de versão, uma seed de 32 bytes, um nível de esforço sugerido e uma expiração. Enquanto o esforço sugerido permanecer zero, a defesa dorme e as introduções seguem exatamente como antes. Quando o serviço detecta sobrecarga, ele eleva o esforço sugerido. Os clientes então resolvem Equi-X, a função de quebra-cabeça especificada na proposta, sobre um desafio montado a partir de uma string de personalização, do ID cegado do serviço, da seed, de um nonce aleatório de 16 bytes e do esforço escolhido. A solução, de cerca de 43 bytes, viaja dentro da célula INTRODUCE1 como uma extensão. Segundo o blog do Tor, uma primeira resolução custa cerca de 5 milissegundos numa máquina rápida e até uns 30 em hardware mais lento; sob ataque sustentado, o trabalho necessário pode se aproximar de um minuto de computação.A fila cobra por esforço
Verificar uma solução é barato por construção; a parte cara - construir o circuito de rendezvous - é adiada. Pedidos verificados entram numa fila de prioridade ordenada pelo esforço declarado, entradas mais antigas vencem empates, e um escalonador a drena em ritmo controlado. A dificuldade segue um ciclo de aumento-aditivo e redução-multiplicativa em janelas de 300 segundos: enquanto a fila seguir saturada, o serviço eleva o esforço para o valor anterior mais um ou para o esforço médio das introduções atendidas, o que for maior; quando a pressão cai, o esforço decai cerca de um terço. Os clientes tentam de novo com esforço crescente - dobrando abaixo de 1.000, depois multiplicando por 1,5 - entre os limites que a especificação fixa em 8 e 10.000. As seeds rotacionam a cada duas horas aproximadamente, e a seed anterior continua aceita por um tempo para evitar corridas.Por que usuários comuns quase não notam
Como o quebra-cabeça só existe enquanto o serviço está sob estresse, o tráfego comum em carga baixa não paga nada. Uma pessoa que abre algumas páginas durante um ataque gasta milissegundos, experiência que o blog compara a esperar numa conexão lenta, enquanto um atacante que dispara milhões de introduções paga por cada uma. O resumo do Tor Project:"Blocks attackers while giving real users a chance to reach their destination" - blog do Tor Project, agosto de 2023
Como os serviços ativam
Operadores controlam a defesa pelo torrc. As chaves documentadas no guia de DoS de onion services do projeto:- HiddenServicePoWDefensesEnabled - publica o quebra-cabeça no descritor e liga a fila ordenada por esforço
- HiddenServicePoWQueueRate e HiddenServicePoWQueueBurst - a velocidade com que pedidos verificados saem da fila
- CompiledProofOfWorkHash - opção global que escolhe a função hash usada nos quebra-cabeças










