¿Te ha gustado el artículo?
1
¿Te ha gustado el artículo?
1

El encriptado informático: así se protege la comunicación

La criptografía o el cifrado designan a un procedimiento que traduce un texto sin formato (plain text o texto plano) en una secuencia ininteligible de caracteres mediante una clave. El objetivo es que el contenido del texto secreto resultante o criptograma (texto cifrado) solo sea accesible para aquellos que disponen de la clave para descifrarlo. Aunque expresiones tales como "texto plano" o "texto cifrado" provengan de la estrategia militar, los métodos criptográficos pueden ser también aplicados a otro tipo de información electrónica como mensajes de voz, archivos de imagen o códigos de programación, además de a mensajes de texto.

El cifrado tiene como finalidad proteger archivos, unidades de disco o directorios de intrusiones o transmitir datos de forma confidencial. Ya en la antigüedad se utilizaban métodos criptográficos sencillos que se reducían en primera instancia a la codificación de la información que se quería proteger, permutando caracteres aislados, palabras o frases enteras del texto plano del mensaje (cifrado por transposición o permutación) o substituyendo los caracteres por combinaciones alternativas (cifrado por substitución).

Para decodificar un texto encriptado es necesario que el destinatario conozca la regla por la cual se ha cifrado el texto. En el cifrado por transposición, las permutaciones suelen llevarse a cabo a partir de una matriz (matriz de transposición) que ha de conocerse o poderse reconstruir. El cifrado por sustitución se basa en una ordenación tabular de caracteres y cifras en forma de código secreto.

Uno de los primeros y más sencillos métodos de cifrado tiene su origen en la época de Cayo Julio César. Para proteger su correspondencia militar de ojos ajenos, el astuto estratega desarrolló el denominado cifrado César, también conocido como cifrado por desplazamiento o código de César, que se basaba en la substitución alfabética simple y consistía en substituir cada letra por la que se encuentra algunas posiciones más adelante en el alfabeto, en su caso, tres. La tabla de codificación resulta así:

El número de posiciones que se desplaza cada carácter puede ser considerado como la clave de este tipo de encriptación, que no se muestra como número (3), sino como la letra correspondiente en el alfabeto, "C" en el caso de un desplazamiento de tres posiciones.

A diferencia del principio que sustenta el cifrado César, relativamente fácil de desentrañar, la codificación moderna se basa en funciones matemáticas de gran complejidad, los llamados algoritmos, que combinan la substitución y la transposición y son parametrizadas mediante claves en la forma de contraseñas y códigos binarios. Estos métodos de cifrado representan una dificultad mucho más elevada para los criptoanalistas, de tal forma que hoy muchos sistemas criptográficos consolidados aún no pueden ser descifrados con los medios de que se dispone en la actualidad.

Cómo se encriptan los datos

Un método de cifrado se compone fundamentalmente de dos elementos, un algoritmo criptográfico y una o más claves secretas. Mientras que el algoritmo describe el método de encriptado (p. ej., "desplaza cada letra a lo largo de la secuencia del alfabeto"), la clave proporciona el parámetro ("C = tres posiciones"). Esto es lo que permite definir al cifrado como un procedimiento por el cual se entrega un texto en claro y una clave al algoritmo criptográfico y se obtiene un texto cifrado.

Clave digital

En la codificación moderna se utilizan secuencias de bits como claves digitales. Un criterio esencial para la seguridad del encriptado es la longitud en bits de las claves, la cual indica la medida logarítmica del número de combinaciones posibles que pueden usarse. También se habla en este caso de espacio de posibilidades de claves o espacio de claves, el cual, cuanto más amplio, más resistente es contra los llamados ataques de fuerza bruta (probar una tras otra todas las combinaciones posibles).

El código César permite explicar este tipo de ataque informático. El espacio de claves en este método de codificación es de 25, lo que equivale a una longitud de clave por debajo de 5. Esto significa que alguien que busque descifrar esta clave, solo necesita probar 25 combinaciones, lo que convierte a este método de cifrado en un obstáculo muy débil. Por el contrario, los métodos más modernos utilizan claves capaces de generar más combinaciones. El Advanced Encryption Standard o AES, por ejemplo, permite escoger entre longitudes de clave de 128, 192 o 256 bits, lo cual aumenta el abanico de claves posibles.

Un cifrado de 128 bits equivale a 2128 diferentes combinaciones o claves posibles, lo que corresponde a más de 340 millones de mil millones de mil millones de mil millones de combinaciones (340 millones de quintillones). Con una longitud de 192 bits, la cantidad de combinaciones posibles se eleva a más de 115 duodecillones (1.000.000)12. Incluso contando con la tecnología necesaria, duraría una eternidad probar todas las combinaciones posibles, de modo que los ataques de fuerza bruta en un espacio AES no son practicables con la tecnología disponible a día de hoy.

