¿Qué es el cifrado 3DES y cómo funciona?

3DES es un cifrado de cifrado derivado del Estándar de cifrado de datos (DES) original. Se hizo prominente a finales de los noventa, pero desde entonces ha caído en desgracia debido al surgimiento de algoritmos más seguros, como AES-256 y XChaCha20.

Aunque quedará obsoleto en 2023, aún se implementa en algunas situaciones. Dado que se basa en uno de los primeros algoritmos ampliamente publicados y estudiados, DES, sigue siendo importante aprender qué es 3DES y cómo funciona.

En esta guía te explicaremos cada paso del proceso DES en detalle, cómo se modifica DES en 3DES para hacerlo más seguro y los diversos problemas de seguridad y si debes o no usar el algoritmo.

¿Qué es 3DES?

Aunque se conoce oficialmente como Algoritmo de cifrado de datos triple (3DEA), se lo conoce más comúnmente como 3DES. Esto se debe a que el algoritmo 3DES utiliza el cifrado estándar de cifrado de datos (DES) tres veces para cifrar sus datos.

DES es un algoritmo de clave simétrica basado en una red Feistel. Como cifrado de clave simétrica, utiliza la misma clave para los procesos de cifrado y descifrado. La red de Feistel hace que ambos procesos sean casi exactamente iguales, lo que da como resultado un algoritmo que es más eficiente de implementar.

DES tiene un bloque de 64 bits y un tamaño de clave, pero en la práctica, la clave solo otorga 56 bits de seguridad. 3DES se desarrolló como una alternativa más segura debido a la pequeña longitud de la clave de DES. En 3DES, el algoritmo DES se ejecuta tres veces con tres claves; sin embargo, solo se considera seguro si se utilizan tres claves separadas.

Usos

Una vez que las debilidades del DES normal se hicieron más evidentes, se adoptó 3DES en una amplia gama de aplicaciones. Fue uno de los esquemas de cifrado más utilizados antes del surgimiento de AES.

Algunos ejemplos de sus implementaciones incluyen:

  • Microsoft Office
  • Firefox
  • Sistemas de pago EMV

Muchas de estas plataformas ya no usan 3DES porque hay mejores alternativas.

El Instituto Nacional de Estándares y Tecnología (NIST) ha publicado un borrador de propuesta que dice que todas las formas de 3DES quedarán obsoletas en 2023 y no se permitirán a partir de 2024. Aunque es solo un borrador, la propuesta significa el final de una era, por lo que es el momento de pasar a otros algoritmos más seguros.

Historia

Dado que 3DES se deriva de DES, es mejor introducir primero el estándar anterior.

Orígenes del cifrado DES

En los años setenta, la Oficina Nacional de Normas (NBS, desde entonces ha sido rebautizada como NIST) buscaba un algoritmo que pudiera utilizar como estándar para cifrar información gubernamental confidencial pero no clasificada.

El NBS aceptó propuestas para un estándar que se ajustaría a sus requisitos, pero ninguno de los candidatos de la ronda original era apropiado. Invitó a más presentaciones, y esta vez IBM envió a través de un algoritmo que desarrolló su equipo. La sumisión se derivó del cifrado Lucifer que diseñó Horst Feistel.

En 1975, el NBS publicó el algoritmo de IBM como el estándar de cifrado de datos propuesto. Se invitó al público a comentar sobre el diseño, lo que generó algunas críticas.

Criptógrafos destacados como Whitfield Diffie y Martin Hellman, diseñadores del intercambio de claves Diffie-Hellman, afirmaron que la longitud de la clave era demasiado corta y que las cajas S habían cambiado respecto a su diseño inicial.

En ese momento, muchos en la comunidad criptográfica pensaron que la NSA había saboteado el proyecto y debilitado el algoritmo para que fuera la única agencia que pudiera romper DES.

Cuando esto fue investigado por el Comité Selecto de Inteligencia del Senado de los Estados Unidos que indicó que la «NSA no manipuló el diseño de ninguna manera». Esto ha sido respaldado por algunos ex miembros del personal de IBM que afirmaron que el algoritmo DES fue diseñado en su totalidad por el equipo de IBM.

Las sospechas de manipulación de la NSA se disiparon en los años noventa una vez que se descubrió públicamente el criptoanálisis diferencial. Cuando las tan vilipendiadas cajas S se probaron con la nueva técnica, se descubrió que eran más resistentes a los ataques que si se hubieran elegido al azar.

