Mecanismo de Prova de Trabalho
O mecanismo de prova de trabalho foi projetado para evitar abusos automatizados e spam, exigindo que os visitantes do site realizem uma tarefa computacional. Essa tarefa envolve encontrar um número específico determinado pelo servidor e utilizar a função de hash SHA para geração e verificação do desafio. O sistema utiliza um sal aleatório e um número secreto para criar um desafio que os usuários devem resolver para enviar um formulário ou acessar o site.
Geração do Desafio
-
Criação do sal aleatório
Um servidor gera uma sequência aleatória (sal) de comprimento suficiente (geralmente pelo menos 10 caracteres). Esse sal serve como uma entrada adicional para garantir a singularidade e complexidade do desafio para cada usuário. -
Geração do número secreto
O servidor gera um número secreto, um inteiro positivo, que permanece oculto do cliente. Esse número determina a complexidade do desafio. -
Computação do desafio
O servidor concatena o sal e o número secreto, criando uma sequência única. Essa sequência concatenada é hashada usando o algoritmo SHA, produzindo um hash de tamanho fixo, representando o desafio. -
Criação da assinatura do servidor
Uma chave HMAC é usada para criar uma assinatura com base no desafio. Essa assinatura atua como um mecanismo de verificação para a corretude da solução enviada pelo usuário.
Neste mecanismo de prova de trabalho, a tarefa do cliente envolve uma computação iterativa para encontrar uma solução correspondente ao desafio fornecido pelo servidor.
Tarefa do Cliente
A tarefa do cliente envolve iterar continuamente através de números, combinando-os com o sal fornecido, e hashando-os usando o SHA até descobrir um número que, quando hashado com o sal, corresponde ao desafio recebido do servidor. Esse processo iterativo requer esforço computacional do lado do cliente para encontrar uma solução que atenda aos critérios estabelecidos pelo servidor.
Ao encontrar uma solução correspondente, o cliente envia a solução juntamente com o desafio original de volta ao servidor para validação. Se a solução enviada corresponde ao desafio original, conforme o processo de verificação do servidor, o cliente ganha acesso aos serviços do site, demonstrando que concluiu com sucesso a tarefa de prova de trabalho.
-
Computação Iterativa
- Começando do zero, o cliente itera através de números, incrementando sequencialmente.
- Para cada iteração, ele concatena o sal recebido do servidor com o número atual em teste.
- Aplica o algoritmo de hash SHA à string concatenada.
- O hash resultante é comparado ao desafio recebido do servidor.
-
Solução Correspondente O cliente continua esse processo iterativo até encontrar um número que, combinado com o sal fornecido, produza um hash SHA que corresponda ao desafio fornecido pelo servidor.
Verificação da Solução
-
Validação do Desafio
Usando o sal e número recebidos do cliente, o servidor recalcula o desafio concatenando esses valores e aplicando o algoritmo de hash SHA. Em seguida, compara esse desafio calculado com o recebido do cliente para confirmar a igualdade. -
Validação da Assinatura
O servidor reconstrói a assinatura com base no desafio e chave HMAC. Compara essa assinatura reconstruída com a enviada pelo usuário para autenticar a corretude da solução. -
Verificação da Autenticação
A solicitação é considerada autenticada somente se ambas as verificações (desafio e assinatura) forem aprovadas. Em caso de sucesso, o servidor concede acesso ou processa a solicitação do usuário; caso contrário, nega o acesso ou trata a solicitação como potencialmente maliciosa.
Consulte o guia de integração do servidor para exemplos e detalhes de implementação.