El principio de Kerckhoffs

Los ataques de fuerza bruta ya no suponen una amenaza seria para los métodos modernos de cifrado debido a las longitudes de clave actuales. En lugar de ello, los criptoanalistas buscan debilidades en el algoritmo que permitan reducir el tiempo de cálculo necesario para descifrar datos encriptados. Los ataques de canal lateral, por otro lado, utilizan la información que se obtiene implementando un sistema criptográfico en un dispositivo o en un software. En este caso mantener en secreto el método de encriptado sería contraproducente para su seguridad.

Siguiendo el principio de Kerckhoffs, la seguridad de un sistema de cifrado no se basa en mantener en secreto el algoritmo, sino la clave. El criptógrafo holandés que da nombre a este principio, Auguste Kerckhoffs, formuló ya en 1883 uno de los fundamentos de la criptografía moderna: para encriptar de forma fiable un texto en claro es suficiente con otorgar un parámetro secreto (una clave) a un método matemático conocido y bien descrito. Esta suposición se ha mantenido hasta hoy en lo esencial.

Como muchos otros campos de la ingeniería de software, también el desarrollo de mecanismos de cifrado se basa en la confianza en el código abierto en cuanto a la seguridad. Una implementación consecuente del principio de Kerckhoffs permite descubrir los errores en los algoritmos criptográficos con más rapidez, ya que tales procedimientos han de resistir la crítica del sector especializado.

La expansión de la clave: de la contraseña a la clave

Aquellos usuarios con interés en cifrar o descifrar datos no trabajan generalmente con claves, sino con secuencias más manejables, las contraseñas. Una contraseña segura está compuesta por una secuencia de 8 a 12 caracteres, se compone de letras, cifras y símbolos y, frente a las secuencias de bits, tienen una ventaja decisiva, y es que las personas pueden recordarlas sin gran esfuerzo. Sin embargo, debido a su escasa longitud, las contraseñas no son adecuadas como claves de cifrado. Es por ello que muchos procedimientos de cifrado contienen un paso intermedio en el cual se transforma una contraseña de cualquier longitud en una secuencia de bits fija acorde con el método. También se dan aquellos métodos en los cuales la clave se genera por azar siempre que sea técnicamente posible.

Un método muy común para calcular las claves desde las contraseñas lo representa la función derivadora de claves PBKDF2 (Password-Based Key Derivation Function 2), método por el cual se añade una secuencia semialeatoria de bits, el denominado valor de sal, a la contraseña y, utilizando funciones hash criptográficas, se deriva la secuencia de bits con la longitud deseada.

Las funciones hash son funciones resistentes a colisiones de un solo sentido o unidireccionales, es decir, que son fáciles de calcular pero, por el contrario, muy difíciles de invertir. En criptografía, un procedimiento se califica como seguro cuando diferentes documentos reciben diferentes hashes. Aquellas contraseñas que fueron transformadas en claves mediante funciones unidireccionales solo se pueden reconstruir con un intenso esfuerzo de computación, y no siempre. Esto puede entenderse tomando como ejemplo una búsqueda en las Páginas Amarillas: si buscar un número de teléfono a partir de un nombre puede ser una tarea muy sencilla, lo contrario, buscar un nombre a partir de un número telefónico, se puede convertir en un problema irresoluble.

Cuando se utiliza PBKDF2, el cálculo matemático se ejecuta en varias iteraciones (fases idénticas o rondas), para proteger la clave así generada contra ataques de fuerza bruta. El valor de sal dificulta aún más un intento de descifrar la contraseña con tablas arcoíris o tablas rainbow, un patrón de ataque que permite derivar una contraseña de un valor hash almacenado. Otros procedimientos de hash de contraseñas son los llamados sctypt, bcrypt y LM-Hash, aunque este último está considerado obsoleto y poco seguro.

El problema del intercambio de claves

Una cuestión central de la criptografía hace referencia al modo en que se encripta la información en un lugar y al modo en que se descifra en otro. Ya Julio César tuvo que enfrentarse a esta problemática, de tal forma que, si el caudillo quería enviar, por ejemplo, un mensaje cifrado desde Roma al frente germánico, tenía que asegurarse de que el destinatario fuera capaz de descifrarlo. La solución pasaba por enviar la clave secreta junto con el mensaje, pero, ¿cómo entregarla a la persona correcta sin que cayera en manos ajenas? En el ámbito de la codificación informática, los criptógrafos se enfrentan hoy a la misma pregunta, de modo que, en el desarrollo de sistemas criptográficos y protocolos de intercambio de claves se han incluido algunas soluciones a este problema propio de la criptografía simétrica, que puede ser entendido como la principal motivación que ha llevado al desarrollo de procedimientos de cifrado asimétrico.

