Como he compartido antes en este hilo, Andrew Ross observó una correlación estadística entre el primer byte emitido y los tres primeros bytes de la clave. Y esta correlación se demostró teóricamente. Yo creo que la causa de esta correlación está, en el algoritmo KSA.
El algoritmo KSA del RC4 es el siguiente:
Código:
j = 0;
for i = 0 to 255
{
j = (j +S[i] + K[i]) mod 256;
intercambia S[i] and S[j];
}
El primer intercambio del algoritmo KSA es el siguiente:
Incialmente este algoritmo asigna a j valor 0 + S[0] +K[0] = K[0], ya que S[0] = 0 inicialmente. Entonces intercambian S[0] con S[K[0]], con lo cual S[0] pasa a tener valor K[0] y S[k[0]] pasa a tener valor cero.
Luego, puede ser, o no, que el valor se S[0] sea nuevamente intercambiado. Y como el algoritmo KSA no garantiza que el valor S[0] sea nuevamente intercambiado, podemos afirmar, que una vez ejecutado el algoritmo KSA, lo siguiente:
Probabilidad(S[0] = K[0]) > 1 / 256
Y, entonces, ello representa una debilidad (como corolario de los postulados de Golomb).
Esa debilidad es muy fácil de resolver: Por ejemplo, en lugar de inicializar la j con valor cero, inicializarla son un entero al azar entre cero y 255. Este valor debe ser pimienta (nunca sal), y, de esta manera, una vez ejecutado el algoritmo KSA, la Probabilidad(S[0] = K[0]) = 1 / 256, que es como debe de ser según los postulados de Golomb).
O sea, que propongo como algoritmo KSA del RC4, el siguiente:
Código:
j = entero al azar entre cero y 255;
for i = 0 to 255
{
j = (j + S[i] + K[i]) mod 256;
intercambia S[i] and S[j];
}
Yo creo que ese cambio es pequeño pero muy potente para eliminar las correlaciones entre los primeros bytes de la clave y los primeros bytes emitidos por el RC4. ¿Estáis de acuerdo con mi afirmación?
Gracias.