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.
Adjust the number of iterations and test the computational complexity on your device.
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.
Dispositivo | Desempenho | Tempo para Resolver |
---|---|---|
MacBook Pro M3-Pro (2023) | 3 ops/s | 0,33 seg |
iPhone 12 mini (2020) | 1,2 ops/s | 0,83 seg |
AWS EC2 (c6a.xlarge) | 1 ops/s | 1 seg |
Samsung Galaxy A14 (2023) | 0,4 ops/s | 2,5 seg |
AWS Lambda (1GB) | 0,12 ops/s | 8 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.