Mecanismo de Prueba de Trabajo
El mecanismo de prueba de trabajo está diseñado para prevenir el abuso automatizado y el spam al requerir que los visitantes del sitio web realicen una tarea computacional. Esta tarea implica encontrar un número específico determinado por el servidor y utilizar el hash SHA para la generación y verificación del desafío. El sistema emplea una sal aleatoria y un número secreto para crear un desafío que los usuarios deben resolver para enviar el formulario o acceder al sitio web.
Generación del desafío
-
Creación de una sal aleatoria
Un servidor genera una cadena aleatoria (sal) de longitud suficiente (generalmente al menos de 10 caracteres). Esta sal sirve como una entrada adicional para garantizar la singularidad y complejidad del desafío para cada usuario. -
Generación de un número secreto
El servidor genera un número secreto, un entero positivo, que permanece oculto para el cliente. Este número determina la complejidad del desafío. -
Computación del desafío
El servidor concatena la sal y el número secreto, creando una cadena única. Esta cadena concatenada se hash mediante el algoritmo SHA, produciendo un hash de tamaño fijo que representa el desafío. -
Creación de una firma del servidor
Se utiliza una clave HMAC para crear una firma basada en el desafío. Esta firma actúa como un mecanismo de verificación para la corrección de la solución enviada por el usuario.
En este mecanismo de prueba de trabajo, la tarea del cliente implica una computación iterativa para encontrar una solución coincidente con el desafío proporcionado por el servidor.
Tarea del cliente
La tarea del cliente implica iterar continuamente a través de números, combinarlos con la sal proporcionada y hacerles hash usando SHA hasta descubrir un número que, al ser hasheado con la sal, coincida con el desafío recibido del servidor. Este proceso iterativo requiere un esfuerzo computacional por parte del cliente para encontrar una solución que cumpla con los criterios establecidos por el servidor.
Al encontrar una solución coincidente, el cliente envía la solución junto con el desafío original de regreso al servidor para su validación. Si la solución enviada se alinea con el desafío original, según el proceso de verificación del servidor, el cliente obtiene acceso a los servicios del sitio web, demostrando que ha completado con éxito la tarea de prueba de trabajo.
-
Computación iterativa
- Comenzando desde cero, el cliente itera a través de números, incrementándolos secuencialmente.
- Para cada iteración, concatena la sal recibida del servidor con el número actual en prueba.
- Aplica el algoritmo de hash SHA a la cadena concatenada.
- Compara el hash resultante con el desafío recibido del servidor.
-
Solución coincidente
El cliente continúa este proceso iterativo hasta encontrar un número que, al combinarse con la sal proporcionada, produzca un hash SHA que coincida con el desafío proporcionado por el servidor.
Verificación de la solución
-
Validación del desafío
Utilizando la sal y el número recibidos del cliente, el servidor vuelve a calcular el desafío concatenando estos valores y aplicando el algoritmo de hash SHA. Luego compara este desafío calculado con el recibido del cliente para confirmar su igualdad. -
Validación de la firma
El servidor reconstruye la firma basada en el desafío y la clave HMAC. Compara esta firma reconstruida con la enviada por el usuario para autenticar la corrección de la solución. -
Verificación
La solicitud se considera verificada solo si ambas validaciones (desafío y firma) pasan. Si tiene éxito, el servidor concede acceso o procesa la solicitud del usuario; de lo contrario, deniega el acceso o trata la solicitud como potencialmente maliciosa.
Consulte la guía de integración del servidor para ejemplos y detalles de implementación.