2011-04-12 15 views
9

Entiendo que las cifras de bloque son más populares en software en comparación con los sistemas de cifrado 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?Cifrados de bloque y cifrado de flujo

Respuesta

30

A 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 (bruta) de one-time pad.

Un sistema de cifrado bloque 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 mode of operation (también llamada 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 cifrados 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 hace no se ajusta al modelo de un cifrado de flujo.

Con 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 para las cifras cifradas; algunos cifrados de flujo también usan un IV (por ejemplo, el del eSTREAM portfolio). Cuando un cifrado de flujo tiene un IV, reutilizar la clave no es problema, siempre que use una 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 usado 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 de CTR también necesitan un IV, que debe ser único para cada mensaje cifrado con una clave determinada. Las cifras de bloque no alivian la necesidad de eso.

+0

Guau, eso es más de lo que estaba buscando. Gracias por una respuesta tan detallada. Atentamente – Joeblackdev

1

Cifrado de bloque: El cifrado en bloque es como encriptar un mensaje bloque por bloque. Está rompiendo el bloque por bloque luego después del cifrado del mensaje.

cifrado de secuencia: cifrado de secuencia es como el cifrado de bit a bit del mensaje original.

Cuestiones relacionadas