Esto indica que el equipo de IBM ya conocía el criptoanálisis diferencial en los años setenta, y Steven Levy afirmó que la NSA les pidió que mantuvieran la técnica en secreto para proteger la seguridad nacional.

A pesar de las preguntas iniciales sobre la seguridad del algoritmo y la participación de la NSA, el algoritmo de IBM fue aprobado como estándar de cifrado de datos en 1976. Fue publicado en 1977 y reafirmado como estándar en 1983, 1988 y 1993.

Entendiendo el algoritmo DES

Antes de que podamos hablar sobre los detalles de 3DES, es importante comprender el algoritmo DES del que se deriva. Así que empecemos desde el principio.

Usamos el cifrado para convertir nuestros datos de texto sin formato en texto cifrado, que es información a la que los atacantes no pueden acceder (siempre que usemos los algoritmos apropiados).

Los algoritmos de cifrado son esencialmente fórmulas matemáticas complejas. Cuando se trata de encriptar algo como “Vamos a la playa”, mucha gente se confunde. Después de todo, ¿cómo puedes aplicar las matemáticas a cosas como letras y caracteres?

Codificando el texto

La realidad es que las computadoras no tratan con letras y caracteres. En cambio, funcionan en un sistema de 1 y 0 conocido como binario. Cada 1 o 0 se conoce como un bit, y una colección de ocho de ellos se conoce como un byte.

Puede buscarlo manualmente o usar un convertidor en línea para ver que en binario, «Vamos a la playa» se convierte en:

01001100 01100101 01110100 0010011 01100111 0110111 0110100 01101000 01110100 01101000 01100010 01100101 011001000 011000101 01100001 01100011 01101000 01100011 01101000 01100011 01101000 01100011 01101000 01100011 01101000 01100011 01101000 01100011 01101000 01100011 01101000 011101

Bloques

Cuando los datos están encriptados, se dividen en bloques separados para su procesamiento. DES tiene un tamaño de bloque de 64 bits, lo que esencialmente significa que cada bloque se ajusta a una combinación de 64 unos y ceros. Nuestro primer bloque (los primeros 64 dígitos del binario que se muestra arriba) sería:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111

Nuestro segundo sería:

00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000

Y nuestro bloque final sería:

01100010 01100101 01100001 01100011 01101000

Relleno

Es posible que hayas notado que nuestro tercer bloque tiene solo 40 bits de longitud. Antes de que pueda cifrarse, debe construirse hasta un tamaño de bloque de 64 bits. Esto se hace con relleno, lo que implica agregar información adicional a un bloque para completarlo. Esto se puede hacer con varios esquemas diferentes, y también puede servir para hacer que la información cifrada sea más difícil de descifrar, pero no entraremos en eso en este artículo.

El programa clave DES

Los algoritmos de cifrado usan claves para agregar datos que alterarán el resultado final del proceso. Si DES solo involucrara pasos como permutación y S-boxes (la permutación se explica a continuación, mientras que S-boxes se trata en la sección de sustitución ), todo lo que un atacante tendría que hacer es descubrir los detalles del algoritmo, luego hacer cada uno de los pasos en reversa para revelar el mensaje inicial.

Dado que la mayoría de nuestros algoritmos son ampliamente conocidos, esto realmente no agregaría mucha seguridad. En cambio, se agregan claves secretas para alterar la salida de una manera que no se puede predecir simplemente conociendo el algoritmo (siempre que se use un algoritmo lo suficientemente complejo).

El comienzo: una sola llave

DES comienza con una sola clave, que se utiliza para hacer subclaves que se aplican en cada ronda. Esta es una clave de 64 bits, que tiene el mismo tamaño que nuestros bloques. Digamos que nuestra clave es:

01001010 10101101 11101000 10100101 01110001 01010100 10101001 11111010

Ahora, esta clave está en binario, que es la forma en que se expresan los datos cuando las computadoras los procesan. Cuando los humanos se ocupan de las llaves, normalmente aparecerán como una mezcla de caracteres, algo como esto:

kj329nf982bc9wn1

El primer paso: permutar la clave

En DES, el primer paso para derivar nuestras claves redondas es permutar la clave (moverla), según la siguiente tabla.

