Teoría y desarrollo de la seguridad criptográfica, parte 2: modo de cifrado de bloques de cifrado simétrico

Tabla de contenido

1 bloque de contraseña

1.1 ¿Qué es un cifrado en bloque?

1.2 ¿Cuáles son los modos de los cifrados en bloque?

1.3 Agrupación de texto sin formato y agrupación de texto cifrado

2 Modo ECB (en desuso y no se proporciona ninguna interfaz en Golang)

3 modos CBC

3.1 Vector de inicialización

3.2 Modo de cifrado y descifrado

4 modos CFB

4.1 Modo de cifrado y descifrado

 4.2 Modo CFB y cifrado de flujo

Modo 5 OFB

5.1 Proceso de cifrado y descifrado

 5.2 Comparación entre el modo CFB y el modo OFB

Modo 6CTR

6.1 Proceso de cifrado y descifrado

 6.2 Algoritmo de generación de contador

6.3 Comparación entre el modo OFB y el modo CTR

6.4 Funciones del modo CTR

7 Resumen

Conocimiento previo: OR exclusivo bit a bit (XOR) 

1 bloque de contraseña

1.1 ¿Qué es un cifrado en bloque?

El algoritmo de cifrado de bloques solo puede cifrar bloques de longitud fija, pero la longitud del texto sin formato que necesitamos cifrar puede exceder la longitud del bloque del cifrado de bloques. En este caso, el algoritmo de cifrado de bloques debe iterarse para cifrar todos los bloques. texto plano largo. El método iterativo se denomina modo de cifrado en bloque .

DES y AES que presentamos en el artículo anterior son cifrados en bloque y solo pueden cifrar texto sin formato de longitud fija. Si necesita cifrar texto sin formato de cualquier longitud, debe iterar el cifrado de bloque. El método de iteración del cifrado de bloque se denomina "modo" del cifrado de bloque.

Hay muchos modos de cifrado en bloque y, si el modo no se elige adecuadamente, no se puede garantizar la confidencialidad. Por ejemplo, si se utiliza el modo ECB, algunos patrones en el texto sin formato se pueden identificar a través del texto cifrado.

Los principales modos de cifrado de bloques (ECB, CBC, CFB, OFB, CTR) y, finalmente, examinemos qué modo se debe utilizar.

1.2 ¿Cuáles son los modos de los cifrados en bloque?

En este punto, muchos lectores pueden decir: "Si el texto sin formato es muy largo, ¿no sería mejor dividirlo en varios grupos y luego cifrarlos uno por uno?" De hecho, no es tan simple. El método de dividir el texto sin formato en varios grupos y cifrarlos uno por uno se llama modo ECB, que tiene grandes debilidades (que se explican más adelante). Los programadores que no saben mucho sobre contraseñas suelen utilizar el modo ECB al escribir software de cifrado, pero hacerlo sin darse cuenta puede crear agujeros de seguridad, por lo que todos deben recordar no utilizar el modo ECB .

Hay muchos tipos de modos. Los principales modos de cifrado en bloque son los siguientes:

  • Modo ECB : modo Libro de códigos electrónico

  • Modo CBC : Modo de encadenamiento de bloques de cifrado (modo de encadenamiento de bloques de cifrado)

  • Modo CFB : modo Cipher FeedBack (modo de retroalimentación de texto cifrado)

  • Modo OFB : modo Output FeedBack (modo de retroalimentación de salida)

  • Modo CTR : Modo contador (modo contador)

1.3 Agrupación de texto sin formato y agrupación de texto cifrado

Antes de presentar patrones, aprendamos dos términos.

Bloque de texto sin formato: se refiere al texto sin formato utilizado como objeto de cifrado en el algoritmo de cifrado de bloques. La longitud del bloque de texto sin formato es igual a la longitud del bloque del algoritmo de cifrado de bloque.

