Tras la introducción de ayer y la descripción de la relación que existe entre la clave de cifrado maestra y los IVs de la cadena que conforma la entrada al algoritmo KSA, hoy continuaremos con el análisis del algoritmo KSA. El código de éste se puede observar a continuación.
KSA for i = 0 to 255 S[i] := i j := 0 for i = 0 to 255 j := (j + S[i] + Clave[i mod “tamañodelaclave"]) mod 256 Intercambia(S[i], S[j])
Vemos que principalmente esta compuesto por dos bucles; un primer bucle que inicializa un vector de enteros S, muy importate como posteriormente veremos, y una segunda iteración que tiene como objetivo desordenar el vector anterior en función de la clave maestra. En este caso el valor de la variable “tamañodelaclave“ será 5 para 64 bits y 16 para 128 bits. Realicemos una pequeña traza de las tres primeras iteraciones que nos ayudaran a comprender su funcionamiento. En el estado inicial, tras la inicialización del vector S, el valor de las variables es el siguiente:
Clave[] = (A+3, 255, X, Clave[3], …, Clave[A+3], …) S[] = (0, 1, 2, …, A+3, …, 255)
Partiendo de este estado vamos a aplicar las tres primeras iteraciones para observar el comportamiento del algoritmo.
Iteración 0 i = 0 j = 0 + 0 + Clave[0] = A+3 S[] = (A+3, 1, 2, ..., 0, ...) Iteración 1 i = 1 j = (A+3) + 1 + 255 = A+3 [Ya que se aplica “j mod 256"] S[] = (A+3, 0, 2, ..., 1, ...) Iteración 2 i = 2 j = (A+3) + 2 + X S[] = (A+3, 0, S[j], ..., 1, ...)