En la permutación, cada bit de nuestra clave original se baraja a una nueva posición como lo indica la tabla. Dado que la celda en la esquina superior izquierda (de C) dice 57, el primer número de nuestra clave permutada será el número en la posición 57 de nuestro antiguo bloque:

01001010 10101101 11101000 10100101 01110001 01010100 10101001 1 1111010

La segunda celda dice 49, lo que significa que el segundo dígito de nuestra nueva clave será el número que está en la posición 49 de nuestro antiguo bloque:

01001010 10101101 11101000 10100101 01110001 01010100 1 0101001 1111010

La tercera celda dice 41, así que buscamos el dígito en la posición 41:

01001010 10101101 11101000 10100101 01110001 0 1010100 10101001 1111010

Hasta ahora, nuestra clave se compone de “ 110 ”.

El resto de la clave se dispone de la misma forma, según los valores de la tabla. Nos movemos de izquierda a derecha, y una vez que llegamos al final de una fila, saltamos a la siguiente, como de costumbre. Una vez terminada la tabla C, saltamos a la tabla D para completar la segunda mitad de la clave.

No hay una manera fácil de transponer todo nuestro bloque de acuerdo con la tabla de permutación inicial. Podrías hacer todo manualmente, o escribir un script para ello (o incluso tener suerte y encontrar uno en las profundidades de Internet), pero vamos a hacer trampa e inventarlo:

1100010 1010010 1010101 0101010 1010000 1111001 0001011 1000111

Puede que le preocupe que estemos inventando algunos de los números de esta guía, pero en realidad no importa. Ya nadie cifra los datos manualmente, todo se hace a través de programas. El aspecto más crítico de este tutorial es que tienes una idea clara de los conceptos que estamos tratando. Los números en sí solo sirven para ayudarte a visualizar lo que está sucediendo.

Algunos lectores pueden haber notado que la tabla (y ahora nuestra clave), solo tiene 56 bits en lugar de 64. Esto se debe a que se salta cada octavo bit. Este es un artefacto de los viejos tiempos de la tecnología, cuando era importante tener bits de verificación de paridad, que verificaban si la clave se había recibido correctamente. Estos bits de verificación de paridad significan que, en la práctica, DES solo tiene la seguridad de una clave de 56 bits.

Las tablas C y D nos dan una clave que tiene dos mitades de 28 bits. A veces, las mitades se denominan C y D, pero a lo largo de este artículo nos referiremos a ellas como L y R, para izquierda y derecha. Nuestro lado izquierdo es:

1100010 1010010 1010101 0101010

Mientras que nuestro derecho es:

1010000 1111001 0001011 1000111

El segundo paso: desplazar la llave a la izquierda

El siguiente paso es desplazar la tecla uno o dos espacios hacia la izquierda, según la ronda. El número exacto de espacios se decide de acuerdo con la siguiente tabla predeterminada:

El segundo paso: desplazar la llave a la izquierda
El siguiente paso es desplazar la tecla uno o dos espacios hacia la izquierda, según la ronda. El número exacto de espacios se decide de acuerdo con la siguiente tabla predeterminada:

Número redondeado                           Número de turnos a la izquierda
1                                                                                                1
2                                                                                               1
3                                                                                               2
4                                                                                               2
5                                                                                               2
6                                                                                               2
7                                                                                               2
8                                                                                               2
9                                                                                               1
10                                                                                             2
11                                                                                              2
12                                                                                              2
13                                                                                              2
14                                                                                              2
15                                                                                              2
16                                                                                              1

Así que tomemos nuestras mitades izquierda y derecha:

1010010 1010010 1010101 0 101010

R 1010000 1111001 0001011 1 000111

Y muévelos a ambos una posición a la izquierda, ya que la primera ronda tiene un cambio de 1 según la tabla (el número en el extremo izquierdo se mueve al extremo derecho).

Subclave de la primera ronda:

L 0100101 0100101 0101010 101010 1

R 0100001 1110010 0010111 000111 1

En la segunda ronda, la tabla también dice 1, por lo que este resultado se alterará nuevamente al mover cada número una posición hacia la izquierda.

Subclave de la segunda ronda :

1001010 1001010 101010 1 01010 10

R 1000011 1100100 010111 0 00111 10

En la tercera ronda, los números se moverán dos lugares a la izquierda, porque la tabla ahora dice 2.

Subclave de la tercera ronda:

L 0101010 0101010 1010 101 010 1010