Criptografía simétrica, asimétrica e híbrida: diferenciación básica

La criptografía moderna diferencia de forma fundamental entre los métodos simétricos y los asimétricos partiendo del uso y la gestión de las claves en cada uno. En el cifrado simétrico se utiliza la misma clave tanto para el cifrado como para el descifrado de los datos, de tal forma que, si dos interlocutores quieren intercambiar un mensaje secreto, se ha de encontrar la forma de transmitir también la clave de descifrado. En los sistemas asimétricos, por el contrario, cada parte genera su propio par de claves, compuesto de una clave pública (public key) y otra privada (private key). Cuando se combinan la criptografía simétrica y la asimétrica se habla de criptografía híbrida.

Criptografía simétrica

Hasta la década de 1970, el cifrado de la información se basaba en la criptografía simétrica, cuyos orígenes se remontan a métodos de la antigüedad como el mencionado código César. El principio básico que la sustenta es que tanto el cifrado como el descifrado se realizan con ayuda de una sola clave secreta. Esto implica que los dos interlocutores han de disponer de una copia de la clave, que se ha de proteger de terceros para no arriesgar la información secreta. Esto hace que a este procedimiento se le conozca también como criptografía de clave secreta.

Si la clásica criptografía simétrica utiliza el alfabeto para traducir un texto plano en un texto cifrado, el encriptado informático se realiza mediante bits. En este caso se diferencia entre el cifrado de flujo y el de bloque por el algoritmo que utilizan:

  • Cifrado en flujo (stream): el cifrado se realiza por bits y se basa en claves muy largas. Cada bit del texto sin formato se correlaciona con un bit en el flujo de claves, de tal forma que se crea un carácter cifrado.
  • Cifrado de bloques: en este algoritmo los bits que se han de cifrar se agrupan en bloques de longitud fija, que se corresponden con otros diferentes. Resulta un cifrado de longitud fija.

Los algoritmos de la criptografía simétrica se basan habitualmente en operaciones tan sencillas como la substitución y la permutación, que hoy se aplican al texto en claro de forma combinada y en rondas o iteraciones consecutivas, así como en las adiciones, las multiplicaciones, la aritmética modular y las operaciones XOR.

A continuación, describimos dos métodos conocidos de criptografía simétrica: el estándar de codificación de datos (Data Encryption Standard, DES), hoy superado, y su sucesor el estándar de codificación avanzado (Advanced Encryption Standard, AES).

Data Encryption Standard (DES)

Se trata de un método de cifrado desarrollado por IBM en la década de 1970 y estandarizado por el Instituto Nacional de Estándares y Tecnología (NIST) norteamericano en 1977. Como primer método de encriptación informática y tan seguro como permitían los estándares de la época, DES sienta las bases de la criptografía moderna. Libre de derechos de patente, hoy se considera ya obsoleto debido a la reducida longitud de 64 bits (56 bits útiles) de las claves. Ya en 1994, el sistema criptográfico fue descifrado en 50 días con 12 estaciones HP-9735 en un primer criptoanálisis experimental. El estándar actual de la tecnología ha hecho a una clave DES tan vulnerable que un ataque de fuerza bruta la descifra en unos pocos segundos.

Este algoritmo simétrico trabaja en bloques de bits (cifrado de bloques): el texto en claro se subdivide en bloques de 64 bits, cada uno de los cuales se cifra con una clave de 64 bits. Se traduce así cada texto de 64 bits en un texto cifrado de 64 bits. En realidad el algoritmo solo utiliza 56 bits pues los ocho restantes se usan para comprobar la paridad, siendo descartados después. En DES, de esta forma, solo se dispone de 56 bits efectivos para el cifrado.

El algoritmo de cifrado en DES se estructura en una red Feistel que combina sustituciones y permutaciones en 16 rondas. Este esquema, que toma su nombre del empleado de IBM Horst Feistel, se puede describir en cuatro fases:

1. Permutación de entrada: el bloque de texto plano de 64 bits se somete a una permutación de entrada que modifica la secuencia de los bits. El resultado se escribe en dos bloques de 32 bits, uno izquierdo (L) y uno derecho (R).

