Modo de cifrado : un método para aplicar un cifrado de bloque (algoritmo) que le permite convertir una secuencia de bloques de datos abiertos en una secuencia de bloques de datos cifrados . En este caso, los datos de otro bloque se pueden usar para cifrar un bloque.
Por lo general, los modos de cifrado se utilizan para cambiar el proceso de cifrado, de modo que el resultado del cifrado de cada bloque sea único independientemente de los datos que se cifren y no permita sacar conclusiones sobre su estructura. Esto se debe principalmente al hecho de que los cifrados de bloque cifran los datos en bloques de un tamaño fijo y, por lo tanto, existe la posibilidad de fuga de información sobre partes repetidas de datos cifrados con la misma clave .
En 1981 se adoptó el estándar FIPS 81 . El estándar describió los primeros modos de cifrado de bloques: ECB, CBC, OFB y CFB. En 2001, el Instituto NIST (Instituto Nacional de Estándares y Tecnología de EE . UU. ) revisó la lista de modos y agregó una descripción del funcionamiento del cifrado de bloque AES en modo CTR ( SP800-38A ). En enero de 2010, NIST agregó una descripción del funcionamiento del cifrado AES en modo XTS (SP800-38E) al estándar.
El estándar no describe todos los modos, sino solo los modos aprobados por el instituto NIST . Por ejemplo, el modo CTS ( robo de texto cifrado ) no se describe en el estándar, pero se implementa en muchas bibliotecas criptográficas populares .
Los modos de cifrado están definidos por una serie de organizaciones reconocidas a nivel nacional e internacional. El más influyente de ellos es NIST .
A continuación se muestra una descripción de varios modos de cifrado que utilizan cifrados de bloque [1] .
En GOST 28147-89 , este modo se denomina modo de reemplazo simple .
Cifrado:
Deje que se dé un mensaje ( texto sin formato , secuencia de bits, datos).
Durante el cifrado, se realizan las siguientes acciones:
Descifrado:
es ejecutado por la función usando la misma tecla k :
Peculiaridades:
Desventajas del BCE:
Texto sin formato como imagen | Criptograma obtenido por cifrado en modo ECB. La imagen muestra características de la imagen original . | Criptograma obtenido por cifrado no ECB. La imagen es una secuencia pseudoaleatoria de píxeles. |
Ventajas del BCE:
Este modo se denomina modo de libro de códigos electrónico, ya que es posible crear un libro en el que cada bloque de texto plano se asociará con un bloque de texto cifrado. Sin embargo, crear un libro no es una tarea baladí. Si el tamaño del bloque es x bits, entonces el libro contendrá 2 x entradas y cada libro corresponderá a una clave.
Para cifrar un mensaje , se realizan los siguientes pasos [4] .
El descifrado lo realiza la función utilizando la misma clave k y el vector de inicialización IV :
Desventajas de CBC:
Ventajas de CBC:
Las deficiencias del modo CBC llevaron a la creación de un modo mejorado de propagar el encadenamiento de bloques de cifrado (Propagating Cipher Block Chaining, PCBC) [4] . Naturalmente, este modo es similar a CBC, excepto que el bloque de texto sin formato anterior y el bloque de texto cifrado anterior se someten a XOR con el bloque de texto sin formato actual antes o después del cifrado. [1] En
consecuencia, descifrado: ¿ dónde está el vector de inicialización
? El modo de cifrado RSVS se usa en la versión del protocolo Kerberos 4 y le permite detectar errores. Este modo de encriptación no es un estándar federal o internacional. El modo PCBC es una variante del modo CBC, que tiene una propiedad específica: un error de texto cifrado conduce a un descifrado incorrecto de todos los bloques posteriores. En consecuencia, esto significa que comprobar el componente básico al final del mensaje garantiza la integridad de todo el mensaje.
Por supuesto, este modo no está exento de fallas, ya que el intercambio de dos bloques de texto cifrado hace que los dos bloques correspondientes de texto sin formato se descifren incorrectamente, pero debido a XOR sobre el texto sin formato y el texto cifrado, se compensan más errores. Por lo tanto, si la verificación de integridad solo verifica los últimos bloques del texto descifrado, puede terminar con un mensaje parcialmente dañado. Aunque nadie ha explotado aún esta vulnerabilidad en Kerberos, la versión 5 ya ha cambiado al modo CBC.
Modo de retroalimentación de texto cifrado , modo de retroalimentación de cifrado , CFB [ 4 ] . Durante el cifrado, cada bloque de texto sin formato se agrega módulo 2 al bloque cifrado en el paso anterior.
La fuerza de CFB está determinada por la fuerza del cifrado utilizado. Los bloques de texto sin formato se "combinan" ("enmascaran") con bloques de texto cifrado . Si hay dos bloques idénticos de texto cifrado en modo CFB con retroalimentación de bloque completo, el resultado de, por ejemplo, el cifrado DES en el siguiente paso será el mismo. La velocidad de cifrado del modo CFB con retroalimentación de bloque completo es la misma que la del cifrado de bloque, y la posibilidad de paralelizar el procedimiento de cifrado es limitada [1] .
El modo de retroalimentación de salida (OFB) [4] convierte el cifrado de bloque en un cifrado de flujo síncrono: genera bloques clave que son el resultado de la suma de bloques de texto sin formato para obtener el texto cifrado. Al igual que con otros cifrados de flujo, la duplicación en el texto cifrado produce un bit duplicado en el texto sin formato en la misma ubicación. Esta propiedad permite que muchos códigos de corrección de errores funcionen normalmente incluso cuando se aplica la corrección de errores antes de la codificación.
Debido a la simetría de la operación de suma, el cifrado y el descifrado son similares:
Cada operación del cifrado del bloque de retroalimentación de salida depende de todas las anteriores y, por lo tanto, no se puede realizar en paralelo. Sin embargo, debido a que el texto sin formato o el texto cifrado solo se usa para la adición final, las operaciones de cifrado de bloques se pueden realizar con anticipación, lo que permite que el cifrado final se realice en paralelo con el texto sin formato.
No se recomienda la retroalimentación sobre la salida a k bits por razones de seguridad . El modo OFB tiene la siguiente ventaja sobre el modo CFB: los errores resultantes de la transmisión a través de un canal ruidoso no se "difunden" en todo el texto cifrado durante el descifrado, sino que se localizan dentro de un bloque. Sin embargo, el texto sin formato se puede cambiar mediante ciertas manipulaciones de los bloques de texto cifrado. A pesar de que el cifrado OFB no es paralelizable, la eficiencia del procedimiento se puede mejorar generando previamente una secuencia independiente de bloques. [una]
Este método también se denomina " modo de realimentación de salida ".
OFB también sugiere algunas mejoras con respecto al método de generación de una secuencia independiente de bloques: para obtener el siguiente bloque, se propone cifrar no con , sino con c , donde es un vector de inicialización.
El modo contador (CTR) [4] consiste en devolver a la entrada del algoritmo de cifrado de bloque correspondiente el valor de algún contador acumulado desde el inicio. El modo realiza un flujo de cifrado de bloques, es decir, genera una secuencia a la que se le aplica la operación XOR con el texto del mensaje. El texto sin formato y el bloque de texto cifrado tienen el mismo tamaño de bloque que el cifrado subyacente (como DES o AES ). [5] El modo CTR proporciona las siguientes operaciones.
Cifrado en modo CTRDescifrado en modo CTR
— valor del contador para el i-ésimo bloque.
Obviamente, los valores de contador deben ser únicos para cada bloque de texto sin formato codificado por un cifrado dado con una clave dada (de lo contrario, los bloques de texto cifrado cifrados con valores de contador idénticos están en riesgo). Este requisito se cumple en dos etapas.
Primero, los valores de contador para cifrar bloques dentro de un solo mensaje se obtienen del valor de contador inicial usando la función de incremento. Para garantizar la aleatoriedad, la cantidad de incremento puede depender del número de bloque. La función de incremento estándar se puede aplicar a todo el bloque contador oa una parte de él. Deje que el valor del contador represente un bloque de b bits y deje que la función de incremento se aplique a los m bits menos significativos.
es la función de concatenación ; - puntas inferiores ; - bits mayores . La unicidad de los valores del contador está asegurada para todos los bloques del mensaje, siempre que . Donde es el número de bloques en que se divide el mensaje.
En segundo lugar, los valores de contador iniciales para cada mensaje se eligen para garantizar que todos los valores de contador utilizados sean únicos. Esto se puede lograr de muchas maneras. Por ejemplo, si los mensajes se cifran secuencialmente, el resultado de aplicar la función de incremento al último valor del contador de mensajes anterior se puede utilizar como valor inicial del contador de este mensaje. Además, si la función de incremento usa m bits, el número total de bloques de texto no debe exceder . Otro enfoque propone dividir la representación binaria del contador en dos partes. A los dígitos más significativos se les asigna el nonce del mensaje, y a los dígitos restantes se les aplicará la función de incremento [6] .
En ausencia de retroalimentación, los algoritmos de cifrado y descifrado en modo CTR pueden ejecutarse en paralelo. Además, la gran cantidad de cálculos necesarios para cifrar los valores de los contadores se puede realizar con antelación, antes de que esté disponible el texto sin formato o el texto cifrado. Esto le da al modo CTR una ventaja sobre los modos CFB y OFB.
El modo Random Delta se utiliza para eliminar la previsibilidad de los cambios de contador en el modo CTR. Por ejemplo, esto es AES y el tamaño del bloque es de 16 bytes. Se toma un vector de inicialización aleatorio (por ejemplo, usando RdRand ). Sus 8 bytes inferiores se consideran delta aleatorio - Delta aleatorio (RD):
Inicial (vector de inicialización) se cifra y se envía al principio del mensaje. El bloque 0 se somete a XOR con la inicial antes del cifrado. Para cada bloque subsiguiente, el valor de Inicial aumenta por Delta (en representación de enteros sin signo - uint128 += uint64):
Esto elimina la previsibilidad de cambiar el contador en el modo CTR. Si delta siempre es uno, aquí delta es un número aleatorio, uno de 2^64. Al igual que Initial, es desconocido para el atacante.
Además, CTR es alarmante por la proximidad directa del texto sin formato al texto cifrado a través de XOR. En Random Delta, AES se encuentra entre el texto sin formato y el texto cifrado.
La apertura de la transmisión inicial también plantea interrogantes. Cuanto menos vea el atacante, mejor. Cuanto más lejos esté el texto sin formato del texto cifrado, mejor. Todos los modos conocidos (ECB, CBC, OFB, CTR) tienen algunas de estas deficiencias. En Random Delta, todo está detrás de AES, y Initial y Delta son variables aleatorias que el atacante desconoce.
Sin embargo, una de las desventajas de CTR en RD está presente. Conocer el formato de los datos transmitidos permite arrojar distorsiones aleatorias en ciertos lugares de estos datos, que pueden usarse para un ataque. Se puede agregar un hash a la secuencia de bloques para verificar la integridad:
Parece que Random Delta + Hash no tiene estos inconvenientes. Transferido al dominio público.
Un punto importante: debe haber muchas permutaciones AES entre el texto cerrado y el texto abierto, de lo contrario, se debilita la profundidad del cifrado. El texto cerrado en función del texto abierto, solo a través de XOR , anula la profundidad de cifrado que otorga AES (es decir, este es el método utilizado por los modos OFB, CFB, CTR).
La seguridad de Random Delta no es mucho menor que la del propio AES.
Si se requiere un mayor grado de aleatoriedad delta (por ejemplo, 128 bits), se puede generar por separado y enviar al principio del mensaje junto con Initial.
Al igual que CTR, Random Delta te permite cifrar/descifrar bloques en paralelo, con mayor rendimiento, sin esperar el cifrado/descifrado del bloque anterior (que es una necesidad en CBC, PCBC, CFB, OFB).
El modo "Random Delta 128" se distingue por el uso de Initial y Delta de 128 bits separados. Da más aleatoriedad a la sombra.
El modo Galois/Contador (contador con autenticación Galois ) es una modificación más segura del CTR que proporciona cifrado autenticado con datos adjuntos ( modo de cifrado de bloque AEAD ).
En criptografía , el vector de inicialización ( ) representa algún número, por regla general, debe ser aleatorio o pseudoaleatorio . La aleatoriedad es fundamental para lograr la seguridad semántica que, al reutilizar un esquema con la misma clave, evitará que un atacante deduzca relaciones entre segmentos de mensajes cifrados. Para cifrados de bloque, el uso se describe por modos de operación. La aleatorización también es necesaria para otras funciones primitivas, como las funciones hash universales y los códigos de autenticación de mensajes basados en ellas.
En modos de cifrado como CBC, CFB y OFB, el vector de inicialización ( ) se alimenta como entrada. Además, tanto el remitente como el destinatario al inicio de la sesión de comunicación deben tener el mismo . El valor no tiene que ser secreto en absoluto y bien puede transmitirse junto con el primer bloque del texto cifrado. Lo realmente importante es que en los modos CBC y CFB este valor debe ser impredecible, y en el modo OFB debe ser único [2] .
La imprevisibilidad en los modos CBC y CFB se puede lograr de varias maneras. Por ejemplo, es posible transformar el valor de algún contador (digamos, el contador de mensajes) por la misma función. O use el GPC para generar una secuencia pseudoaleatoria de la longitud deseada.
En el modo OFB, el vector de inicialización no tiene por qué ser impredecible, pero debe ser único para todas las sesiones de comunicación en las que se utiliza la misma clave de cifrado secreta en OFB . Esto se puede lograr, nuevamente usando un contador de mensajes. Si no se sigue este requisito, la confidencialidad del mensaje en modo OFB puede verse fácilmente comprometida. Una consecuencia de este requisito es que el siguiente vector de inicialización para el modo OFB no se puede generar aplicando una función con la misma clave .
Los modos ECB, CBC y PCBC funcionan con mensajes de texto sin formato que deben ser un múltiplo de la longitud de un bloque. Si no se cumple esta propiedad, entonces se debe agregar al mensaje el número requerido de bits, llamado relleno . Por ejemplo, el "método de relleno 2" ISO/IEC 9797-1 propone agregar un solo bit al final del mensaje y llenar el resto con ceros [7] .
Con este método, el destinatario del texto cifrado debe saber con certeza que el mensaje contiene un relleno. Esto se puede lograr adjuntando relleno a cada mensaje, incluso si no es necesario (en cuyo caso se envía como un bloque separado). Esta no es la única solución: puede, por ejemplo, enviar información sobre su longitud con cada mensaje [6] .
Para cualquier modo, un bit de error en un bloque de texto cifrado hace que el resultado de su descifrado se corrompa. En los modos CFB, OFB y CTR, el bit dañado tendrá la misma posición en el bloque descifrado que el bit de error en el bloque de texto cifrado y el error no se propagará a los bits restantes del bloque. En los modos ECB y CBC, cualquier bit del bloque puede corromperse, con una probabilidad de alrededor del 50 % (dependiendo de la fuerza del cifrado en sí). Al mismo tiempo, en los modos ECB, OFB y CTR, solo se corrompe el bloque resultante del descifrado del bloque corrupto. En el modo CBC, el siguiente bloque también está sujeto a un descifrado erróneo y los bits dañados se corresponderán con los bits de error en el texto cifrado del bloque anterior. En modo CFB, un bit de error en un segmento de texto cifrado afecta al siguiente b/s (redondeado al entero más cercano, b es la longitud del bloque, s es la longitud del segmento) de los segmentos, y cualquiera de los bits del texto descifrado puede ser erróneo [6] .
La presencia de bits de error en el vector de inicialización también es perjudicial para el proceso de descifrado. En modo OFB, el bit de error en IV golpea cada bloque de texto cifrado en el mensaje correspondiente. En el modo CFB, los errores en el vector de inicialización corromperán al menos el primer segmento del texto cifrado. Si el resto de los segmentos están dañados depende de la posición del bit más a la derecha en el IV (en el peor de los casos, b/s de los segmentos de texto cifrado se verán afectados). Cuando se usan los modos OFB y CFB, cualquier parte del texto cifrado corrupto puede corromperse como resultado de un bit de error en IV. En el modo CBC, solo se corromperán los bits del primer bloque de texto cifrado que se encuentren en las posiciones correspondientes a los bits de error en el vector de inicialización.
Para el modo CTR, un bit de error en el valor del contador hace que cualquier bit en el descifrado del texto cifrado correspondiente se corrompa con una probabilidad de alrededor del 50 %.
Además de la aparición de un bit de error en un bloque de texto cifrado, también puede ocurrir el borrado o la inserción de bits. Esto conduce a la violación de los límites de todos los bloques subsiguientes del texto cifrado, y los resultados del descifrado serán completamente erróneos hasta que se sincronicen los límites. Cuando se utiliza el modo CFB de 1 bit, la sincronización se restaura automáticamente en las posiciones b+1 después de que aparece o desaparece un bit. En otros modos, la recuperación de sincronización automática no ocurre [6] .
La elección del modo de cifrado depende de su objetivo.
Para texto sin formato, puede usar CBC, CFB u OFB. Para encriptar archivos, es mejor usar CBC: la seguridad aumenta considerablemente, cuando ocurren errores en los datos almacenados, la sincronización casi nunca falla. El modo específico depende de sus requisitos. En general, la elección del método de encriptación es una búsqueda de un compromiso entre eficiencia y rendimiento [8] .