# Cifrado por bloques

En criptografía, una unidad de cifrado por bloques (en inglés: block cipher) es una unidad de cifrado de clave simétrica que opera en grupos de bits de longitud fija, llamados bloques, aplicándoles una transformación invariante. Cuando realiza cifrado, una unidad de cifrado por bloques toma un bloque de texto plano o claro como entrada y produce un bloque de igual tamaño de texto cifrado. La transformación exacta es controlada utilizando una segunda entrada — la clave secreta. El descifrado es similar: se ingresan bloques de texto cifrado y se producen bloques de texto plano.
Para cifrar mensajes más largos que el tamaño del bloque, se utiliza un modo de operación.
Las unidades de cifrado por bloques se diferencian de las unidades de flujo de cifrado en que un flujo de cifrado trabaja sobre dígitos individuales, uno después del otro, y la transformación varía durante el proceso de cifrado. La diferencia entre los dos tipos de unidades es algo difusa, dado que una unidad de cifrado por bloques puede ser operada en un modo que permite utilizarla como una unidad de flujo de cifrado, donde en lugar de dígitos se opera con bloques.

## Ejemplos

Veamos algunos ejemplos de cifrados por bloque:
* Data Encryption Standard, conocido por sus siglas DES fue un diseño de unidad de cifrado por bloques de gran influencia. Fue desarrollado y publicado por IBM y publicado como estándar en 1977.
* Advanced Encryption Standard, conocido por sus siglas AES, es un sucesor de DES, adoptado en 2001.
* Cifrado afín por bloques
* International Data Encryption Algorithm (IDEA)
* RC2
* RC5
* KHUFU
* KHAFRE
* GOST
* SAFER
* Blowfish
* Akelarre
* FEAL
* Skipjack
* Triple DES

## Esquema de relleno

El esquema de relleno de cifrado por bloques resuelve el hecho de que el tamaño del mensaje en claro no sea múltiplo del tamaño de bloque. El sistema de rellenado permite conseguir que el texto en claro "rellenado" sea múltiplo del tamaño del bloque. Por ejemplo podríamos rellenar con ceros al final, con ceros al principio, o repitiendo la última letra al final. El sistema de rellenado más usado es el establecido en el estándar... PKCS#5.

## Modos de operación

El algoritmo base de los cifradores en bloque transforman bloques de texto en claro y los convierten en bloques de texto cifrado. Sin embargo el algoritmo base puede estar influenciado de distintas formas por las aplicaciones del algoritmo a los bloques anteriores en la cadena de caracteres del texto en claro. A estas distintas formas de influencia se les llama modos de operación. Existen diferentes modos de operación que garantizan diversos grados de confidencialidad e integridad en los datos manejados.

### Electronic Code-Book (ECB)

El más sencillo es el modo electronic codebook (ECB), en el cual los mensajes se dividen en bloques y cada uno de ellos es cifrado por separado utilizando la misma clave K. La desventaja de este método es que a bloques de texto plano o claro idénticos les corresponden bloques idénticos de texto cifrado, de manera que se pueden reconocer estos patrones como guía para descubrir el texto en claro a partir del texto cifrado. De ahí que no sea recomendable para protocolos cifrados.

### Cipher-block chaining (CBC)

En el modo cipher-block chaining (CBC), a cada bloque de texto plano antes de ser cifrado se le aplica la operación XOR con el bloque cifrado anterior. De esta forma, cada bloque de texto cifrado depende de todo el texto en claro procesado hasta este punto. Para hacer cada mensaje único se utiliza asimismo un vector de inicialización.

### Cipher feedback (CFB) y output feedback (OFB)

Los modos cipher feedback (CFB) y output feedback (OFB) hacen que el cifrado en bloque opere como una unidad de flujo de cifrado: se generan bloques de flujo de claves, que son operados con XOR y el texto en claro para obtener el texto cifrado. Al igual que con otras unidades de flujo de cifrado, en OFB al intercambiar un bit en el texto cifrado produce texto cifrado con un bit intercambiado en el texto plano en la misma ubicación, en CFB un bit erróneo en el texto cifrado genera 1+64/m bloques de texto claro incorrectos (siendo m la longitud del flujo en el que se divide el bloque). Bueno para las actividades de seguridad y alta disponibilidad

### Counter (CTR)

Al igual que OFB, el modo contador convierte una unidad de cifrado por bloques en una unidad de flujo de cifrado. Genera el siguiente bloque en el flujo de claves cifrando valores sucesivos de un contador. El contador puede ser cualquier función sencilla que produzca una secuencia de números donde los resultados se repiten con muy baja frecuencia. Si bien la operación más usada es un contador, el modo CTR tiene características similares al OFB, pero permite también usar una propiedad de acceso aleatorio para el descifrado.

## Incremento de la seguridad

Para incrementar la seguridad de un cifrador por bloques se suelen usar técnicas que aumentan la clave modificando el diseño original del cifrador. Las dos principales técnicas, las cuales a veces se combinan, son:
* Cifrado múltiple. Consiste en cifrar el texto plano más de una vez (rondas de cifrado). Ejemplo de esta técnica aplicada al DES es el Triple DES. Si se hace doble cifrado el cifrador resultante es vulnerable a ataques meet in the middle
* key whitening. El key whitening consiste en realizar pasos que combinan datos con porciones de la clave (normalmente con operaciones XOR) antes o después de la rondas de cifrado. Ejemplo de uso de esta técnica aplicada al DES es el llamado DES-X.