2. Permutación de la clave: Los 56 bits de la clave relevantes para el cifrado también se someten a una permutación, para después ser divididos en dos bloques de 28 bits (C y D). De estos dos bloques C y D se genera una clave de ronda (subclave) para cada ronda. Para generar esta clave, los bits de ambos bloques se desplazan cada uno en 1 o 2 bits cíclicamente hacia la izquierda. Esto debe garantizar que en cada ronda de cifrado se crea una subclave diferente. Seguidamente los dos bloques C y D resultan en una subclave de 48 bits.

3. Rondas de cifrado: cada ronda recorre los pasos a) hasta d). En cada vuelta el cifrado involucra a un bloque R y a una subclave. De momento el bloque L permanece fuera del proceso.

  • Expansión: la mitad del bloque derecho de 32 bits R se expande a un bloque de 48 bits mediante la permutación de expansión. Para ello, los 32 bits se dividen en grupos de 4 bits y se permutan o se duplican siguiendo este esquema
  • Unión mediante una operación XOR del bloque de datos y la subclave: en cada ronda el bloque R expandido a 48 bits se une a una subclave de 48 bits mediante una operación XOR, dando como resultado otro bloque de 48 bits.
  • Cajas-S o cajas de substitución: tras mezclarlo con la subclave, este bloque de 48 bits se divide en ocho bloques de 6 bits. Estos bloques son procesados por las cajas de substitución, que substituyen los 6 bits de entrada por 4 de salida, que se agrupan en un bloque de 32 bits. Este bloque también es sometido a una permutación y se reordenan los bits de salida según este esquema.
  • Unión con XOR del bloque R con el bloque L: con cada ronda, el resultado de las cajas-S se mezcla con el hasta ahora inutilizado bloque L mediante XOR. De ello resulta un bloque de 32 bits que, como nuevo bloque R, entra en la segunda ronda. El bloque R de la primera ronda es el bloque L de la segunda.

4. Permutación de salida: Una vez se han efectuado las 16 rondas, los bloques L y R se agrupan en un bloque de 64 bits y se someten a una permutación de salida inversa a la de entrada. El texto resultante es un mensaje cifrado. Para descifrar un texto codificado según DES se sigue el mismo esquema en sentido inverso.

Este gráfico representa esquemáticamente el funcionamiento de la función de Feistel en DES. Las operaciones XOR se representan con una cruz roja dentro de un círculo.

La principal objeción a este estándar es la escasa longitud de clave de 56 bits que, en consecuencia, deriva en un espacio de claves también reducido que hoy día no está en situación de afrontar ataques de fuerza bruta con la potencia de cómputo actual. El procedimiento de permutación de claves, que crea 16 subclaves casi idénticas, también se considera demasiado débil para los estándares modernos.

Triple DES o 3DES representa una variante de DES que ejecuta el cifrado en tres rondas consecutivas, es decir, lleva a cabo un triple cifrado. Sin embargo, la longitud efectiva de 3DES asciende solamente a 112 bits, aún por debajo del estándar actual de 128 bits, sin contar que requiere mucha más potencia que DES.

Todo esto hizo que DES fuera substituido de forma definitiva por el algoritmo, igualmente simétrico, del estándar avanzado o AES, mucho más rápido y eficaz.

Advanced Encryption Standard (AES)

En la década de 1990 se puso de relieve que el estándar de cifrado DES usado hasta ese momento ya no estaba a la altura del desarrollo tecnológico, de tal manera que se hacía necesario contar con otro más moderno. El algoritmo Rijndael, desarrollado por los entonces estudiantes Vincent Rijmen y Joan Daemen, se consolidó como el sucesor tras ganar la convocatoria que lanzó el NIST en 1997 para desarrollar el AES, un estándar de cifrado adaptado a la información sensible del siglo XXI. El NIST lo certificó como AES a finales del año 2000.

El sucesor de DES también subdivide el texto plano en bloques, pero el nuevo AES soporta claves de 128, 192 y 256 bits y, en lugar de utilizar bloques de 64 bits, el estándar avanzado utiliza bloques más grandes de 128 bits, que se cifran en varias rondas consecutivas con ayuda de una red de substitución-permutación (SPN). Como su antecesor, AES también usa en cada ronda una nueva subclave, que se deriva de forma recursiva de la clave inicial y se une al bloque a cifrar con XOR. El funcionamiento del algoritmo se puede subdividir grosso modo en cuatro fases:

1. Expansión de la clave: para que AES pueda utilizar una nueva subclave en cada ronda, derivada por recursión de la primera clave, esta se ha de expandir a una longitud que permita generar el número necesario de subclaves de 128 bits. Así, cada subclave se basa en un fragmento de la clave de salida expandida. El número de subclaves necesarias comprende el número de rondas (R), incluida la ronda final y una subclave para la ronda previa (R + 1).

