El la fuente que cita en realidad ya señala los problemas, aunque en realidad los considera como problemas pero como una ventaja. Para citar:
Pros y Contras
Los aspectos más destacados de esta solución son:
...
5. Más rápido de calcular: la verificación es varias multiplicaciones de números de 32 bits que es mucho más rápido que calcular un valor de hash .
El ataque que intentas prevenir es que el atacante puede adivinar correctamente siempre que el atacante sepa la información secreta almacenada en la base de datos.
En su ejemplo, tiene un secreto con 10 caracteres alfanuméricos en los que el atacante necesita adivinar un determinado 3 caracteres. Esto significa que se necesitan 36 suposiciones 3 cuando solo se permiten mayúsculas o 72 3 con caracteres en minúsculas. Dado que la comprobación es muy rápida, el atacante puede encontrar rápidamente estos valores (es decir, probablemente en tiempo real) si se conoce el secreto almacenado en la base de datos.
Si el atacante debe elegir más de 3 caracteres, se vuelve más difícil de hacer en tiempo real, pero puede ser precomputado fácilmente. Si se necesitan 5 de los 10 caracteres, es posible que las "máscaras" posibles para ingresar los caracteres sean 10 * 9 * 8 * 7 * 6 * (2 * 3 * 4 * 5) y que cada una tenga como máximo 36 5 (o 72 5 ) valores posibles, es decir, como máximo 10 * 9 * 8 * 7 * 6 / (5 * 4 * 3 * 2) * 72 5 Se deben hacer cálculos realmente rápidos. Suponiendo que se podrían realizar 10000 cálculos en un segundo, esto le tomaría al atacante un día si tuviera una red de bots de alrededor de 600 máquinas, lo que no es irrazonable. Y probablemente podría ser optimizado. Con 4 de cada 10 caracteres, solo se necesitarían 6 máquinas por día y con 3 de cada 10 una sola máquina podría hacer esto en menos de 1,5 horas.
Tenga en cuenta que estas estimaciones también asumen un secreto aleatorio. Si es un secreto elegido por el usuario, se pone mucho peor, ya que el espacio de búsqueda es más pequeño. Pero, si el usuario no puede elegir el secreto, entonces probablemente deba escribir el secreto aleatorio en algún lugar, rechazando su idea original de por qué se debe proporcionar este secreto adicional (es decir, evitar la navegación y almacenamiento en los administradores de contraseñas) en muchos casos.