R 0001111 0010001 0111 000 111 1010

En las rondas posteriores, los números se mueven hacia la izquierda según las distancias especificadas en la tabla, aplicándose cada desplazamiento al resultado de la ronda anterior. Al final, esto nos da dieciséis subclaves diferentes, una para cada ronda del proceso DES.

El tercer paso: otra permutación

El siguiente paso es otra permutación según la tabla PC2 que se muestra a continuación:

A estas alturas, deberías estar familiarizado con las permutaciones, por lo que no profundizaremos en el proceso. Aunque las posiciones de reubicación son diferentes, el proceso es el mismo.

Cada una de las 16 claves derivadas del proceso de cambio ahora se baraja de acuerdo con la tabla, con el número de la posición 14 movido al primer lugar, el 17 al segundo, el 11 al tercero, etc.

Si observas detenidamente la tabla, notarás que solo hay 48 bits, en lugar de los 56 bits que teníamos anteriormente. Este proceso se conoce como permutación de compresión.

También puedes ver que la mitad superior de la tabla presenta números entre uno y 28, mientras que la mitad inferior contiene números del 29 al 56. Esto mantiene separadas las mitades izquierda y derecha de nuestras subclaves, y se indica debajo con un espacio más grande en medio de las llaves.

Nuevamente, vamos a hacer trampa e inventar los números. Digamos que todo este proceso nos dio las siguientes subclaves:

Primera ronda: 010101 010101 101010 110100 101001 100101 101010 101010

Dos: 011010 110101 101110 110010 010100 110010 111101 101101

Tres: 010100 100110 110110 101010 100110 011000 101011 011001

Cuatro: 011001 110101 011001 110101 000011 001011 010101 010101

Cinco: 110101 001101 010101 010101 010011 001011 010111 100101

Sexta ronda: 010111 110101 011001 111001 101001 100101 101010 101010

Siete: 110101 111010 101110 101010 100110 010110 111011 001110

Ocho: 011001 110101 010101 001001 010011 001011 010100 101010

Nueve: 111011 011010 011110 100010 100010 010110 110011 110010

Diez: 011010 010101 101110 101001 010010 010110 111000 101010

Once: 110101 001101 101110 101010 100101 100101 101010 001010

Doce: 101001 100100 101001 101010 100110 011000 101011 011001

Trece: 010010 010010 010101 010101 010110 110001 100101 101010

Catorce: 101001 100110 010101 011101 010001 001010 110010 111110

Quince: 011001 011010 011001 110101 001001 011001 100101 101101

Dieciséis: 010010 100110 010101 010101 010001 101000 110010 111010

Este proceso de cambio da como resultado que cada bit de la clave inicial se use en aproximadamente 14 de las 16 subclaves, aunque algunos bits se usan un poco más que otros.

Permutación inicial

Una vez que los datos se han dividido en bloques y se han rellenado si es necesario, es hora de comenzar el proceso de encriptación DES.

Volveremos a las subclaves que acabamos de crear en una etapa posterior.

El primer paso se conoce como la permutación inicial, donde los datos se reorganizan de acuerdo con la siguiente tabla:

Este proceso de permutación inicial no hace que el algoritmo sea más seguro. Esto se debe a que no implica la entrada de ninguna tecla y se puede revertir fácilmente. El algoritmo se diseñó originalmente de esta manera porque facilitaba la implementación en ciertos contextos.

Ya que hemos cubierto las permutaciones un par de veces, omitiremos cualquier explicación importante aquí.

Tomemos el primer bloque del mensaje “Vamos a la playa”, que derivamos en la sección de Bloques entendiendo el algoritmo DES:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111

Como la primera celda dice 58, seleccionaríamos el número de la posición 58:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 0 1 101111

Entonces tomaríamos el número de la posición 50:

01001100 01100101 01110100 00100111 01110011 00100000 0 1 100111 01101111

Y el número de la posición 42:

01001100 01100101 01110100 00100111 01110011 0 0 100000 01100111 01101111

Esto nos da “ 110 ” hasta ahora. Formaremos el resto del número:

11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001

Cuando se completa la permutación inicial, los datos pasan al siguiente paso.

Dividiendo los bloques

Una vez que los datos han sufrido su permutación inicial, se dividen en dos mitades. Tomamos nuestro bloque que acaba de sufrir su permutación inicial:

11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001