2. Ronda previa: en la ronda previa el bloque de 128 bits se transpone en una tabla bidimensional o matriz (state) y se une con la primera subclave mediante XOR (Key Addition). La tabla comprende 4 columnas y 4 líneas. Cada casilla contiene 1 byte (8 bits) del bloque que se ha de encriptar.

3. Rondas de cifrado: el número de rondas depende de la longitud de clave utilizada, esto es, 10 rondas en AES128, 12 en AES192 o 14 en AES256. En cada ronda tienen lugar las siguientes operaciones:

  • SubBytes: se trata de una substitución alfabética simple, en la cual cada byte del bloque original se sustituye por un equivalente mediante una caja-S.
  • ShiftRows: en la transformación ShiftRow los bytes de las casillas de la matriz se desplazan cíclicamente hacia la izquierda.
  • MixColumns: esta transformación contenida en el algoritmo AES consiste en mezclar los datos dentro de las columnas de la tabla. Este paso se basa en un recálculo de cada casilla, para lo cual las columnas se someten a una multiplicación matricial. Los resultados se unen mediante XOR.
  • KeyAddition: al final de cada ronda se produce una nueva KeyAddition, es decir, una unión con la subclave, que se apoya, como en la etapa inicial, en la unión por XOR del bloque de datos o los bytes de la matriz con la subclave actual.

4. Etapa final: Esta es la última ronda de cifrado que, al contrario que las rondas anteriores, no contiene transformaciones del tipo MixColumns, comprendiendo únicamente las operaciones SubBytes, ShiftRows y KeyAddition. El resultado de esta ronda final es el texto cifrado.

El descifrado de datos encriptados con AES se basa en la inversión del algoritmo, que no solo guarda relación con la secuencia de pasos sino también con las operaciones ShiftRow, MixColumns und SubBytes, que también han de ver invertida su orientación.

AES ha demostrado una elevada seguridad debido a su algoritmo, sin conocerse bis dato ningún ataque relevante. La longitud de clave de 128 bits anula la eficacia de los ataques de fuerza bruta y las operaciones ShiftRows y MixColumns son las responsables de la mezcla óptima de los bits, porque, en definitiva, cada bit depende de la clave. Por su sencilla implementación y gran velocidad, AES se utiliza como estándar de cifrado en WPA2, SSH e IPSec y su algoritmo se usa para cifrar archivos comprimidos como 7-Zip o RAR.

Sin embargo, la información encriptada con AES solo está segura de los ataques externos mientras la clave permanezca en secreto. Como solo se usa una sola clave tanto para el cifrado como para el descifrado, este algoritmo padece los mismos problemas que todos los simétricos en relación con el intercambio de la clave, de tal modo que el uso seguro de AES se limita a aquellos campos de aplicación que no requieren un intercambio de claves o que lo permiten en un canal seguro.

No obstante, la comunicación encriptada en Internet requiere que los datos se cifren en un ordenador y se descifren en otro. Es aquí donde se han consolidado sistemas criptográficos asimétricos que posibilitan el intercambio seguro de claves simétricas o que funcionan sin necesidad de este intercambio.

Como alternativa a AES también se pueden utilizar los algoritmos simétricos MARS, RC6, Serpent y Twofish, también basados en el cifrado por bloques y también finalistas en el mismo concurso que ganó finalmente el algoritmo Rijndael. El predecesor de Twofish, Blowfish, también se sigue usando. Junto a estos, también destaca el cifrado de flujo Salsa20, desarrollado en 2005 por Daniel J. Bernstein y que se cuenta entre los finalistas del proyecto eSTREAM europeo.

Criptografía asimétrica

Mientras que en la criptografía simétrica se utiliza la misma clave en ambas partes de la comunicación, en una comunicación cifrada de forma asimétrica ambos interlocutores generan un par de claves en cada lado, de modo que cada uno dispone de dos claves, una pública y una privada. Para poder comunicarse de forma encriptada, cada parte ha de dar a conocer su clave pública, lo que suele tener lugar mediante el servidor de claves. Es lo que se conoce como método de clave pública y privada. La clave privada permanece a buen recaudo y es aquí donde reside la fortaleza de los sistemas criptográficos asimétricos: al contrario que en los simétricos, la clave privada no se conoce.

En la criptografía asimétrica las claves públicas son necesarias para el proceso de cifrado, así como también permiten comprobar firmas digitales y verificar usuarios. Por el contrario, las claves privadas se utilizan para descifrar la información y posibilitan la creación de firmas digitales o autenticarse frente a otros usuarios.

