Técnicamente, este retraso deliberado es para prevenir ataques como el "ataque de linealización" (hay otros ataques y razones también) .
Para ilustrar el ataque, considere un programa (sin este retraso deliberado), que verifica una serie introducida para ver si coincide con la serie correcta, que en este caso resulta ser " xyba " . Para mayor eficiencia, el programador decidió verificar un carácter a la vez y salir tan pronto como se encuentre un carácter incorrecto, antes de comenzar, también se verifican las longitudes.
La longitud de serie correcta tardará más en procesarse que una longitud de serie incorrecta. Aún mejor (para el atacante), un número de serie que tiene el primer carácter correcto tomará más tiempo que cualquiera que tenga un primer carácter incorrecto. Los pasos sucesivos en el tiempo de espera se deben a que cada vez que hay un bucle más, se debe realizar una comparación con la entrada correcta.
- Entonces, el atacante puede seleccionar una cadena de cuatro caracteres y que la cadena que comienza con x toma más tiempo. (por conjetura)
- El atacante puede entonces fijar el carácter como x y variar el segundo carácter, en cuyo caso encontrará que y es el que más tarda.
- El atacante puede entonces fijar los dos primeros caracteres como xy y variar el tercer carácter, en cuyo caso encontrará que b el que más tarda.
- El atacante puede entonces fijar los primeros tres caracteres como xyb y variar el cuarto carácter, en cuyo caso encontrarán que a tarda más.
Por lo tanto, los atacantes pueden recuperar la serie un carácter a la vez.
Linearization.java.
Linearization.docx, salida de muestra
El número de serie tiene cuatro caracteres y cada carácter tiene 128 valores posibles. Entonces hay 128 4 = 2 28 = 268,435,456 posibles seriales . Si el atacante debe adivinar al azar números de serie completos, adivinaría el número de serie en aproximadamente
2 27 = 134,217,728 intentos, lo cual es una enorme cantidad de trabajo . Por otro lado, al usar el ataque de linealización anterior, se requiere un promedio de solo 128/2 = 64 conjeturas para cada letra, para un trabajo total esperado de aproximadamente 4 * 64 = 2 8 = 256 conjeturas,
que es una cantidad trivial de trabajo.
Gran parte de las artes marciales escritas están adaptadas de esto (tomado de "Seguridad de la información: principios y práctica" de Mark Stamp). Además, los cálculos anteriores no tienen en cuenta la cantidad de conjeturas necesarias para determinar la longitud de serie correcta.