Y lo separaremos en dos bloques, un bloque izquierdo (formado por los primeros 32 dígitos), conocido como L 0 :

L 0 11010111 01001010 10101000 10011101

Y un bloque derecho (compuesto por los segundos 32 dígitos), conocido como R 0 :

R 0 01001011 10110101 10000111 10101001

La función F

Ahora que el bloque se ha dividido, es hora de que tenga lugar la función F. En la primera ronda, solo se aplicará a la mitad derecha del bloque, mientras que la mitad izquierda se mantendrá a un lado hasta más tarde. El lado derecho se somete a los siguientes cuatro pasos como parte de la función F:

  • Permutación de expansión
  • Combinación de teclas
  • Sustitución
  • Permutación
Permutación de expansión

La permutación de expansión logra tres cosas:

  • El más importante es que permite que bits individuales de datos de entrada afecten la salida de otros dos bits, provocando un efecto de avalancha.
  • También hace que la mitad derecha sea de 48 bits, de modo que tenga el mismo tamaño que la subclave para el siguiente paso.
  • El otro efecto de la permutación de expansión es que hace que la salida sea más larga que la entrada. Esto permite comprimirlo en la operación de sustitución.

Los bits se reorganizan de acuerdo con la siguiente tabla. Algunos de los bits individuales están dos veces en la tabla, que es como el bloque se expandió de 32 a 48 bits:

Dado que la primera celda dice 32, tomamos nuestro bloque derecho y seleccionamos el número de la posición 32, tal como lo hicimos en los otros ejemplos de permutación enumerados anteriormente:

R 0 01001011 10110101 10000111 1010100 1

Luego tomamos los números de la primera posición, la segunda posición, y así sucesivamente, hasta llegar a la esquina inferior derecha del bloque. Como hay un 1 en esta celda, el último dígito también será el número que aparece en la primera posición de nuestro bloque.

Digamos que la permutación de expansión nos da un nuevo bloque de 48 bits de:

101110 100110 100100 000000 001100 001110 101101 011110

Mezcla de llaves

Una vez que el bloque se ha expandido a 48 bits, es hora de aplicar la subclave de la primera ronda, que derivamos en la sección de programación de claves DES anterior. El bloque es modificado por la subclave utilizando el cifrado XOR.

El cifrado XOR es un cifrado de adición que sigue un proceso simple, especialmente cuando se compara con los otros elementos que ya hemos discutido.

En un cifrado XOR:

0 + 0 = 0

1 + 0 = 1

1 + 1 = 0

Así que digamos que tienes que XOR los siguientes dos números en binario:

1101

0101

Cada dígito se sumaría al que está debajo. De acuerdo con las tres reglas mostradas arriba, esto da un resultado de:

1000

Para completar el paso de combinación de claves, tomamos el lado derecho de nuestro bloque que acabamos de expandir a 48 bits y la primera clave redonda. Luego realizamos la adición XOR:

Bloque: 101110 100110 100100 000000 001100 001110 101101 011110

Clave redonda: 010101 010101 101010 110100 101001 100101 101010 101010

Resultado XOR: 111011 110011 001110 110100 100101 101011 000111 110100

El resultado de la operación XOR se pasa luego a la siguiente ronda.

Sustitución

La sustitución agrega confusión a los datos. Normalmente se hace con tablas de búsqueda, que también se conocen como cajas de sustitución o cajas S. DES usa ocho tablas separadas o S-boxes, una diferente para cada 6 bits de datos. La siguiente tabla muestra las ocho cajas S de DES:

Las ocho cajas S separadas se utilizan para traducir cada entrada de 6 bits en una salida de 4 bits. El primer paso en el proceso es tomar los dígitos al principio y al final de un segmento de 6 bits, luego convertir ese valor binario a decimal.

Tomemos los datos que acabamos de terminar de aplicar XOR en el paso anterior:

111011 110011 001110 110100 100101 101011 000111 110100

Veremos el primer segmento de 6 bits para mostrarte cómo funciona el proceso de sustitución:

1 1101 1

Dado que el primer número y el último número son ambos 1, esto nos da un valor de 11. Luego convertimos 11 de binario a decimal, lo que nos da 3. Estos son solo valores equivalentes, escritos de diferentes maneras. Piensa en ello como convertir el lenguaje informático en lenguaje humano.

