Un año para llevar WebAssembly a Anubis: cómo y por qué

Fuentes: It took a year to ship WebAssembly in Anubis

Anubis, la herramienta de código abierto que protege sitios web frente a raspadores automatizados mediante pruebas de trabajo, incorporará en su próxima versión comprobaciones de prueba de trabajo basadas en WebAssembly. El desarrollador principal, Xe Iaso, explica que el cambio sustituye la función hash anterior por argon2id, un algoritmo memory-hard, con el objetivo de equilibrar la carga en teléfonos móviles y dificultar la creación de solvers optimizados, como los basados en CUDA.

El artículo detalla por qué se eligió WebAssembly: permite ejecutar el mismo binario en cliente y servidor, eliminando la necesidad de mantener implementaciones paralelas en JavaScript y Go, y abre la puerta a la síntesis de programas por cliente. Además, el autor reescribió el módulo de pruebas en Rust con el objetivo no-std, aprovechando que genera binarios WebAssembly pequeños y rápidos. También se aprovecha la migración para corregir un error histórico de escalado: la dificultad se medía en nibbles en lugar de en bits, lo que hacía que cada incremento multiplicara el coste por 1024.

El proceso ha durado un año, cientos de commits, cinco generaciones de pull requests y obligó a reescribir parte de Anubis como cargador de plugins. El desarrollador documenta las dificultades de compatibilidad con navegadores antiguos (Chrome 75 como mínimo, Chrome 66 como referencia de seguridad), el primer bug de compilador de su carrera y los límites de memoria del equipo durante las pruebas. El resultado es un sistema más equitativo para usuarios móviles y más resistente frente a intentos de automatización masiva.