Saltearse al contenido

Complejidad

La “complejidad” en el mecanismo de prueba de trabajo se refiere al nivel de esfuerzo computacional requerido por un cliente para resolver el desafío presentado por el servidor. La complejidad se controla ajustando el valor máximo del número aleatorio generado por el servidor durante la creación del desafío.

El ajuste de la complejidad sirve como medida para equilibrar la seguridad contra el abuso automatizado/spam y la experiencia del usuario. Al controlar el rango del número generado aleatoriamente, el sistema ajusta la dificultad de la tarea computacional requerida por el cliente.

Complexity test

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

Iterations: 0

Ajuste de complejidad

La complejidad puede ajustarse modificando los valores mínimo y máximo del número secreto generado aleatoriamente en el servidor. Un valor máximo más bajo crea un desafío menos complejo, que requiere menos iteraciones computacionales para que el cliente encuentre una solución coincidente. Por el contrario, un valor máximo más alto aumenta la complejidad, exigiendo más recursos computacionales y tiempo por parte del cliente.

Benchmarks de Rendimiento

Estos benchmarks ilustran el tiempo requerido para que diferentes dispositivos resuelvan un desafío ALTCHA. La tabla a continuación muestra el número de cálculos (operaciones) que cada dispositivo puede realizar por segundo y el tiempo correspondiente para resolver un desafío con una complejidad de 100,000. Un mayor número de operaciones por segundo indica un mejor rendimiento.

DispositivoRendimientoTiempo 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

Consideraciones

  • Impacto en el rendimiento

    Una mayor complejidad puede aumentar significativamente la carga computacional en los dispositivos de los clientes, lo que puede afectar la experiencia del usuario.

  • Dispositivos de gama baja frente a dispositivos de alta gama

    Lo que tarda menos de un segundo en un iPhone nuevo, podría tardar 30 segundos en un teléfono Android de gama baja. Realiza pruebas con dispositivos físicos típicos de tus usuarios.

  • Compensaciones de seguridad

    Una menor complejidad podría reducir la seguridad contra ataques automatizados, pero puede mejorar la accesibilidad para los usuarios.

Prácticas recomendadas

  • Complejidad dinámica

    Implementa un sistema dinámico que adapte la complejidad en función de la carga del servidor o del comportamiento del usuario, garantizando un equilibrio entre seguridad y usabilidad.

  • Pruebas y optimización

    Realiza pruebas exhaustivas para determinar un nivel de complejidad óptimo que prevenga el abuso sin sobrecargar excesivamente a los usuarios legítimos.