El cifrado en bloque transforma un grupo de símbolos del texto en claro en un grupo de símbolos de texto cifrado. Así pues, el cifrado se realiza bloque a bloque del texto en claro.
Los símbolos del texto en claro se agrupan en bloques de texto en claro y la transformación criptográfica se aplica a cada uno de esos bloques utilizando la clave criptográfica correspondiente. El resultado del cifrado de un bloque de texto en claro es otro bloque de texto cifrado del mismo tamaño.
Es posible que el tamaño de texto claro no sea exactamente múltiplo de la longitud de bloque; en este caso, generalmente, se aplica un esquema de relleno para completar el último bloque. Sin embargo, dependiendo del modo de operación, este relleno podría no ser necesario. El principio de cifrado y descifrado en el que se basa el sistema de cifrado de bloque se muestra en la siguiente figura.
La mayoría de los cifrados de bloque se basan en aplicar iterativamente el concepto de cifrado producto. Estos algoritmos realizan el cifrado en múltiples rondas o iteraciones, repitiendo en cada una de ellas una serie de operaciones sobre los datos y utilizando una subclave distinta, que deriva de la clave original. Las operaciones aplicadas en cada ronda normalmente comprenden: sustitución, permutación y mezcla con la clave. Estos algoritmos se conocen como redes de sustitución de permutación (SPN) y cifrados de Feistel. Las operaciones de sustitución constituyen la única operación no lineal en la mayoría de estos sistemas de cifrado; por ello se deben diseñar con mucho cuidado para conseguir protección contra ataques de criptoanálisis.
El descifrado se realiza de la misma manera. Esta transformación se aplica sobre el bloque de texto cifrado utilizando la misma clave k (en el caso de algoritmos de clave simétrica) que se utilizó en el proceso de cifrado. El resultado de este proceso es el bloque de texto en claro.
Típicamente, el tamaño del bloque de texto en claro es 64 o 128 bits y el bloque de texto cifrado es el mismo tamaño.
Las ventajas del cifrado en bloque son:
Los algoritmos de cifrado en bloque más extendidos son:
No se recomienda utilizar la misma clave secreta para cifrar bloques idénticos de texto en claro. Si se utiliza la misma clave para un número de bloques idénticos de texto en claro, el resultado es un número de bloques de texto cifrado idénticos. Hay maneras de encadenar y mezclar bloques de texto claro con bloques de texto cifrado que permiten evitar ataques. Estos métodos se denominan modos de operación en cifrado en bloque.
El cifrado en bloque se puede utilizar en distintas modalidades, con diferentes propiedades de confidencialidad y de recuperación ante situaciones de error. Estos modos se aplican a casi todos los sistemas de cifrado de bloque existentes actualmente. La elección del modo de cifrado afecta a la velocidad, a la seguridad contra los adversarios y a la propagación de errores.
Modo ECB: Electronic Code Book
Es el modo básico de cifrado en bloque, sin ninguna modificación. El mensaje se divide en bloques, y cada bloque de texto en claro se cifra por separado, independientemente de los otros. Por lo tanto, no hay interdependencia entre bloques. Este modo no se recomienda ya que su uso presenta algunos inconvenientes:
La información estructural del texto en claro queda expuesta
Es susceptible de un ataque de modificación de orden de bloques: los bloques del texto cifrado se pueden reordenar o repetir y ese reordenamiento o repetición de bloques puede cambiar semánticamente el mensaje.
Cualquier texto cifrado, cifrado con la misma clave, se puede utilizar como material de partida para un atacante.
Un ejemplo típico de debilidad del cifrado cuando se utiliza el modo ECB es cuando se cifra una imagen (por ejemplo, un archivo .bmp). Incluso un algoritmo de cifrado robusto, cuando utiliza el modo ECB no puede desdibujar eficientemente su contenido.
Modo CBC: Cipher Block Chaining
El modo Cipher Block Chaining (CBC) combina ("encadena") bloques de texto en claro con los bloques de texto cifrado anteriores. Se requiere un vector inicial (IV) para combinar con el primer bloque de texto en claro.
En el proceso de cifrado, se calcula una OR exclusiva (XOR) entre el IV y el primer bloque de texto en claro antes del cifrado. El valor obtenido es cifrado y el resultado obtenido es el primer bloque de texto cifrado. Para los bloques de texto cifrado posteriores, en lugar del IV se utiliza el bloque de texto cifrado anterior. Así pues, como consecuencia de la operación de encadenamiento, el bloque de texto cifrado cj depende del bloque de texto en claro pj y del bloque de texto cifrado anterior cj-1. Es fácil ver que esta dependencia equivale a decir que cj depende del bloque de texto actual y de todos los precedentes.
El uso de CBC resuelve los inconvenientes del modo ECB, pero presenta los siguientes dos inconvenientes
Modo CFB: Cipher Feedback
El modo cipher feedback (CFB) opera de modo que el algoritmo de cifrado en bloque actúa como si fuese una unidad de cifrado en flujo generando secuencias de claves que luego son operadas mediante la función XOR con el texto en claro para obtener el texto cifrado. Un parámetro importante en este modo de funcionamiento es s, un número entero tal que 1 ≤ s ≤ L, siendo L la longitud de bloque.
El primer bloque de entrada es el IV. Básicamente, el proceso de cifrado en modo CFB toma como entrada los L-s bits menos significativos de la entrada anterior y los concatena con los s bits del texto cifrado más reciente, cifra esta nueva entrada, y se aplica una función XOR entre los s bits más significativos de la salida del algoritmo con los s bits correspondientes del texto en claro, y así se va generando el texto cifrado. La siguiente figura ilustra este modo de funcionamiento
En el caso que s=1, CFB convierte el cifrado en bloque en un cifrado en flujo, cifrando bits aislados.
Respecto a la posibilidad de paralelizar este modo de operación, cabe decir que tiene las mismas limitaciones que el modo CBC; es decir, las operaciones de cifrado no se pueden realizar en paralelo, pero sí son aplicables al descifrado.
En cuanto a la propagación del error, un error en un solo bit durante la transmisión de cj afecta al bit correspondiente en pj, pero modifica de forma significativa pj+1.
Modo OFB: Output Feedback Mode
Igual que ocurre en el modo CFB, OFB utiliza el algoritmo de cifrado en bloque como un generador pseudoaleatorio, cuya salida se combina con el texto en claro mediante una función XOR para dar el texto cifrado. El modo OFB opera de la siguiente manera:
El primer bloque de entrada es el vector inicial (IV). El bloque de entrada correspondiente se cifra y los s bits más significativos de la salida de este cifrado se utilizan para dos funciones diferentes. Por un lado constituyen parte de la entrada del siguiente bloque, y por otra parte se combinan con los s bits correspondientes del texto en claro mediante una función OR exclusiva (XOR) para generar el texto cifrado. Por lo tanto, los bloques de salida sucesivos se producen a partir de la aplicación del algoritmo criptográfico a los bloques de salida anteriores, y el resultado se combina con el texto en claro mediante la función XOR para generar el texto cifrado.
La siguiente figura ilustra el proceso
Es fácil demostrar que cuando se utiliza este modo de operación, no se propagan los errores, un error simple en la transmisión de cj sólo afecta al bit correspondiente de pj.
Respecto CFB, la principal ventaja de OFB es:
Si se conoce el IV, es posible preprocesar los bloques de salida antes de conocer el texto en claro (o datos de texto cifrado durante el descifrado)
Y las desventajas son:
Ni el cifrado ni el descifrado pueden realizarse en paralelo, ya que cada bloque de entrada depende de los resultados de la función de cifrado anterior.
Un atacante activo puede realizar cambios controlados en el texto en claro ya que no hay propagación de errores.
Modo CTR: Counter (contador)
Este modo se basa en el cifrado mediante un algoritmo de cifrado en bloque de un conjunto de bloques de entrada llamado contadores. Se aplica la función XOR a la salida del algoritmo de cifrado y al texto en claro, obteniéndose el texto cifrado y viceversa. En general para un mensaje, dado el bloque inicial de contador, los bloques de contador sucesivos se derivan mediante la aplicación de una función de incremento. Por lo general, el contador se divide en dos secciones: número de mensajes y el número de bloques dentro del mensaje. Es esencial que contador nunca se repita para una clave dada. El modo CTR se ilustra en la figura siguiente.
Es fácil demostrar que este modo no se propaga errores; si un bloque queda modificado debido a un error de transmisión; sólo ese bloque se descifrará erróneamente.
Las principales ventajas de este modo son:
Tanto el cifrado como el descifrado CTR son altamente paralelizables; no hay vinculación entre etapas
Es posible el preprocesado: las funciones de cifrado se pueden aplicar antes de conocer el texto en claro (o del texto cifrado en el descifrado)
El principal inconveniente es:
Un atacante activo puede hacer cambios controlados sobre el texto cifrado.
Comentarios generales
El modo CBC es el más adecuado para el cifrado en general de ficheros o de paquetes. Cuando hay requisitos importantes de alta velocidad en la operación de cifrado de datos, CTR es la mejor opción. En el caso de que la propagación de errores no sea deseable porque el canal de transmisión introduce muchos errores, OFB es una buena opción. Y, en el caso de riesgo de pérdida de un bit o byte (por problemas de sincronismo entre emisor y receptor), CFB con una s=8, o s=1 es una buena opción.