Agrupación de texto cifrado: se refiere al texto cifrado generado después de cifrar grupos de texto sin formato mediante un algoritmo de cifrado en bloque.

 ** Para evitar la complejidad del diagrama, abreviaremos "cifrado con algoritmo de cifrado en bloque" como "cifrado" en el futuro y omitiremos la descripción de la clave. 

2 Modo ECB (en desuso y no se proporciona ninguna interfaz en Golang)

El modo ECB (libro de códigos electrónicos, libro de códigos electrónicos) es el modo de cifrado más simple: el mensaje de texto sin formato se divide en bloques (grupos) de tamaño fijo y cada bloque se cifra por separado. El cifrado y descifrado de cada bloque son independientes y se utiliza el mismo método para el cifrado, por lo que se pueden realizar cálculos paralelos. Sin embargo, una vez que un bloque se descifra con este método, todos los datos de texto plano se pueden descifrar utilizando el mismo método, lo que mejora la seguridad. .Relativamente pobre. Es adecuado para situaciones en las que hay menos datos. Los datos de texto sin formato deben completarse hasta un múltiplo integral del tamaño del bloque antes del cifrado.

 

 

Cuando se utiliza el cifrado en modo ECB, el mismo grupo de texto sin formato se convertirá en el mismo grupo de texto cifrado, es decir, podemos entenderlo como una enorme tabla de correspondencia de "grupo de texto sin formato -> grupo de texto cifrado", por lo que el modo ECB también es Llamado modo de libro de códigos electrónico. Cuando el contenido del último paquete de texto plano es menor que la longitud del paquete, es necesario rellenarlo con datos específicos para que el valor de la longitud de un paquete sea igual a la longitud del paquete .

El modo ECB es el más simple de todos los modos. En el modo ECB, existe una correspondencia uno a uno entre los grupos de texto sin formato y los grupos de texto cifrado, por lo que si hay varios grupos de texto sin formato idénticos en el texto sin formato, estos grupos de texto sin formato eventualmente se convertirán en el mismo grupo de texto cifrado. De esta forma, con solo observar el texto cifrado se puede saber qué combinaciones repetidas existen en el texto plano y se puede utilizar como pista para descifrar la contraseña, por lo que el modo ECB tiene ciertos riesgos.

3 modos CBC

En el modo CBC (Cipher Block Chaining) , cada grupo primero debe realizar una operación XOR con los datos cifrados del grupo anterior y luego cifrarse . De esta manera, cada bloque de texto cifrado depende de todos los bloques de texto sin formato anteriores al bloque. Para mantener cada mensaje único, el primer bloque de datos debe someterse a una operación XOR con el vector de inicialización IV antes de cifrarse . El modo CBC es el modo de cifrado más utilizado. Su principal desventaja es que el cifrado es continuo y no se puede procesar en paralelo y, al igual que ECB, los bloques de mensajes deben completarse hasta un múltiplo entero del tamaño del bloque.

3.1 Vector de inicialización

Al cifrar el primer grupo de texto sin formato, dado que no existe un "grupo de texto cifrado anterior", es necesario preparar de antemano una secuencia de bits de una longitud de bloque para reemplazar el "grupo de texto cifrado anterior ". Esta secuencia de bits se denomina vector de inicialización (vector de inicialización )

Generalmente abreviado como IV. En términos generales, cada vez que se cifra se genera aleatoriamente una secuencia de bits diferente como vector de inicialización.

El grupo de texto sin formato debe someterse a una operación XOR con el "grupo de texto cifrado anterior" antes del cifrado, por lo que incluso si los valores del grupo de texto sin formato 1 y 2 son iguales, los valores del grupo de texto cifrado 1 y 2 no son necesariamente iguales. De esta manera, las deficiencias del modo BCE no existen en el modo CBC.

3.2 Modo de cifrado y descifrado

Ilustración china:

Ilustración en inglés:

 

Si se separa el proceso de cifrado de un paquete, podemos comparar fácilmente la diferencia entre el modo ECB y el modo CBC. El modo ECB solo realiza cifrado, mientras que el modo CBC realiza un XOR antes del cifrado.