Luego tomamos los cuatro dígitos del medio del primer segmento de 6 bits:

1 1101 1

Y convertirlos de binario a decimal. 1101 se traduce al número 13.

Ahora, tomamos estos dos números y los buscamos en la tabla S 1.

Nuestro primer número, 3, nos dice que miremos en la tercera fila, mientras que nuestro segundo número, 13, nos dice que miremos en la columna 13. El valor en la tercera fila de la columna 13 es 0.

Ahora que hemos buscado nuestro número en la tabla, lo volvemos a convertir a un binario de cuatro dígitos. El cero normalmente se escribe como 0 en binario, pero 0000 es lo mismo, y este es el formato más adecuado para nuestros propósitos.

Siguiendo este proceso, el S-box convierte nuestra primera sección de datos de 6 bits ( 111011 ) en un valor diferente de 4 bits ( 0000 ). Parece complicado, pero esta técnica ayuda a oscurecer aún más la relación entre el texto cifrado y el texto sin formato al que está vinculado.

La siguiente sección de datos de 6 bits pasa por el mismo proceso; pero en su lugar, utiliza el cuadro S2 que se muestra arriba. La tercera sección usa la tabla S3 y así sucesivamente, hasta que la sección final sufre la sustitución a través de la tabla S8.

Nuevamente, vamos a hacer trampa para el resto de los valores. Digamos que las casillas de sustitución nos dan un resultado de:

0000 1010 1100 1001 0100 1001 0111 0001

Una vez que cada sección de los datos ha pasado por su S-box, pasa al siguiente paso.

Permutación

La última etapa de la función F es otra permutación, usando la siguiente tabla:

A estas alturas, deberías tener una comprensión decente de cómo las permutaciones cambian los dígitos del bloque anterior a una posición diferente en el bloque nuevo, por lo que no volveremos a entrar en eso.

Digamos que esta permutación toma nuestro resultado anterior:

0000 1010 1100 1001 0100 1001 0111 0001

Y nos da una salida de:

0101 0110 1001 0101 0010 0100 0101 0010

Ahora que se completó la permutación, hemos terminado con los cuatro pasos de la función F en esta ronda. En notación matemática, este valor se conoce como f(R 0, K 1). Esto significa que el resultado es la función (f) del lado derecho inicial del bloque (R0) y la subclave de la primera ronda (K 1).

XOR con el bloque izquierdo

¿Recuerdas cómo dividimos el bloque por la mitad justo antes de comenzar los pasos de la función F? Reservamos el lado izquierdo del bloque (L0), mientras que el lado derecho pasó por cada uno de estos procesos. Bueno, ahora es el momento de que L0 vuelva a la acción.

Tomamos el lado derecho que acabamos de procesar f(R 0, K 1) y lo agregamos al viejo lado izquierdo (L 0) usando el cifrado XOR. Esto nos da R 1, el resultado de nuestra primera ronda:

f(R 0, K 1): 0101 0110 1001 0101 0010 0100 0101 0010

L 0: 1101 0111 0100 1010 1010 1000 1001 1101

Resultado XOR (R 1): 1000 0001 1101 1111 1000 1100 1100 1111

15 rondas más

Si has llegado hasta aquí, entonces DES probablemente parezca un proceso arduo. Pero aún no estás ni cerca de estar terminado. Los datos pasan por los cuatro pasos de la función F, seguidos por el XOR, otras 15 veces, para un total de 16 rondas.

En la segunda ronda, tomamos la versión original intacta del lado derecho del bloque (R0) y la convertimos en el nuevo lado izquierdo (L1). Mientras tanto, tomamos el resultado de nuestra primera ronda y lo enviamos a través de la función F.

Todo sucede igual que la última vez, sin embargo, esta vez se usa la subclave para la segunda ronda. Digamos que este proceso nos da un resultado de:

f(R1 , K2): 1011 0111 1000 1011 1001 1101 1001 1110

Luego aplicamos XOR al resultado con L1, que en realidad es R0 (obtuvimos esto en la sección Dividir bloques ). Esto nos da el resultado de la segunda ronda, R2:

f(R1 , K2): 1011 0111 1000 1011 1001 1101 1001 1110

L 1: 0100 1011 1011 0101 1000 0111 1010 1001

R2: 1111 1100 0011 1110 0001 1010 0011 0111

