Pular para o conteúdo

Complexidade

A “complexidade” no mecanismo de prova de trabalho refere-se ao nível de esforço computacional necessário por um cliente para resolver o desafio apresentado pelo servidor. A complexidade é controlada ajustando o valor máximo do número aleatório gerado pelo servidor durante a criação do desafio.

A configuração da complexidade serve como uma medida para equilibrar a segurança contra abusos/spam automatizados e a experiência do usuário. Ao controlar a faixa do número gerado aleatoriamente, o sistema ajusta a dificuldade da tarefa computacional exigida do cliente.

Complexity test

Adjust the number of iterations and test the computational complexity on your device.

Iterations: 0

Ajustando a complexidade

A complexidade pode ser ajustada modificando os valores mínimo e máximo do número secreto gerado aleatoriamente no servidor. Um valor máximo mais baixo cria um desafio menos complexo, exigindo menos iterações computacionais para o cliente encontrar uma solução correspondente. Por outro lado, um valor máximo mais alto aumenta a complexidade, exigindo mais recursos computacionais e tempo do cliente.

Benchmarks de Desempenho

Estes benchmarks ilustram o tempo necessário para diferentes dispositivos resolverem um desafio ALTCHA. A tabela abaixo mostra o número de cálculos (operações) que cada dispositivo pode realizar por segundo e o tempo correspondente para resolver um desafio com uma complexidade de 100.000. Um maior número de operações por segundo indica melhor desempenho.

DispositivoDesempenhoTempo para Resolver
MacBook Pro M3-Pro (2023)3 ops/s0,33 seg
iPhone 12 mini (2020)1,2 ops/s0,83 seg
AWS EC2 (c6a.xlarge)1 ops/s1 seg
Samsung Galaxy A14 (2023)0,4 ops/s2,5 seg
AWS Lambda (1GB)0,12 ops/s8 seg

Considerações

  • Impacto na performance

    Maior complexidade pode aumentar significativamente a carga computacional nos dispositivos dos clientes, potencialmente impactando a experiência do usuário.

  • Dispositivos de baixo custo versus dispositivos de alto custo

    O que leva menos de um segundo em um novo iPhone, pode levar 30 segundos em um celular Android de baixo custo. Teste com dispositivos físicos típicos dos seus usuários.

  • Compromissos de segurança

    Menor complexidade pode reduzir a segurança contra ataques automatizados, mas pode melhorar a acessibilidade do usuário.

Práticas recomendadas

  • Complexidade dinâmica

    Implemente um sistema dinâmico que adapte a complexidade com base na carga do servidor ou no comportamento do usuário, garantindo um equilíbrio entre segurança e usabilidade.

  • Testes e otimização

    Realize testes rigorosos para determinar um nível de complexidade ideal que previna abusos sem sobrecarregar excessivamente usuários legítimos.