4 modos CFB

El nombre completo del modo CFB es modo Cipher FeedBack (modo de retroalimentación de texto cifrado). En modo CFB, el texto cifrado del grupo anterior se cifra y se aplica XOR con el texto sin formato del grupo actual para generar el texto cifrado del grupo actual .

La llamada retroalimentación aquí se refiere al retorno al terminal de entrada, es decir, el grupo de texto cifrado anterior se enviará de regreso al terminal de entrada del algoritmo criptográfico.

Los procesos de descifrado en modo CFB y cifrado en modo CBC son en realidad muy similares.

4.1 Modo de cifrado y descifrado

 

En los modos ECB y CBC, los grupos de texto sin formato se cifran mediante algoritmos criptográficos, sin embargo, en el modo CFB, los grupos de texto sin formato no se cifran directamente mediante algoritmos criptográficos.

Como se puede ver en la figura anterior, no existe ningún paso de "cifrado" entre el grupo de texto sin formato y el grupo de texto cifrado. En el modo CFB, solo hay un XOR entre los bloques de texto sin formato y de texto cifrado.

Si comparamos el modo CBC con el modo CFB, podemos ver la diferencia (como se muestra a continuación). En el modo CBC, hay dos pasos de XOR y algoritmo criptográfico entre la agrupación de texto sin formato y la agrupación de texto cifrado, mientras que en el modo CFB, solo hay XOR entre la agrupación de texto sin formato y la agrupación de texto cifrado.

 4.2 Modo CFB y cifrado de flujo

El modo CFB genera un "grupo de texto cifrado" aplicando XOR al "grupo de texto sin formato" con la "salida del algoritmo criptográfico".

En el modo CFB, la salida del algoritmo criptográfico equivale a una secuencia de bits aleatoria. Dado que la salida del algoritmo criptográfico es calculada y no verdaderamente aleatoria, el patrón CFB no puede ser teóricamente indescifrable.

La secuencia de bits generada por el algoritmo de cifrado en modo CFB se denomina flujo de claves . En el modo CFB, el algoritmo criptográfico es equivalente al generador de números pseudoaleatorios utilizado para generar el flujo de claves, y el vector de inicialización es equivalente a la "semilla" del generador de números pseudoaleatorios.

   En el modo CFB, los datos de texto sin formato se pueden cifrar bit a bit , por lo que podemos pensar en el modo CFB como una forma de utilizar cifrados en bloque para implementar cifrados de flujo .

Modo 5 OFB

El nombre completo del tipo OFB es modo de retroalimentación de salida (modo de retroalimentación de salida). En el modo OFB, la salida del algoritmo de cifrado se retroalimenta a la entrada del algoritmo de cifrado, es decir, la salida del algoritmo de cifrado de bloque anterior es la entrada del algoritmo de cifrado de bloque actual (imagen a continuación).

El modo OFB no cifra directamente el texto sin formato a través del algoritmo criptográfico, sino que genera el "grupo de texto cifrado" aplicando XOR al "grupo de texto sin formato" y la "salida del algoritmo criptográfico". En este sentido, el modo OFB y el modo CFB son parecido muy diferente.

5.1 Proceso de cifrado y descifrado

 5.2 Comparación entre el modo CFB y el modo OFB

La diferencia entre el modo OFB y el modo CFB está únicamente en la entrada del algoritmo criptográfico.

En la fórmula CFB, la entrada del algoritmo criptográfico es el grupo de texto cifrado anterior, es decir, el grupo de texto cifrado se retroalimenta al algoritmo de cifrado, de ahí el nombre "modo de retroalimentación de texto cifrado".

Por el contrario, en el modo OFB, la entrada del algoritmo criptográfico es la salida anterior del algoritmo criptográfico, es decir, la salida se retroalimenta al algoritmo criptográfico, de ahí el nombre "modo de retroalimentación de salida".