Este paso puede parecer un poco confuso, pero según el esquema de Feistel, el antiguo lado derecho se convierte en el nuevo izquierdo, mientras que el resultado de la operación se convierte en el nuevo lado derecho.

La fórmula exacta para cada paso es:

  • Ln = Rn – 1
  • R norte = L norte-1 + F ( R norte-1 , K norte )

Donde:

  • L = La mitad izquierda del bloque (comenzando con L0 cuando el bloque se dividió inicialmente).
  • R = La mitad derecha del bloque (comenzando con R0 cuando el bloque se dividió inicialmente).
  • n = El número redondo (que comienza con 0, cuando el bloque se dividió inicialmente).
  • f = La función F
  • Kn = La subclave para la ronda n.

De acuerdo con la fórmula y el diagrama, en la tercera ronda, R1 se convierte en la nueva mitad izquierda (L2), mientras que R2 se procesa a través de la función F. Digamos que nos da un resultado de:

f(R 2, K 3 ) 1001 0111 0000 1011 1101 0111 1011 1011

Luego calculamos el resultado de nuestra tercera ronda (R3), usando el cifrado XOR, como antes:

f(R2 , K3): 1011 0111 1000 1011 1001 1101 1001 1110

L 2: 0100 1011 1011 0101 1000 0111 1010 1001

R 3: 1111 1100 0011 1110 0001 1010 0011 0111

El mismo proceso continúa hasta la decimoquinta ronda, con el cambio de bloques y la siguiente subclave que se usa en cada ronda. En la ronda 16 y final, los bloques no se intercambian. En su lugar, se combinan para formar un bloque de 64 bits.

Abstenerse de intercambiar los bloques en esta última etapa permite que el algoritmo se use tanto para el cifrado como para el descifrado.

Digamos que la ronda final nos da un resultado de:

1010 0101 0100 1011 1001 0001 0100 1000 0101 1010 1101 0001 1101 1001 1001 1101

Última permutación

Esta permutación es la inversa de la permutación inicial y, de nuevo, no agrega ningún valor de seguridad adicional. Reordena los datos de acuerdo a la siguiente tabla:

Esta tabla de permutaciones funciona igual que las anteriores. Dado que es el paso final del proceso de cifrado, el resultado será el texto cifrado del primer bloque de «Vamos a la playa». Digamos que el bloque encriptado es:

0100 1001 0011 0010 1001 0101 0111 0100 1011 1010 0111 0101 0111 1010 0101 0101

Ahora, si querías el texto cifrado real para «Vamos a la playa», podrías haberte saltado todo el proceso de aprendizaje e ir directamente a una herramienta de cifrado DES en línea. Si ingresamos nuestra oración junto con una clave (digamos kj329nf982bc9wn1), la herramienta nos brinda un texto encriptado de:

U2FsdGVkX19Pienyu3w3q4zCd2IPKEPUWBzu3AeyVu2H3FeimZe6hA

Si lo deseas, puedes convertir la clave y el texto cifrado en binario y luego comparar cómo se alinea el texto cifrado del primer bloque con todo el proceso que se ha descrito.

Descifrado DES

En DES, el proceso de descifrado es increíblemente sencillo. La estructura de Feistel del algoritmo permite revertirlo fácilmente.

El proceso se ejecuta casi exactamente igual para descifrar la información. La única diferencia es que las subclaves se aplican al revés. Esta es una configuración eficiente, porque significa que se puede usar el mismo software y hardware en los procesos de cifrado y descifrado.

Para descifrar los datos, primero pasa por una permutación inicial, luego el bloque se divide y la mitad derecha pasa por la función F. La diferencia es que en la primera ronda de descifrado, se aplica la subclave 16. Todo lo demás procede con normalidad. Una vez que se completa la función F, se aplica XOR con el lado izquierdo del bloque.

Los bloques se intercambian y el resultado pasa por el mismo proceso para la segunda ronda, con la única excepción de que se aplica la subclave 15. Este proceso continúa hasta la ronda 16, cuando se utiliza la primera subclave.

Al igual que en el proceso de encriptación, los bloques no se intercambian en la etapa final y luego los datos se someten a una permutación final. Esto finaliza el proceso de descifrado, lo que da como resultado el texto sin formato original del mensaje.

3DES