Un ejemplo:

El usuario A quiere enviar un mensaje encriptado al usuario B. Para ello, el usuario A necesita la clave pública de B. La clave pública de B permite a A cifrar un mensaje de tal modo que solo pueda ser descifrado con la clave privada de B. A excepción de B, no hay nadie que tenga la posibilidad de leer el mensaje. Ni siquiera A tiene la posibilidad, tras haber cifrado el mensaje, de descifrarlo.

La ventaja del cifrado simétrico consiste, así, en que cualquiera puede utilizar la clave pública de B para encriptar mensajes que solo B puede descifrar con la clave privada secreta. Como solo se intercambia la pública, se puede prescindir de cualquier otro canal más seguro. Sin embargo, la desventaja de tal procedimiento es que B no puede estar seguro de que el mensaje proviene realmente de A, pues, teóricamente, un tercero, al que llamaremos C, podría utilizar la clave pública de B para cifrar mensajes con la intención, por ejemplo, de distribuir malware. Por otro lado, A tampoco puede confiar que esta clave pública sea en realidad la de B. En este caso, C también podría crear una clave pública y hacerla pasar por la de B para captar mensajes de A a B. Es por eso que la criptografía asimétrica necesita un mecanismo para poder probar la autenticidad de los participantes en la comunicación.

Esta es la función de los certificados y las firmas digitales.

  • Los certificados digitales permiten comprobar la autenticidad de las claves públicas de los interlocutores. Entre ellos el X.509 se ha consolidado como estándar, encontrando aplicación, por ejemplo, en la transferencia cifrada de datos TLS/SSL con HTTPS o en el cifrado de correos electrónicos mediante S/MIME.
  • Si el certificado digital tiene la misión de verificar la clave pública, la firma digital se utiliza para identificar inequívocamente al emisor de un mensaje encriptado. Para ello, el autor del mensaje utiliza su clave privada para generar una firma que el destinatario verifica con ayuda de la clave pública del emisor. La autenticidad de las firmas digitales se puede garantizar mediante infraestructuras jerárquicas, como ocurre en el sistema de comunicación electrónica alemán De-Mail o mediante una estructura en red como la que propone la alternativa Web of trust (WOT) o red de confianza, en la cual los usuarios se verifican mutuamente, directa o indirectamente, utilizando sus claves privadas.

En 1977 los matemáticos Rivest, Shamir y Adleman publicaron el primer algoritmo de cifrado asimétrico. Bautizado a partir de sus propios nombres, el método RSA se basa en funciones unidireccionales con trampdoor ("trampilla") y se puede utilizar tanto para la encriptación de datos como para generar firmas digitales.

Rivest, Shamir, Adleman (RSA)

RSA es considerado uno de los métodos más seguros y mejor descritos de cifrado con clave pública. La idea de utilizar una clave pública para la codificación y una privada para el descifrado se remonta a los criptógrafos Whitfield Diffie y Martin Hellman, que en 1976 publicaron, con el protocolo de intercambio de claves Diffie-Hellman (DH), un sistema que permite a dos interlocutores acordar una clave secreta en un canal inseguro. Para ello partieron de los denominados puzles de Merkles, un protocolo de intercambio de claves desarrollado en 1974 por Ralph Merkle que utiliza problemas computacionales medianamente complejos para evitar intrusiones. Es por eso que también se habla entonces de DHM o protocolo de Diffie-Hellman-Merkle, aún usado hoy día para gestionar claves privadas en la criptografía simétrica.

Los investigadores utilizaron funciones matemáticas unidireccionales cuyo cálculo directo es sencillo, pero muy complejo a la inversa, ya que requiere muchas operaciones computacionales. Un mérito de Diffie y Hellman en este sentido lo constituye el concepto de "trampilla". Ya en la publicación del algoritmo se habla de atajos escondidos que han de permitir que la inversión de una función de un solo sentido se realice más rápido. Los autores no proporcionaron ninguna prueba, pero motivaron con su teoría de la trampdoor a que numerosos criptógrafos llevaran a cabo sus propias investigaciones, entre ellos, también Rivest, Shamir y Adleman, que también buscaron estos atajos con la intención primera de probar la teoría. Su investigación, sin embargo, les llevó en una dirección diferente hasta desembocar en el protocolo de cifrado RSA, hoy considerado el primer algoritmo publicado científicamente que permite la transferencia de datos cifrados sin intercambio de claves privadas.

