encryption - cipher - Cifrado de bloque y Cifrado de flujo
cipher block chaining (2)
Entiendo que las cifras de bloque son más populares en software en comparación con las cifras de flujo que generalmente se basan en hardware. Sin embargo, ¿por qué no se puede reutilizar una clave en los sistemas de cifrado de flujo? ¿Es por los patrones que pueden formarse?
Un cifrado de flujo es un sistema de cifrado que funciona en una secuencia determinada de bits de entrada. La mayoría de los sistemas de cifrado de flujo funcionan generando a partir de la clave una larga secuencia de bits de aspecto aleatorio, que luego se combinan (por medio de un bit XOR) con los datos para encriptar. Esta es una emulación (cruda) de un pad de una sola vez .
Un cifrado de bloques es un elemento criptográfico genérico que funciona sobre "bloques" que son secuencias de bits con una longitud fija (por ejemplo, 128 bits para AES ). El cifrado de bloque es una permutación de los bloques; la tecla selecciona de qué permutación estamos hablando. Un cifrado de bloque por sí solo no puede procesar un mensaje largo arbitrario; el cifrado de bloque y los datos se deben usar dentro de una construcción elaborada llamada modo de operación (también denominado a menudo "modo de encadenamiento").
Hay un modo de encadenamiento para cifrados de bloque llamado "CTR" como "modo contador": en este modo, el cifrado de bloque se utiliza para encriptar valores sucesivos de un contador (el contador tiene el tamaño de un bloque). Los bloques encriptados resultantes se concatenan, lo que da como resultado una secuencia de bits arbitrariamente larga que depende solo de la clave. Basta entonces con XOR esa secuencia con los datos para encriptar. En otras palabras, el modo CTR convierte un cifrado de bloque en un cifrado de flujo. Otro modo de encadenamiento popular es CBC, que no se ajusta al modelo de cifrado de flujo.
Con los sistemas de cifrado de flujo, lo que debe evitarse a toda costa es reutilizar la misma secuencia de bits dependiente de la clave para dos mensajes distintos; esto produciría el infame "pad de dos tiempos" que se puede romper con bastante facilidad (mediante la explotación de redundancias en los dos mensajes cifrados). Con un cifrado de bloque en modo CTR, esto se traduce en la reutilización de los mismos valores de contador. Esta es la razón por la cual el modo CTR requiere un valor inicial aleatorio (IV) que es el valor del contador con el que comienza el cifrado. Al elegir una nueva IV aleatoria, con bloques suficientemente grandes, se evita con muy alta probabilidad cualquier superposición en las secuencias de valores de contador que utilice.
El concepto de IV no es específico de las cifras cifradas; algunos cifrados de flujo también usan un IV (por ejemplo, el que está en la cartera eSTREAM ). Cuando un cifrado de flujo tiene un IV, la reutilización de la clave no es un problema, siempre que use IV adecuada (es decir, IV generada con un RNG criptográficamente fuerte en el espacio completo de IV posible, con probabilidad uniforme). Sin embargo, algunos otros sistemas de cifrado de flujo no tienen un IV, en particular el ampliamente utilizado RC4 . Reutilizar la misma clave significaría reutilizar la misma secuencia exacta de bits generados, y eso es malo.
Tenga en cuenta que algunos modos de encadenamiento distintos del CTR también necesitan un IV, que debe ser exclusivo para cada mensaje cifrado con una clave determinada. Las cifras de bloque no alivian la necesidad de eso.
Cifrado de bloque : el cifrado de bloque es como encriptar un mensaje bloque por bloque. Está rompiendo el bloque por bloque luego después del cifrado del mensaje.
Codificación de flujo: el cifrado de flujo es como un cifrado bit a bit del mensaje original.