A medida que las debilidades de seguridad de DES se hicieron más evidentes, se propuso 3DES como una forma de ampliar el tamaño de su clave sin tener que construir un algoritmo completamente nuevo. En lugar de usar una sola clave como en DES, 3DES ejecuta el algoritmo DES tres veces, con tres claves de 56 bits:

  • La clave uno se utiliza para cifrar el texto sin formato.
  • La dos se utiliza para descifrar el texto que había sido cifrado por la clave uno.
  • La clave tres se usa para cifrar el texto que fue descifrado por la clave dos.

En cada etapa, se sigue el proceso DES completo como se describe anteriormente.

Ahora, puede que te preguntes, ¿Cómo puede mejorar la seguridad la aplicación del descifrado en el segundo paso?

La respuesta es que utiliza una clave separada. Si la primera clave también se usó para descifrar los datos en el segundo paso, entonces los datos estarían justo donde comenzaron.

Sin embargo, dado que utiliza una clave diferente, el proceso de descifrado en realidad no sirve para descifrar los datos. Puede parecer lógicamente perverso, pero descifrar con una clave separada solo sirve para desordenar aún más los datos.

Una vez que la segunda clave ha «descifrado» los datos, se aplica la tercera clave para volver a cifrarlos. El resultado es el texto cifrado 3DES.

3DES está estructurado de esta manera porque permite que las implementaciones sean compatibles con DES de clave única, DES de dos claves y DES de tres claves. Esto no funcionaría si se usara el cifrado en los tres pasos.

Seguridad de 3DES

La seguridad de 3DES depende de la opción de codificación que se utilice. La opción de codificación uno involucra tres claves diferentes de 56 bits, lo que le da una longitud total de clave de 168 bits. La longitud efectiva se reduce considerablemente por los ataques de encuentro en el medio, que reducen su seguridad en el mundo real a 112 bits.

Los ataques de encuentro en el medio son útiles contra los esquemas de encriptación que repiten el mismo algoritmo varias veces. La técnica almacena los valores inmediatos de cada etapa de encriptación, luego usa esta información para mejorar radicalmente el tiempo que llevaría aplicar la fuerza bruta al algoritmo.

Las opciones dos y tres tienen claves significativamente más pequeñas y son vulnerables tanto a ataques de texto sin formato conocido como de texto sin formato elegido, entre otros.

Los ataques de texto sin formato conocido son posibles cuando un adversario tiene acceso tanto al texto sin formato como al texto cifrado de un mensaje. Si un algoritmo es susceptible a estos ataques, el atacante puede usar esta información para deducir la clave, lo que le permite descifrar todos los demás datos que han sido encriptados por la misma clave.

Un ataque de texto sin formato elegido es similar, pero implica que el atacante descubra la clave comparando textos cifrados con textos sin formato arbitrarios.

Debido a estas vulnerabilidades y los tamaños de clave pequeños en general involucrados, las opciones de clave dos y tres son inseguras y no deben implementarse.

Dado que 3DES quedará obsoleto en los próximos años, es mejor utilizar otros algoritmos. Si bien la opción de clave uno todavía se considera segura para muchas aplicaciones, no hay muchas buenas razones por las que deba usarse en lugar de una alternativa como AES.

Alternativas

Como se mencionó, hay otros tipos más fuertes de algoritmos de encriptación a considerar. Echemos un vistazo a dos de los más seguros.

Cifrado AES-256

Este tipo de algoritmo de cifrado es prácticamente imposible de descifrar. Ninguna cantidad de poder de cómputo puede lanzar efectivamente un ataque de fuerza bruta que descifraría una contraseña protegida por este tipo de encriptación. El gobierno de EE.UU. usa el cifrado AES-256 para proteger los documentos clasificados, por lo que si un administrador de contraseñas también lo usa, puedes estar seguro de que tus contraseñas estarán seguras.

Cifrado XChaCha20

Algunas de las corporaciones tecnológicas más grandes, como Google y Cloudflare, usan esta alternativa a AES-256. Este servicio se basa en una arquitectura de conocimiento cero, lo que significa que nadie en la empresa administradora de contraseñas puede ver tus contraseñas (incluida tu contraseña maestra), la información de la tarjeta de crédito o las notas cifradas. Por lo tanto, incluso si un pirata informático violara los sistemas de la empresa, su información estaría segura. Los beneficios de XChaCha20 sobre AES-256 incluyen velocidades más rápidas, menos susceptibilidad a errores humanos y técnicos y sin requisitos de soporte de hardware.