El principal problema con el error que está describiendo es que 0 aparece con más frecuencia en ciertos bits del flujo de salida. El ataque más común es que un atacante puede hacer que una víctima cree millones de conexiones a un servidor, mientras observa el tráfico de la red.
Para dar un ejemplo, cambiemos 'bit' a 'byte', aumente las posibilidades y veamos qué sucede.
Digamos:
- Tengo una cookie secreta con el valor 'a';
- Tengo algunos códigos de secuencia de kick-ass que generan bytes aleatorios;
- un atacante puede obligarme a realizar millones de conexiones a un servidor;
- en cada solicitud, el primer carácter de mi texto sin formato es mi cookie ('a') seguida de algún otro texto sin formato;
- el cifrado es un xor de texto plano con los bytes generados a partir del flujo (como con RC4);
- ese atacante puede monitorear el tráfico de mi red.
Con cada nueva conexión que establezco al servidor, se genera una nueva secuencia aleatoria. Esto significa que mi cookie ('a') será xorada con un byte aleatorio cada vez. Debido a que esto sucede de manera uniforme y aleatoria, nuestro atacante no puede deducir información acerca de la cookie, ya que la probabilidad de 'a' x cualquier carácter es 1/256.
Ahora introduzcamos una falla en nuestro cifrado de flujo. Para el primer byte, tiene una tendencia a generar 'b' con un 10% de probabilidad, y tiene un 90% de probabilidad de generar cualquier otro carácter. Ahora, si el atacante me hace crear 10 conexiones al servidor, existe una probabilidad de 1/10 de que 'b' xor 'a' aparezca como el primer byte del texto cifrado, en lugar del 1/256 anterior. Entonces, después de 100 conexiones, 'b' xor 'a' debería haber aparecido unas 10 veces, etc. etc.
Tenga en cuenta que también hay otros tipos de ataques en RC4. El resumen de los ataques en Wikipedia es realmente muy bueno:
enlace