Thomas Pornin (el otro oso) publicó una excelente explicación de cómo los modos de cifrado afectan este aspecto de su cifrado . La respuesta corta es que si usa la salida del bloque anterior para establecer el estado para el siguiente bloque, corre el riesgo de repetirse.
Y en el modo OFB en particular, entras en un bucle cuando el patrón se repite. Esto podría ser un bucle muy cerrado, o existe la posibilidad de que el bucle no se repita hasta que se exploren todos los valores posibles. El tamaño promedio del bucle es de N / 2 bits. Específicamente, con 2 N el total de estados posibles, en promedio, pasará por 2 N / 2 de esos estados antes de repetir. Debido a que su contador de estado es típicamente del mismo tamaño que su bloque, luego con un tamaño de bloque de 128 bits, en el promedio, pasará por 2 bloques 64 (no bits, no bytes) antes de repetir.
Por el contrario, la operación "modo contador" ("CTR") utiliza un contador simple como estado de cifrado. Esto significa que tienes la garantía de recorrer todo el espacio posible antes de repetir. Entonces, si su estado es de 128 bits, entonces pasará por los 2 estados 128 antes de repetir.
Vale la pena señalar que un espacio cuyo tamaño es efectivamente infinito. Eso es aproximadamente 5,000,000,000,000,000,000,000,000,000,000,000,000 bytes antes de que tenga que cambiar las claves. Y eso es con un bloque de 128 bits; con un bloque de 256 bits, doblas la cantidad de ceros.
El modo
CBC (probablemente el más común) usa la salida de un bloque de cifrado dado para establecer el estado para el siguiente bloque, lo que significa que el estado está muy afectado por el contenido del bloque anterior encriptado . Esto significa que la presencia y el tamaño de los ciclos (si los hubiera) serían determinados en parte por el texto simple cifrado. Esto hace que las matemáticas sean un poco menos exactas, pero no debería probar el rendimiento peor que con el modo OFB.
TL; DR: usa el modo CTR y no te molestes en cambiar las teclas.