Un cifrado de bloque es un tipo de cifrado simétrico [1] que opera con grupos de bits de una longitud fija, bloques cuyo tamaño característico varía entre 64 y 256 bits. Si el texto original (o su resto) es menor que el tamaño del bloque, se rellena antes del cifrado . De hecho, un cifrado de bloque es una sustitución en el alfabeto de bloques, que, en consecuencia, puede ser mono o polialfabético. [2] El cifrado de bloque es un componente importante de muchos protocolos criptográficos y se usa ampliamente para proteger los datos transmitidos a través de una red.
A diferencia de un bloque de cifrado , donde la longitud de la clave es igual a la longitud del mensaje, un cifrado de bloque puede cifrar uno o más mensajes con una sola clave con una longitud total mayor que la longitud de la clave. Transmitir una clave pequeña en comparación con el mensaje a través de un canal encriptado es una tarea mucho más simple y rápida que transmitir el mensaje en sí o una clave de la misma longitud, lo que hace posible su uso diario. Sin embargo, en este caso, el cifrado deja de ser indescifrable. Los cifrados de bloque se diferencian de los cifrados de flujo en que procesan los bits en grupos en lugar de en un flujo. Al mismo tiempo, los cifrados de bloque son más lentos que los cifrados de flujo. [3] Los sistemas simétricos tienen una ventaja sobre los asimétricos en la velocidad de encriptación, lo que les permite seguir siendo relevantes, a pesar del mecanismo de transmisión de clave más débil (el destinatario debe conocer la clave secreta que debe transmitirse a través de un canal encriptado ya establecido. Al mismo tiempo, tiempo, en cifrados asimétricos, la clave pública necesaria para el cifrado puede ser conocida por todos, y no es necesario compartir la clave de cifrado).
Las ventajas de los cifrados de bloques incluyen la similitud de los procedimientos de cifrado y descifrado , que, por regla general, difieren solo en el orden de las acciones. Esto simplifica la creación de dispositivos de cifrado, ya que permite el uso de los mismos bloques en las cadenas de cifrado y descifrado. La flexibilidad de los cifrados de bloque permite que se utilicen para construir otras primitivas criptográficas: un generador de secuencias pseudoaleatorias , un cifrado de flujo, imitaciones de inserción y hashes criptográficos . [cuatro]
El modelo de cifrado de bloques moderno se basa en la idea de cifrados de bloques iterativos propuestos en la publicación de Claude Shannon de 1949 " Teoría de la comunicación en sistemas secretos ". Este concepto le permite lograr un cierto nivel de seguridad al combinar operaciones de sustitución y permutación fáciles de realizar [ 5 ] .
Hasta la década de 1970, la criptografía era la suerte de los oficiales militares y de inteligencia, prácticamente no había publicaciones en la prensa abierta [6] . El pionero fue el cifrado " Lucifer ", desarrollado en 1970 por IBM y basado en la red SP . La idea del cifrado era utilizar combinaciones de operaciones simples y, por tanto, rápidamente calculadas tanto en hardware como en software. Sin embargo, el esquema resultó infructuoso: era demasiado engorroso, lo que conducía a una baja velocidad de cifrado en la implementación del software (alrededor de 8 kb/s) y en el hardware (97 kb/s).
Comenzaron a surgir preocupaciones sobre la estabilidad de este algoritmo. Sin embargo, los principios desarrollados durante la construcción de Lucifer (la red SP y la red Feistel , llamada así por uno de los desarrolladores) formaron la base para la construcción de cifrados de bloque.
En 1973, el Instituto Nacional de Estándares y Tecnología ( NIST ) anunció un concurso para desarrollar un estándar de cifrado de datos, cuyo ganador en 1974 fue el cifrado DES (Estándar de cifrado de datos), que es, de hecho, una versión mejorada de Lucifer. . La publicación del cifrado en 1977 fue fundamental para la comprensión pública del modelo de cifrado de bloques moderno. Al mismo tiempo, dio lugar al desarrollo de ataques criptoanalíticos .
Tras ser aprobado por el American National Standards Institute en 1981, el algoritmo fue utilizado en el sector civil durante mucho tiempo e incluso llegó más allá de Estados Unidos . Sin embargo, el cifrado tenía un inconveniente importante: una longitud de clave pequeña, lo que dio lugar a muchos ataques asociados con la enumeración paralela y la posibilidad cercana de su implementación. La falta de protección adecuada contra los ataques de cifrado DES ha dado lugar a muchos algoritmos que son una versión más compleja de DES ( 3DES ) y esquemas completamente diferentes ( NewDES , FEAL , IDEA ).
1997 fue el comienzo del programa de adopción AES (Advanced Encryption Standard). El concurso constaba de tres etapas, cuyo ganador final fue el algoritmo RIJNDAEL desarrollado por los belgas J. Daemen y V. Rijmen. AES, al igual que sus predecesores, también se construye utilizando la red SP.
Hoy en día, hay muchos ataques que el cifrado en bloque tiene que resistir, empezando por el ataque de fuerza bruta como el más trivial. [7]
Un cifrado de bloque consta de dos algoritmos emparejados: cifrado y descifrado . [8] Ambos algoritmos se pueden representar como funciones. La función de encriptación E ( eng. encriptación - encriptación) recibe un bloque de datos M ( ing. mensaje - mensaje) con un tamaño de n bits y una clave K ( ing. clave - clave) con un tamaño de k bits como entrada y da un bloque de texto cifrado C ( eng. cipher ) en la salida - cipher) con un tamaño de n bits:
Para cualquier clave K , E K es una función biyectiva ( permutación ) en el conjunto de bloques de n bits. La función de descifrado D ( ing. descifrado - descifrado) recibe el texto cifrado C, la clave K como entrada y da M en la salida:
siendo, al mismo tiempo, la función inversa de la encriptación:
yTenga en cuenta que la clave necesaria para el cifrado y el descifrado es la misma, como consecuencia de la simetría del cifrado de bloque.
“Diseñar un cifrado de bloque no es difícil. La dificultad radica en diseñar un cifrado de bloques que no solo sea seguro, sino también fácil de describir y fácil de implementar”.
Bruce Schneier , criptógrafo y especialista en seguridad informática .
Los pioneros en el desarrollo de cifrados de bloques fueron empleados de IBM cuando trabajaban en el cifrado " Lucifer ". [9] Ellos diseñaron los primeros cimientos que se utilizaron en el desarrollo de circuitos posteriores. Al mismo tiempo, se debe tener en cuenta que el nuevo cifrado no solo debe ser resistente a todos los tipos de ataques conocidos, sino también bastante simple de implementar.
La mayoría de los cifrados de bloque son iterativos. Esto significa que el cifrado dado convierte bloques de texto sin formato de longitud constante en bloques de texto cifrado de la misma longitud por medio de funciones reversibles cíclicas conocidas como funciones de ronda. [10] Esto se debe a la simplicidad y velocidad de ejecución de las implementaciones de software y hardware. Por lo general, las funciones redondas usan diferentes claves derivadas de la clave original:
,donde C i es el valor del bloque después de la i-ésima ronda, C 0 = M es el texto sin formato, K i es la clave utilizada en la i-ésima ronda y obtenida de la clave original K.
El tamaño de bloque n es un parámetro de cifrado de bloque fijo, generalmente de 64 o 128 bits, aunque algunos cifrados permiten varios valores diferentes. Una longitud de 64 bits fue aceptable hasta mediados de la década de 1990, cuando se utilizaron 128 bits, que corresponde aproximadamente al tamaño de una palabra de máquina y permite una implementación eficiente en las plataformas informáticas más comunes. Varios esquemas de cifrado le permiten cifrar texto sin formato de longitud arbitraria. Cada uno tiene ciertas características: probabilidad de error, facilidad de acceso, vulnerabilidad a los ataques. A partir de 2006, una clave de 80 bits pudo evitar un ataque de fuerza bruta .
SP-network (Red de sustitución-permutación en inglés , SPN ) es uno de los tipos más importantes de cifrados de bloques iterativos. Un cifrado basado en la red SP recibe un bloque y una clave como entrada y realiza varias rondas alternas, que consisten en etapas alternas de sustitución y etapas de permutación [ 11 ] . Un S-box es suficiente para lograr la seguridad, pero dicho bloque requerirá una gran cantidad de memoria. Por lo tanto, se utilizan pequeñas cajas S mezcladas con cajas P [6] . La etapa de sustitución no lineal mezcla los bits clave con los bits de texto sin formato, creando vergüenza para Shannon La etapa de permutación lineal distribuye la redundancia a lo largo de la estructura de datos, dando lugar a la difusión [12] [13] .
El S -box reemplaza un pequeño bloque de bits de entrada con otro bloque de bits de salida. Esta sustitución debe ser uno a uno para garantizar la reversibilidad. El propósito del S-box es una transformación no lineal, lo que evita que se realice un criptoanálisis lineal . Una de las propiedades de la S-box es el efecto de avalancha , es decir, un cambio en un bit en la entrada provoca un cambio en todos los bits en la salida [14] .
P-block - permutación de todos los bits: el bloque recibe la salida del S-box como entrada, intercambia todos los bits y envía el resultado al S-box de la siguiente ronda. Una cualidad importante de una caja P es la capacidad de distribuir la salida de una caja S a las entradas de cajas S tan grandes como sea posible.
Para cada ronda , se utiliza una clave diferente , obtenida de la original . Tal llave se llama llave redonda. Se puede obtener dividiendo la clave original en partes iguales, o mediante algún tipo de transformación de la clave completa.
Una red de Feistel es un método general para transformar una función arbitraria F en una permutación en un conjunto de bloques. [15] Consiste en celdas que se repiten cíclicamente: rondas. Dentro de cada ronda, el bloque de texto sin formato se divide en dos partes iguales. Función redonda
toma una mitad (a la izquierda de la figura), la transforma usando la clave K i y combina el resultado con la segunda mitad usando la operación OR exclusiva (XOR). Esta clave viene dada por la clave inicial K y es diferente para cada ronda. Luego, las mitades se intercambian (de lo contrario, solo se convertirá la mitad del bloque) y se alimentan a la siguiente ronda. La transformación de la red de Feistel es una operación reversible.
Hay ciertos requisitos para la función F :
Si no se cumple el primer requisito, la red estará sujeta a ataques diferenciales (mensajes similares tendrán cifrados similares). En el segundo caso, las acciones del cifrado son lineales, y la resolución de un sistema de ecuaciones lineales es suficiente para romper [3] .
Este diseño tiene una ventaja tangible: los procedimientos de cifrado/descifrado son los mismos, solo se utilizan los derivados de las claves originales en orden inverso. Esto significa que se pueden usar los mismos bloques tanto para el cifrado como para el descifrado, lo que sin duda simplifica la implementación del cifrado. La desventaja del esquema es que solo la mitad del bloque se procesa en cada ronda, lo que lleva a la necesidad de aumentar el número de rondas. [2]
Al construir el algoritmo, se tiene en cuenta la formación de un grupo , en el que los elementos son el conjunto de bloques de texto cifrado con todas las claves, y la operación del grupo es la composición de rondas de cifrado. Si un cifrado dado forma un grupo casi completo, no tiene sentido utilizar cifrado múltiple [6] .
Por sí mismo, un cifrado de bloque le permite cifrar solo bloques de datos individuales de una longitud predeterminada. Si la longitud del mensaje es menor que la longitud del bloque ( eng. blocklength ), entonces se rellena hasta la longitud deseada. Sin embargo, si la longitud del mensaje es mayor, es necesario dividirlo en bloques. Al mismo tiempo, hay varias formas de cifrar dichos mensajes, llamados modos de operación de cifrado en bloque.
El modo de operación más simple de un cifrado de bloque es el modo de libro de códigos electrónico o el modo de sustitución simple ( Eng. Electronic CodeBook, ECB ), donde todos los bloques de texto sin formato se cifran independientemente unos de otros. Sin embargo, cuando se usa este modo, las propiedades estadísticas de los datos abiertos se conservan parcialmente, ya que cada bloque de datos idéntico corresponde únicamente a un bloque de datos encriptados. Con una gran cantidad de datos (por ejemplo, video o sonido), esto puede generar fugas de información sobre su contenido y dar más espacio para el criptoanálisis .
Es posible eliminar las dependencias estadísticas en texto sin formato con la ayuda del archivo preliminar, pero no resuelve el problema por completo, ya que la información del servicio del archivador permanece en el archivo , lo que no siempre es aceptable.
Para superar estos problemas, se han desarrollado otros modos de operación [16] [17] , establecidos por el estándar internacional ISO/IEC 10116 [18] y definidos por lineamientos nacionales, como NIST 800-38A [19] y BSI TR- 02102 [20]
La idea general es utilizar un número aleatorio, a menudo denominado vector de inicialización (IV). En el popular modo Cipher Block Chaining ( CBC ), el IV debe ser aleatorio o pseudoaleatorio por seguridad. Una vez definido, se aplica XOR con el primer bloque de texto sin formato. El siguiente paso es cifrar el resultado y obtener el primer bloque de cifrado, que usamos como IV para el segundo bloque, y así sucesivamente. En el modo Cipher Feedback ( CFB ) , IV se cifra directamente, después de lo cual se agrega el módulo dos (XOR, OR exclusivo) con el primer bloque. El bloque de cifrado recibido se utiliza como IV para el cifrado adicional. El modo no tiene ventajas especiales sobre los demás. A diferencia de los modos anteriores, el modo de retroalimentación de salida ( OFB ) encripta el IV cíclicamente, formando una secuencia de claves agregadas a los bloques de mensajes. La ventaja del modo es la completa coincidencia de las operaciones de cifrado y descifrado. El modo de contador ( English Counter, CTR ) es similar a OFB, pero permite el cálculo paralelo del cifrado: IV se combina con el número de bloque sin uno y el resultado se cifra. El bloque resultante se agrega al bloque de mensaje correspondiente.
Tenga en cuenta que el vector de inicialización debe ser diferente en diferentes sesiones. De lo contrario, llegamos al problema del modo ECB. Es posible usar un número aleatorio, pero esto requiere un generador de números aleatorios razonablemente bueno. Por lo tanto, generalmente se establece un cierto número: una etiqueta conocida por ambas partes (por ejemplo, el número de sesión) y llamada nonce ( Número usado una vez ) . El secreto de este número por lo general no se requiere. IV adicional es el resultado del cifrado nonce. En el caso del modo contador, el nonce se usa para formar la clave redonda K i [3] :
donde i es el número redondo.Como se mencionó anteriormente, si la longitud del mensaje en sí, o el último bloque, es menor que la longitud del bloque, entonces debe rellenarse con . El simple relleno con cero bits no resuelve el problema, porque el receptor no podrá encontrar el final de la carga útil. Además, esta opción da lugar a ataques por parte del Oráculo de la adición [21] .
Por lo tanto, en la práctica, es aplicable la solución estandarizada como "Complement Method 2" ( Bit Completion ) en ISO/IEC 9797-1, agregando un 1 bit al final del mensaje y llenando el espacio restante con ceros [22] . En este caso, se ha probado la resistencia a este tipo de ataques [23] .
Como todos los cifrados cuyos algoritmos se conocen, los cifrados en bloque están sujetos a ataques criptográficos. El objetivo del ataque es desarrollar un algoritmo de craqueo que sea más eficiente que la búsqueda exhaustiva de todas las claves posibles. Si se encuentra tal solución, el ataque se considera exitoso. Al mismo tiempo, el cifrado se rompe si hay un ataque que permite romper durante el tiempo durante el cual la información sigue siendo relevante, y realizar dicho ataque es beneficioso para el atacante.
inglés Ataque de fuerza real . Debido a la característica de un cifrado de bloques como función de reversibilidad, su salida se vuelve distinguible de una verdadera secuencia aleatoria debido a la paradoja del cumpleaños . Esta característica conduce a una disminución de la seguridad del cifrado y la necesidad de tener en cuenta el tamaño del bloque. Por lo tanto, existe una compensación entre bloques grandes que reducen el rendimiento del cifrado y bloques pequeños poco fiables [24] .
El tamaño de la clave juega un papel igualmente importante. El cifrado DES inicial se caracterizaba por un tamaño de clave de 56 bits que, como ha demostrado la práctica, claramente no es suficiente para una transferencia de datos fiable. Fue un ataque de fuerza bruta lo que primero rompió DES. Los algoritmos más modernos, como AES y GOST 28147-89 , tienen un tamaño de clave de 128 bits y 256 bits, respectivamente, lo que hace que estos ataques carezcan de sentido [25] .
inglés Criptoanálisis diferencial . En 1990, Eli Biham y Adi Shamir definieron la idea del criptoanálisis diferencial. Con este método, fue posible descifrar el cifrado DES . Los cifrados S-box constantes y los cifrados en modo libro electrónico codificado son susceptibles a un ataque similar . Este método trabaja con pares de textos cifrados para los que se conoce la diferencia entre los textos sin formato correspondientes y considera la evolución de estas diferencias. Junto con el lineal, es el más común en los ataques a un cifrado de bloque [6] .
inglés Criptoanálisis lineal . El criptoanálisis lineal es un método de ruptura de cifrado basado en la búsqueda de aproximaciones afines para que el algoritmo funcione. Desarrollado por el matemático japonés Mitsuru Matsui , quien fue el primero en utilizar esta técnica para atacar a DES y FEAL . El método se basa en aplicar la operación "OR exclusivo" (XOR) a los bloques de texto plano, texto cifrado y su resultado, lo que permite obtener el resultado del XORing de los bits clave. La estructura del bloque S tiene una fuerte influencia en la resistencia a los ataques de línea. Cuando se desarrolló el método, resultó que DES tenía debilidad por él, ya que nadie esperaba este tipo de ataques cuando se desarrolló [6] .
inglés Criptoanálisis intergal . El criptoanálisis integral es un tipo de ataque que es especialmente aplicable a los cifrados de bloque creados en la red SP. A diferencia del criptoanálisis diferencial, que utiliza un par de textos sin formato elegidos con una diferencia fija calculada mediante la operación XOR, el criptoanálisis integral utiliza conjuntos de textos sin formato en los que algunas partes se mantienen constantes mientras que otras varían entre los valores posibles. Tal conjunto necesariamente tiene una suma de módulo 2 (XOR) de 0, mientras que la suma del texto cifrado correspondiente contiene información sobre las operaciones del cifrado.
Además de los descritos anteriormente, existen otros tipos de ataques:
Cualquier cifrado nuevo debe demostrar resistencia a todos los tipos de ataques conocidos.
En la práctica, un cifrado de bloque se evalúa de acuerdo con una variedad de criterios [26] [27] :
El cifrado de Lucifer se considera generalmente como el primer cifrado de bloque. El algoritmo fue desarrollado por IBM en la década de 1970 para sus propias necesidades y se basa en el trabajo de Horst Feistel . La versión final fue adoptada como el estándar de procesamiento de información federal del gobierno de EE. UU .: FIPS PUB 46 Data Encryption Standard (DES) - estándar de cifrado de datos.
DES tiene un tamaño de bloque de 64 bits y una clave de 56 bits. Posteriormente, los bloques de 64 bits se aceptaron generalmente en la construcción del cifrado. La longitud de la clave dependía de varios factores, incluidas las restricciones gubernamentales, y como resultado se convirtió en un inconveniente obvio del algoritmo: no era suficiente para resistir los ataques de fuerza bruta. En 1993, Michael Wiener diseñó una máquina de un millón de dólares capaz de descifrar DES en 3,5 horas con fuerza bruta , y en 1998 se construyó una máquina capaz descifrar. Además, para las claves del algoritmo, hay una serie de valores que se consideran débiles [6] .
Existe una versión mejorada del algoritmo llamada Triple DES o 3DES. La velocidad del algoritmo se redujo tres veces, pero el sistema resultó ser mucho más resistente a la búsqueda exhaustiva debido a la longitud de la clave triplicada (168 bits y 112 bits secretos). Opcionalmente, puede elegir una clave doble (112 bits y 80 bits secretos). A partir de 2011, el sistema de tres claves conserva su seguridad, pero la versión de dos claves con seguridad de 80 bits ya no cumple con los requisitos modernos [28] .
GOST 28147-89, un estándar de cifrado ruso introducido en 1990, también es un estándar CIS. El cifrado se basa en una red Feistel de 32 rondas con una clave de 256 bits. En mayo de 2011, el criptoanalista Nicolás Courtois intentó un ataque que redujo el tiempo de craqueo en un factor de 28 (256) pero requirió 264 pares de texto sin formato/ texto cifrado , lo que no puede considerarse un ataque exitoso, ya que con esta cantidad de texto sin formato no hay necesidad para el conocimiento del texto cifrado. [29] [30]
Debido a la presencia de una gran cantidad de rondas, los ataques basados en criptoanálisis diferencial y lineal no son viables, ya que estos últimos son sensibles a la cantidad de rondas. Una búsqueda completa con tal longitud de clave no tiene ningún sentido. Para lograr el efecto avalancha , GOST requiere 8 rondas, lo que puede ser una debilidad del algoritmo, pero a las 32 rondas no importa tanto. La cuestión de la seguridad de GOST permanece abierta [6] .
Adoptado por NIST en 2001 después de 5 años de competencia pública, AES reemplazó a DES como el estándar federal de los Estados Unidos. El cifrado fue desarrollado por dos criptógrafos belgas , Daimen Yoan y Raymen Vincent . El tamaño del bloque es de 128 bits y los tamaños de las claves son de 128, 192 y 256 bits, aunque el tamaño del bloque se puede especificar mediante cualquier número de bits múltiplos de 32, con un valor mínimo de 128 bits. El tamaño máximo del bloque es de 256 bits, mientras que el tamaño de la clave no tiene límite teórico. Intel introdujo la compatibilidad con este cifrado en la familia de procesadores x86 .
El cifrado de bloques se puede utilizar para construir otras primitivas criptográficas :
![]() |
---|
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |