Prueba de trabajo
Resumen
La prueba de trabajo (Proof of Work, PoW) es una técnica que encarece las peticiones masivas exigiendo al emisor de cada petición una cierta cantidad de cálculo. Es muy conocida por la minería de bitcoin, pero también se aplica contra el spam en servicios web. El cálculo se mantiene en un nivel que no supone una carga para una persona que envía 1 pregunta, mientras que, si un bot intenta muchos envíos, el cálculo necesario se acumula y el ataque deja de compensar.
Cómo funciona
El mecanismo básico de la PoW es que el servidor emite una cadena aleatoria llamada «reto» y el cliente busca un «nonce» que, junto con ese reto, cumpla una condición concreta. Por ejemplo, se fija la condición de que «el hash SHA-256 de reto + nonce empiece por N bits a cero».
Ajustando el valor de N (la dificultad), se puede controlar cuánto tarda el cálculo. La dificultad se ajusta para que en un solo envío de una persona apenas se note, y así se frena a los bots sin afectar mucho a la experiencia de usuario.
Diferencias con el CAPTCHA
El CAPTCHA es una técnica que distingue a las personas de los bots mediante una prueba visual (reconocer imágenes, escribir caracteres). La PoW impone un coste de cálculo. Como el CAPTCHA exige al usuario una acción explícita, le supone ese trabajo extra. En el móvil, seleccionar imágenes cuesta más, y puede hacer que el usuario abandone a mitad del envío.
La PoW se ejecuta automáticamente en segundo plano, así que no pide al usuario ninguna acción explícita. Sin embargo, como la PoW no juzga «si es una persona o un bot», sino que es una técnica para «hacer que las peticiones masivas no salgan a cuenta», tiene un efecto limitado contra el acoso manual de unas pocas personas. Por eso se diseña una defensa en varias capas, combinándola con honeypots y la limitación de frecuencia.