Sres. foristas,
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:
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:
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.
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 [Seleccionar]
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 [Seleccionar]
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.