El cifrado RSA utiliza un algoritmo fundamentado en la multiplicación de grandes números primos. Mientras que, en general, no representa ningún problema multiplicar dos números primos elevados a 100, a 200 o a 300, no existe hasta hoy ningún algoritmo suficientemente eficaz que sea capaz de descomponer el producto en sus factores primos. Este es el problema de la factorización de números enteros, que se puede entender a la vista del siguiente ejemplo:

Si se multiplican los números primos 14.629 y 30.491 se obtiene el producto 446.052.839. Este se descompone en cuatro divisores: 1, sí mismo, y los dos números primos que se multiplicaron. Si se descartan los dos primeros divisores, que son divisibles por 1 y por sí mismos, se obtienen los dos valores iniciales 14.629 y 30.491.  Este es el esquema base de la generación de claves por RSA. Tanto la clave pública como la privada representan dos pares de números:

Clave pública: (e, N)

Clave privada: (d, N)

N es el denominado módulo RSA, contenido en ambas claves y producto de dos grandes primos escogidos al azar, p y q (N = p x q). Para generar la clave pública también se necesita el número e, también escogido al azar, si bien con ciertas limitaciones. Cuando se combina con N se obtiene la clave pública, disponible como texto plano para cada interlocutor.

Para generar la clave privada se necesita también d, un valor que resulta de los números primos generados aleatoriamente p y q, así como del número aleatorio e en un cálculo basado en la función pi (φ) de Euler.

Los números enteros involucrados en el cálculo de la clave privada han de mantenerse en secreto para poder garantizar la seguridad del cifrado de RSA. Sin embargo, el producto de ambos primos puede ser utilizado en la clave pública en texto en claro, pues se supone que hoy no existe ningún algoritmo suficientemente eficiente que pueda descomponer en sus factores al producto de dos grandes primos en un tiempo relevante. No es posible, de este modo, calcular p y q de N, a no ser que se pueda acortar esta operación con una "trampilla", que equivale al valor d, solo conocida por el poseedor de la clave privada.

La seguridad del algoritmo RSA depende en gran medida del grado de desarrollo de la tecnología. La potencia de cálculo de los ordenadores se dobla casi cada dos años, lo que significa que no se puede descartar que en un plazo previsible se disponga de un procedimiento capaz de descomponer factores primos en los tamaños habituales hoy día. En este caso, RSA ofrece la posibilidad de ajustar el algoritmo al desarrollo tecnológico, involucrando primos aún más grandes en el cálculo de la clave.

Cifrado por clave pública basada en IP

La debilidad más importante de la criptografía asimétrica es, como se ha visto, la autentificación de los interlocutores. En los métodos clásicos con clave pública esta no guarda ninguna relación con la identidad de su usuario, por lo que, si un tercero consigue hacerse pasar por uno de los interlocutores implicados en la comunicación encriptada con ayuda de su propia clave pública, el sistema criptográfico puede ser invalidado por completo, sin que haya sido necesario atacar directamente al algoritmo o a la clave privada. Es por eso que ya en 1984, uno de los desarrolladores del RSA, Adi Shamir, propuso un método basado en un ID, apoyado en el principio asimétrico pero que intenta compensar su punto débil fundamental.

En el procedimiento de codificación basado en la identidad, en inglés identity-based encryption (IBE), la clave pública de un interlocutor no se crea en dependencia de la clave privada, sino que se calcula a partir de un identificador inequívoco, que podría ser, en función del contexto, una dirección de correo electrónico o un dominio. Esto hace innecesaria la autentificación de las claves públicas mediante organismos oficiales de certificación, cuyo papel verificador adquiere ahora otra entidad, el denominado generador de clave privada o private key generator (PKG). Este consiste en un algoritmo central por el cual el destinatario de un mensaje cifrado puede obtener una clave de descifrado relativo a su identidad.

Esta teoría resuelve así un problema fundamental de la criptografía asimétrica, aunque conduce a otras dos vulnerabilidades. Un punto crítico primordial gira en torno a la forma como se ha de transmitir la clave privada del PKG al destinatario del mensaje encriptado, el viejo problema del intercambio de claves. Otro inconveniente lo representa la circunstancia de que, con el PKG, existe otra entidad que conoce la clave descifradora además del destinatario, lo que despoja a la clave de su privacidad y la hace susceptible de ser mal utilizada. Teóricamente, el generador de claves tendría la posibilidad de descifrar todos los mensajes sin estar autorizado para ello. Una forma de evitar esta problemática es que el par de claves sea generado en el propio equipo mediante un software de código abierto.

El método basado en ID más conocido se remonta al esquema Boneh-Franklin que desarrollaron los criptógrafos Dan Boneh y Matthew K. Franklin en 2001.