Si se extrae un grupo y se hace una comparación entre el modo CFB y el modo OFB. Es fácil ver la diferencia entre ellos (imagen a continuación).

Dado que los grupos de texto cifrado se retroalimentan en modo CFB, el cifrado debe realizarse en orden comenzando desde el primer grupo de texto sin formato, es decir, el grupo de texto sin formato 1 no se puede omitir y el grupo de texto sin formato 2 se debe cifrar primero.

Por el contrario, en el modo OFB, la secuencia de bits (flujo de claves) requerida para XOR se puede generar de antemano mediante un algoritmo criptográfico, independientemente de la agrupación de texto sin formato. Siempre que el flujo de claves requerido esté preparado de antemano, no es necesario utilizar un algoritmo criptográfico en el proceso real de generar texto cifrado a partir de texto sin formato. Simplemente haga XOR en el texto sin formato con el flujo de claves. En comparación con algoritmos criptográficos como AES, la operación XOR es muy rápida. Esto significa que el cifrado se puede completar rápidamente siempre que el flujo de claves se prepare con antelación. Desde otra perspectiva, las operaciones de generar el flujo de claves y realizar la operación XOR se pueden paralelizar.

Modo 6CTR

El nombre completo del modo CTR es modo contador (modo contador). El modo CTR es un cifrado de flujo que genera un flujo de claves cifrando un contador acumulado sucesivamente (imagen a continuación) .

En el modo CTR, cada grupo corresponde a un contador que se acumula sucesivamente y el flujo de claves se genera cifrando el contador. En otras palabras, el grupo de texto cifrado final se obtiene aplicando XOR a la secuencia de bits obtenida al cifrar el contador con el grupo de texto sin formato.

6.1 Proceso de cifrado y descifrado

 

 6.2 Algoritmo de generación de contador

Cada vez que se realiza el cifrado, se genera un valor diferente (nonce) como valor inicial del contador. Cuando la longitud del paquete es de 128 bits (16 bytes), el valor inicial del contador puede tener el formato siguiente.

 Los primeros 8 bytes son nonce (número aleatorio). Este valor debe ser diferente cada vez que se cifra. Los últimos 8 bytes son el número de secuencia del grupo. Esta parte se acumulará una tras otra. Durante el proceso de cifrado, el valor del contador cambiará de la siguiente manera:

 Según el método de generación anterior, se puede garantizar que el valor del contador será diferente cada vez. Dado que el valor del contador es diferente cada vez, el flujo de claves obtenido al cifrar el contador en cada grupo también es diferente. En otras palabras, este método utiliza cifrado de bloques para simular la generación de secuencias de bits aleatorias.

6.3 Comparación entre el modo OFB y el modo CTR

El modo CTR, al igual que el modo OFB, es un cifrado de flujo. Si eliminamos el proceso de cifrado de un solo paquete, la diferencia entre el modo OFB y el modo CTR es fácil de entender (imagen a continuación). El modo OFB refleja la salida cifrada en la entrada, mientras que el modo CTR utiliza el valor del contador como entrada.

6.4 Funciones del modo CTR

El cifrado y descifrado del modo CTR utilizan exactamente la misma estructura, por lo que es más fácil de implementar en el programa. Esta característica es la misma que el modo OFB, que también es un cifrado de flujo.

Además, en el modo CTR, los paquetes se pueden cifrar y descifrar en cualquier orden, por lo que el valor del "contador" necesario para el cifrado y descifrado se puede calcular directamente a partir del nonce y el número de secuencia del paquete. Esta propiedad no está disponible en modo OFB.

Ser capaz de procesar paquetes en cualquier orden significa que se puede lograr la computación paralela. En sistemas que admiten computación paralela, el modo CTR es muy rápido.

7 Resumen

 

Supongo que te gusta

Origin blog.csdn.net/weixin_41551445/article/details/126401736
Recomendado
Clasificación