Criptografía híbrida

Los métodos de cifrado híbrido consisten en la utilización de algoritmos tanto simétricos como asimétricos en la transferencia de datos en Internet. El objetivo de esta combinación es compensar las debilidades de un sistema con las ventajas de otro.

Métodos de cifrado simétrico como AES se consideran seguros según el estado actual de la tecnología y permiten procesar también grandes volúmenes de datos de forma rápida y operativamente eficiente. Sin embargo, tal como está diseñado su algoritmo, sobre la base de una clave privada común que se intercambia entre los interlocutores de forma segura, sitúa a los usuarios de los métodos simétricos ante el problema del intercambio de claves, únicamente soluble con algoritmos asimétricos. Métodos como el RSA se apoyan en una separación estricta de ambas claves, la privada y la pública, de tal modo que permiten esquivar el problema del intercambio de la clave secreta.

No obstante, RSA solo ofrece protección fiable ante análisis criptográficos en el caso de una longitud de clave suficientemente grande de 1976 bits como mínimo, porque deriva en largas operaciones de cálculo que dejan al algoritmo fuera de juego en el cifrado y descifrado de grandes cantidades de datos. Además, el texto secreto resultante es mucho más grande que el original.

En la criptografía híbrida los algoritmos asimétricos ya no se utilizan para encriptar datos útiles, sino para asegurar la transferencia de una clave de sesión simétrica en un canal no protegido. Esta clave permite, a su vez, descifrar eficazmente un texto codificado con ayuda de algoritmos simétricos.

El desarrollo de un cifrado híbrido se puede mostrar en tres etapas:

1. Gestión de claves: en los sistemas híbridos el cifrado simétrico de un mensaje se enmarca en un proceso de cifrado asimétrico. Para ello se ha de generar tanto una clave asimétrica (a) como otra simétrica (b):

  • Antes de llegar a la transferencia cifrada de datos, ambos interlocutores generan un par asimétrico de claves, una privada y otra pública. A continuación se intercambian las claves públicas, idealmente de forma segura con un mecanismo de autentificación. El par asimétrico de claves sirve para cifrar y descifrar una clave de sesión simétrica y se utiliza generalmente más de una vez.
  • El cifrado y descifrado de un texto en claro tiene lugar a partir de la clave de sesión simétrica, generada de nuevo por el emisor de un mensaje cada vez que da comienzo un proceso de cifrado.

2. Encriptado: si ha de enviarse un mensaje en Internet de manera segura, el emisor crea en primer lugar una clave de sesión simétrica con la cual se cifran los datos útiles. Una vez hecho esto, es cuando interviene la clave pública del receptor. Esta se utiliza para cifrar asimétricamente la clave de sesión, de tal modo que tanto los datos útiles como la clave simétrica están disponibles de forma cifrada y se pueden enviar sin remordimientos.

3. Descifrado: cuando el mensaje cifrado llega junto a la clave de sesión encriptada al destinatario, este utiliza su clave privada para descifrar asimétricamente a la clave de sesión, la cual sirve para descifrar finalmente los datos cifrados simétricamente.

Este esquema permite el cifrado y descifrado eficiente de datos útiles, incluso de gran volumen, a una gran velocidad. Al encriptarse asimétricamente solo una clave de sesión, se evitan los largos tiempos de procesamiento propios de los logaritmos asimétricos, así como el problema del intercambio de claves se reduce al problema de la autenticación de los usuarios, que se resuelve con las firmas y los certificados digitales, como en la criptografía asimétrica.

La criptografía híbrida se utiliza en la forma de IPSec en la comunicación segura a través de redes IP no protegidas y como TLS/SSL en el protocolo de transferencia de hipertexto seguro o HTTPS, así como también es la base para estándares de cifrado como Pretty Good Privacy (PGP), GnuPG y S/MIME, utilizados en el cifrado del correo electrónico.

Una combinación muy habitual en la criptografía híbrida consiste en el cifrado simétrico de los datos útiles mediante AES y el consiguiente descifrado asimétrico de la clave de sesión con RSA. También se puede gestionar la clave de sesión con el método Diffie-Hellman, que aunque en su variante Ephemeral Diffie-Hellman (EDH) puede proporcionar Forward Secrecy (si una clave es hackeada la anterior es válida), sigue siendo muy vulnerable a ataques de hombre en medio (Man in the middle). El algoritmo de Elgamal, desarrollado en 1985 por Taher Elgamal, representa el relevo a RSA. Basado también en la idea del intercambio de claves DH, se utiliza en la versión actual del programa de encriptado PGP.

Cifrado Protocolos Seguridad