La cri­p­to­gra­fía o el cifrado designan a un pro­ce­di­mie­n­to que traduce un texto sin formato (plain text o texto plano) en una secuencia in­i­n­te­li­gi­ble de ca­ra­c­te­res mediante una clave. El objetivo es que el contenido del texto secreto re­su­l­ta­n­te o cri­p­to­gra­ma (texto cifrado) solo sea accesible para aquellos que disponen de la clave para de­s­ci­frar­lo. Aunque ex­pre­sio­nes tales como "texto plano" o "texto cifrado" provengan de la es­tra­te­gia militar, los métodos cri­p­to­grá­fi­cos pueden ser también aplicados a otro tipo de in­fo­r­ma­ción ele­c­tró­ni­ca como mensajes de voz, archivos de imagen o códigos de pro­gra­ma­ción, además de a mensajes de texto.

El cifrado tiene como finalidad proteger archivos, unidades de disco o di­re­c­to­rios de in­tru­sio­nes o tra­n­s­mi­tir datos de forma co­n­fi­de­n­cial. Ya en la an­ti­güe­dad se uti­li­za­ban métodos cri­p­to­grá­fi­cos sencillos que se reducían en primera instancia a la co­di­fi­ca­ción de la in­fo­r­ma­ción que se quería proteger, pe­r­mu­ta­n­do ca­ra­c­te­res aislados, palabras o frases enteras del texto plano del mensaje (cifrado por tra­n­s­po­si­ción o pe­r­mu­ta­ción) o su­b­s­ti­tu­ye­n­do los ca­ra­c­te­res por co­m­bi­na­cio­nes al­te­r­na­ti­vas (cifrado por su­b­s­ti­tu­ción).

Para de­co­di­fi­car un texto en­cri­p­ta­do es necesario que el de­s­ti­na­ta­rio conozca la regla por la cual se ha cifrado el texto. En el cifrado por tra­n­s­po­si­ción, las pe­r­mu­ta­cio­nes suelen llevarse a cabo a partir de una matriz (matriz de tra­n­s­po­si­ción) que ha de conocerse o poderse re­co­n­s­truir. El cifrado por su­s­ti­tu­ción se basa en una or­de­na­ción tabular de ca­ra­c­te­res 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 co­rre­s­po­n­de­n­cia militar de ojos ajenos, el astuto estratega de­sa­rro­lló el de­no­mi­na­do cifrado César, también conocido como cifrado por de­s­pla­za­mie­n­to o código de César, que se basaba en la su­b­s­ti­tu­ción al­fa­bé­ti­ca simple y consistía en su­b­s­ti­tuir cada letra por la que se encuentra algunas po­si­cio­nes más adelante en el alfabeto, en su caso, tres. La tabla de co­di­fi­ca­ción resulta así:

El número de po­si­cio­nes que se desplaza cada carácter puede ser co­n­si­de­ra­do como la clave de este tipo de en­cri­p­ta­ción, que no se muestra como número (3), sino como la letra co­rre­s­po­n­die­n­te en el alfabeto, "C" en el caso de un de­s­pla­za­mie­n­to de tres po­si­cio­nes.

A di­fe­re­n­cia del principio que sustenta el cifrado César, re­la­ti­va­me­n­te fácil de des­en­tra­ñar, la co­di­fi­ca­ción moderna se basa en funciones ma­te­má­ti­cas de gran co­m­ple­ji­dad, los llamados al­go­ri­t­mos, que combinan la su­b­s­ti­tu­ción y la tra­n­s­po­si­ción y son pa­ra­me­tri­za­das mediante claves en la forma de co­n­tra­se­ñas y códigos binarios. Estos métodos de cifrado re­pre­se­n­tan una di­fi­cu­l­tad mucho más elevada para los cri­p­to­ana­li­s­tas, de tal forma que hoy muchos sistemas cri­p­to­grá­fi­cos co­n­so­li­da­dos aún no pueden ser de­s­ci­fra­dos con los medios de que se dispone en la ac­tua­li­dad.

Cómo se encriptan los datos

Un método de cifrado se compone fu­n­da­me­n­ta­l­me­n­te de dos elementos, un algoritmo cri­p­to­grá­fi­co y una o más claves secretas. Mientras que el algoritmo describe el método de en­cri­p­ta­do (p. ej., "desplaza cada letra a lo largo de la secuencia del alfabeto"), la clave pro­po­r­cio­na el parámetro ("C = tres po­si­cio­nes"). Esto es lo que permite definir al cifrado como un pro­ce­di­mie­n­to por el cual se entrega un texto en claro y una clave al algoritmo cri­p­to­grá­fi­co y se obtiene un texto cifrado.

Clave digital

En la co­di­fi­ca­ción moderna se utilizan se­cue­n­cias de bits como claves digitales. Un criterio esencial para la seguridad del en­cri­p­ta­do es la longitud en bits de las claves, la cual indica la medida lo­ga­rí­t­mi­ca del número de co­m­bi­na­cio­nes posibles que pueden usarse. También se habla en este caso de espacio de po­si­bi­li­da­des de claves o espacio de claves, el cual, cuanto más amplio, más re­si­s­te­n­te es contra los llamados ataques de fuerza bruta (probar una tras otra todas las co­m­bi­na­cio­nes posibles).

El código César permite explicar este tipo de ataque in­fo­r­má­ti­co. El espacio de claves en este método de co­di­fi­ca­ció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 co­m­bi­na­cio­nes, 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 co­m­bi­na­cio­nes. El Advanced En­cr­y­p­tion Standard o AES, por ejemplo, permite escoger entre lo­n­gi­tu­des de clave de 128, 192 o 256 bits, lo cual aumenta el abanico de claves posibles.

Un cifrado de 128 bits equivale a 2128 di­fe­re­n­tes co­m­bi­na­cio­nes o claves posibles, lo que co­rre­s­po­n­de a más de 340 millones de mil millones de mil millones de mil millones de co­m­bi­na­cio­nes (340 millones de qui­n­ti­llo­nes). Con una longitud de 192 bits, la cantidad de co­m­bi­na­cio­nes posibles se eleva a más de 115 duo­de­ci­llo­nes (1.000.000)12. Incluso contando con la te­c­no­lo­gía necesaria, duraría una eternidad probar todas las co­m­bi­na­cio­nes posibles, de modo que los ataques de fuerza bruta en un espacio AES no son pra­c­ti­ca­bles con la te­c­no­lo­gía di­s­po­ni­ble a día de hoy.

El principio de Ke­r­c­kho­f­fs

Los ataques de fuerza bruta ya no suponen una amenaza seria para los métodos modernos de cifrado debido a las lo­n­gi­tu­des de clave actuales. En lugar de ello, los cri­p­to­ana­li­s­tas buscan de­bi­li­da­des en el algoritmo que permitan reducir el tiempo de cálculo necesario para descifrar datos en­cri­p­ta­dos. Los ataques de canal lateral, por otro lado, utilizan la in­fo­r­ma­ción que se obtiene im­ple­me­n­ta­n­do un sistema cri­p­to­grá­fi­co en un di­s­po­si­ti­vo o en un software. En este caso mantener en secreto el método de en­cri­p­ta­do sería co­n­tra­pro­du­ce­n­te para su seguridad.

Siguiendo el principio de Ke­r­c­kho­f­fs, la seguridad de un sistema de cifrado no se basa en mantener en secreto el algoritmo, sino la clave. El cri­p­tó­gra­fo holandés que da nombre a este principio, Auguste Ke­r­c­kho­f­fs, formuló ya en 1883 uno de los fu­n­da­me­n­tos de la cri­p­to­gra­fía moderna: para encriptar de forma fiable un texto en claro es su­fi­cie­n­te con otorgar un parámetro secreto (una clave) a un método ma­te­má­ti­co conocido y bien descrito. Esta su­po­si­ción se ha mantenido hasta hoy en lo esencial.

Como muchos otros campos de la in­ge­nie­ría de software, también el de­sa­rro­llo de me­ca­ni­s­mos de cifrado se basa en la confianza en el código abierto en cuanto a la seguridad. Una im­ple­me­n­ta­ción co­n­se­cue­n­te del principio de Ke­r­c­kho­f­fs permite descubrir los errores en los al­go­ri­t­mos cri­p­to­grá­fi­cos con más rapidez, ya que tales pro­ce­di­mie­n­tos han de resistir la crítica del sector es­pe­cia­li­za­do.

La expansión de la clave: de la co­n­tra­se­ña a la clave

Aquellos usuarios con interés en cifrar o descifrar datos no trabajan ge­ne­ra­l­me­n­te con claves, sino con se­cue­n­cias más ma­ne­ja­bles, las co­n­tra­se­ñas. Una co­n­tra­se­ña segura está compuesta por una secuencia de 8 a 12 ca­ra­c­te­res, se compone de letras, cifras y símbolos y, frente a las se­cue­n­cias de bits, tienen una ventaja decisiva, y es que las personas pueden re­co­r­dar­las sin gran esfuerzo. Sin embargo, debido a su escasa longitud, las co­n­tra­se­ñas no son adecuadas como claves de cifrado. Es por ello que muchos pro­ce­di­mie­n­tos de cifrado contienen un paso in­te­r­me­dio en el cual se tra­n­s­fo­r­ma una co­n­tra­se­ñ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é­c­ni­ca­me­n­te posible.

Un método muy común para calcular las claves desde las co­n­tra­se­ñas lo re­pre­se­n­ta la función de­ri­va­do­ra de claves PBKDF2 (Password-Based Key De­ri­va­tion Function 2), método por el cual se añade una secuencia se­mi­alea­to­ria de bits, el de­no­mi­na­do valor de sal, a la co­n­tra­se­ña y, uti­li­za­n­do funciones hash cri­p­to­grá­fi­cas, se deriva la secuencia de bits con la longitud deseada.

Las funciones hash son funciones re­si­s­te­n­tes a co­li­sio­nes de un solo sentido o uni­di­re­c­cio­na­les, es decir, que son fáciles de calcular pero, por el contrario, muy difíciles de invertir. En cri­p­to­gra­fía, un pro­ce­di­mie­n­to se califica como seguro cuando di­fe­re­n­tes do­cu­me­n­tos reciben di­fe­re­n­tes hashes. Aquellas co­n­tra­se­ñas que fueron tra­n­s­fo­r­ma­das en claves mediante funciones uni­di­re­c­cio­na­les solo se pueden re­co­n­s­truir con un intenso esfuerzo de co­mpu­tación, y no siempre. Esto puede en­te­n­de­r­se 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 te­le­fó­ni­co, se puede convertir en un problema irre­so­lu­ble.

Cuando se utiliza PBKDF2, el cálculo ma­te­má­ti­co se ejecuta en varias ite­ra­cio­nes (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 co­n­tra­se­ña con tablas arcoíris o tablas rainbow, un patrón de ataque que permite derivar una co­n­tra­se­ña de un valor hash al­ma­ce­na­do. Otros pro­ce­di­mie­n­tos de hash de co­n­tra­se­ñas son los llamados sctypt, bcrypt y LM-Hash, aunque este último está co­n­si­de­ra­do obsoleto y poco seguro.

El problema del in­te­r­ca­m­bio de claves

Una cuestión central de la cri­p­to­gra­fía hace re­fe­re­n­cia al modo en que se encripta la in­fo­r­ma­ción en un lugar y al modo en que se descifra en otro. Ya Julio César tuvo que en­fre­n­tar­se a esta pro­ble­má­ti­ca, de tal forma que, si el caudillo quería enviar, por ejemplo, un mensaje cifrado desde Roma al frente germánico, tenía que ase­gu­rar­se de que el de­s­ti­na­ta­rio fuera capaz de de­s­ci­frar­lo. La solución pasaba por enviar la clave secreta junto con el mensaje, pero, ¿cómo en­tre­gar­la a la persona correcta sin que cayera en manos ajenas? En el ámbito de la co­di­fi­ca­ción in­fo­r­má­ti­ca, los cri­p­tó­gra­fos se enfrentan hoy a la misma pregunta, de modo que, en el de­sa­rro­llo de sistemas cri­p­to­grá­fi­cos y pro­to­co­los de in­te­r­ca­m­bio de claves se han incluido algunas so­lu­cio­nes a este problema propio de la cri­p­to­gra­fía simétrica, que puede ser entendido como la principal mo­ti­va­ción que ha llevado al de­sa­rro­llo de pro­ce­di­mie­n­tos de cifrado asi­mé­tri­co.

Cri­p­to­gra­fía simétrica, asi­mé­tri­ca e híbrida: di­fe­re­n­cia­ción básica

La cri­p­to­gra­fía moderna di­fe­re­n­cia de forma fu­n­da­me­n­tal entre los métodos si­mé­tri­cos y los asi­mé­tri­cos 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 de­s­ci­fra­do de los datos, de tal forma que, si dos in­te­r­lo­cu­to­res quieren in­te­r­ca­m­biar un mensaje secreto, se ha de encontrar la forma de tra­n­s­mi­tir también la clave de de­s­ci­fra­do. En los sistemas asi­mé­tri­cos, 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 cri­p­to­gra­fía simétrica y la asi­mé­tri­ca se habla de cri­p­to­gra­fía híbrida.

Cri­p­to­gra­fía simétrica

Hasta la década de 1970, el cifrado de la in­fo­r­ma­ción se basaba en la cri­p­to­gra­fía simétrica, cuyos orígenes se remontan a métodos de la an­ti­güe­dad como el me­n­cio­na­do código César. El principio básico que la sustenta es que tanto el cifrado como el de­s­ci­fra­do se realizan con ayuda de una sola clave secreta. Esto implica que los dos in­te­r­lo­cu­to­res han de disponer de una copia de la clave, que se ha de proteger de terceros para no arriesgar la in­fo­r­ma­ción secreta. Esto hace que a este pro­ce­di­mie­n­to se le conozca también como cri­p­to­gra­fía de clave secreta.

Si la clásica cri­p­to­gra­fía simétrica utiliza el alfabeto para traducir un texto plano en un texto cifrado, el en­cri­p­ta­do in­fo­r­má­ti­co se realiza mediante bits. En este caso se di­fe­re­n­cia 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 co­rre­la­cio­na 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 co­rre­s­po­n­den con otros di­fe­re­n­tes. Resulta un cifrado de longitud fija.

Los al­go­ri­t­mos de la cri­p­to­gra­fía simétrica se basan ha­bi­tua­l­me­n­te en ope­ra­cio­nes tan sencillas como la su­b­s­ti­tu­ción y la pe­r­mu­ta­ción, que hoy se aplican al texto en claro de forma combinada y en rondas o ite­ra­cio­nes co­n­se­cu­ti­vas, así como en las adiciones, las mu­l­ti­pli­ca­cio­nes, la ari­t­mé­ti­ca modular y las ope­ra­cio­nes XOR.

A co­n­ti­nua­ción, de­s­cri­bi­mos dos métodos conocidos de cri­p­to­gra­fía simétrica: el estándar de co­di­fi­ca­ción de datos (Data En­cr­y­p­tion Standard, DES), hoy superado, y su sucesor el estándar de co­di­fi­ca­ción avanzado (Advanced En­cr­y­p­tion Standard, AES).

Data En­cr­y­p­tion Standard (DES)

Se trata de un método de cifrado de­sa­rro­lla­do por IBM en la década de 1970 y es­ta­n­da­ri­za­do por el Instituto Nacional de Es­tá­n­da­res y Te­c­no­lo­gía (NIST) no­r­te­ame­ri­cano en 1977. Como primer método de en­cri­p­ta­ción in­fo­r­má­ti­ca y tan seguro como permitían los es­tá­n­da­res de la época, DES sienta las bases de la cri­p­to­gra­fí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 cri­p­to­grá­fi­co fue de­s­ci­fra­do en 50 días con 12 es­ta­cio­nes HP-9735 en un primer cri­p­to­aná­li­sis ex­pe­ri­me­n­tal. El estándar actual de la te­c­no­lo­gía ha hecho a una clave DES tan vu­l­ne­ra­ble 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 de­s­ca­r­ta­dos después. En DES, de esta forma, solo se dispone de 56 bits efectivos para el cifrado. El algoritmo de cifrado en DES se es­tru­c­tu­ra en una red Feistel que combina su­s­ti­tu­cio­nes y pe­r­mu­ta­cio­nes en 16 rondas. Este esquema, que toma su nombre del empleado de IBM Horst Feistel, se puede describir en cuatro fases: 1. Pe­r­mu­ta­ción de entrada: el bloque de texto plano de 64 bits se somete a una pe­r­mu­ta­ció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. Pe­r­mu­ta­ción de la clave: Los 56 bits de la clave re­le­va­n­tes para el cifrado también se someten a una pe­r­mu­ta­ció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í­cli­ca­me­n­te hacia la izquierda. Esto debe ga­ra­n­ti­zar que en cada ronda de cifrado se crea una subclave diferente. Se­gui­da­me­n­te 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 pe­r­mu­ta­ció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 su­b­s­ti­tu­ción: tras mezclarlo con la subclave, este bloque de 48 bits se divide en ocho bloques de 6 bits. Estos bloques son pro­ce­sa­dos por las cajas de su­b­s­ti­tu­ción, que su­b­s­ti­tu­yen 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 pe­r­mu­ta­ció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 inu­ti­li­za­do 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. Pe­r­mu­ta­ció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 pe­r­mu­ta­ción de salida inversa a la de entrada. El texto re­su­l­ta­n­te es un mensaje cifrado. Para descifrar un texto co­di­fi­ca­do según DES se sigue el mismo esquema en sentido inverso. Este gráfico re­pre­se­n­ta es­que­má­ti­ca­me­n­te el fu­n­cio­na­mie­n­to de la función de Feistel en DES. Las ope­ra­cio­nes XOR se re­pre­se­n­tan 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 co­n­se­cue­n­cia, 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 pro­ce­di­mie­n­to de pe­r­mu­ta­ción de claves, que crea 16 subclaves casi idénticas, también se considera demasiado débil para los es­tá­n­da­res modernos. Triple DES o 3DES re­pre­se­n­ta una variante de DES que ejecuta el cifrado en tres rondas co­n­se­cu­ti­vas, 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 su­b­s­ti­tui­do de forma de­fi­ni­ti­va por el algoritmo, igua­l­me­n­te simétrico, del estándar avanzado o AES, mucho más rápido y eficaz.

Advanced En­cr­y­p­tion 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 de­sa­rro­llo te­c­no­ló­gi­co, de tal manera que se hacía necesario contar con otro más moderno. El algoritmo Rijndael, de­sa­rro­lla­do por los entonces es­tu­dia­n­tes Vincent Rijmen y Joan Daemen, se consolidó como el sucesor tras ganar la co­n­vo­ca­to­ria que lanzó el NIST en 1997 para de­sa­rro­llar el AES, un estándar de cifrado adaptado a la in­fo­r­ma­ció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 co­n­se­cu­ti­vas con ayuda de una red de su­b­s­ti­tu­ción-pe­r­mu­ta­ció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 fu­n­cio­na­mie­n­to del algoritmo se puede su­b­di­vi­dir 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 ne­ce­sa­rias 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 bi­di­me­n­sio­nal 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 si­guie­n­tes ope­ra­cio­nes:

  • SubBytes: se trata de una su­b­s­ti­tu­ción al­fa­bé­ti­ca simple, en la cual cada byte del bloque original se sustituye por un equi­va­le­n­te mediante una caja-S.
  • ShiftRows: en la tra­n­s­fo­r­ma­ción ShiftRow los bytes de las casillas de la matriz se desplazan cí­cli­ca­me­n­te hacia la izquierda.
  • Mi­x­Co­lu­m­ns: esta tra­n­s­fo­r­ma­ció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 mu­l­ti­pli­ca­ción matricial. Los re­su­l­ta­dos se unen mediante XOR.
  • Ke­yA­d­di­tion: al final de cada ronda se produce una nueva Ke­yA­d­di­tion, 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 an­te­rio­res, no contiene tra­n­s­fo­r­ma­cio­nes del tipo Mi­x­Co­lu­m­ns, co­m­pre­n­die­n­do úni­ca­me­n­te las ope­ra­cio­nes SubBytes, ShiftRows y Ke­yA­d­di­tion. El resultado de esta ronda final es el texto cifrado. El de­s­ci­fra­do de datos en­cri­p­ta­dos 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 ope­ra­cio­nes ShiftRow, Mi­x­Co­lu­m­ns und SubBytes, que también han de ver invertida su orie­n­ta­ción. AES ha de­mo­s­tra­do 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 ope­ra­cio­nes ShiftRows y Mi­x­Co­lu­m­ns son las re­s­po­n­sa­bles de la mezcla óptima de los bits, porque, en de­fi­ni­ti­va, cada bit depende de la clave. Por su sencilla im­ple­me­n­ta­ció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 co­m­pri­mi­dos como 7-Zip o RAR. Sin embargo, la in­fo­r­ma­ción en­cri­p­ta­da con AES solo está segura de los ataques externos mientras la clave pe­r­ma­ne­z­ca en secreto. Como solo se usa una sola clave tanto para el cifrado como para el de­s­ci­fra­do, este algoritmo padece los mismos problemas que todos los si­mé­tri­cos en relación con el in­te­r­ca­m­bio de la clave, de tal modo que el uso seguro de AES se limita a aquellos campos de apli­ca­ción que no requieren un in­te­r­ca­m­bio de claves o que lo permiten en un canal seguro. No obstante, la co­mu­ni­ca­ción en­cri­p­ta­da en Internet requiere que los datos se cifren en un ordenador y se descifren en otro. Es aquí donde se han co­n­so­li­da­do sistemas cri­p­to­grá­fi­cos asi­mé­tri­cos que po­si­bi­li­tan el in­te­r­ca­m­bio seguro de claves si­mé­tri­cas o que funcionan sin necesidad de este in­te­r­ca­m­bio. Como al­te­r­na­ti­va a AES también se pueden utilizar los al­go­ri­t­mos si­mé­tri­cos MARS, RC6, Serpent y Twofish, también basados en el cifrado por bloques y también fi­na­li­s­tas en el mismo concurso que ganó fi­na­l­me­n­te el algoritmo Rijndael. El pre­de­ce­sor de Twofish, Blowfish, también se sigue usando. Junto a estos, también destaca el cifrado de flujo Salsa20, de­sa­rro­lla­do en 2005 por Daniel J. Bernstein y que se cuenta entre los fi­na­li­s­tas del proyecto eSTREAM europeo.

Cri­p­to­gra­fía asi­mé­tri­ca

Mientras que en la cri­p­to­gra­fía simétrica se utiliza la misma clave en ambas partes de la co­mu­ni­ca­ción, en una co­mu­ni­ca­ción cifrada de forma asi­mé­tri­ca ambos in­te­r­lo­cu­to­res 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 co­mu­ni­car­se de forma en­cri­p­ta­da, 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 cri­p­to­grá­fi­cos asi­mé­tri­cos: al contrario que en los si­mé­tri­cos, la clave privada no se conoce. En la cri­p­to­gra­fía asi­mé­tri­ca las claves públicas son ne­ce­sa­rias 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 in­fo­r­ma­ción y po­si­bi­li­tan la creación de firmas digitales o au­te­n­ti­car­se frente a otros usuarios. Un ejemplo: El usuario A quiere enviar un mensaje en­cri­p­ta­do 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 de­s­ci­fra­do con la clave privada de B. A excepción de B, no hay nadie que tenga la po­si­bi­li­dad de leer el mensaje. Ni siquiera A tiene la po­si­bi­li­dad, tras haber cifrado el mensaje, de de­s­ci­frar­lo. La ventaja del cifrado simétrico consiste, así, en que cua­l­quie­ra puede utilizar la clave pública de B para encriptar mensajes que solo B puede descifrar con la clave privada secreta. Como solo se in­te­r­ca­m­bia la pública, se puede pre­s­ci­n­dir de cualquier otro canal más seguro. Sin embargo, la de­s­ve­n­ta­ja de tal pro­ce­di­mie­n­to es que B no puede estar seguro de que el mensaje proviene realmente de A, pues, teó­ri­ca­me­n­te, un tercero, al que lla­ma­re­mos C, podría utilizar la clave pública de B para cifrar mensajes con la intención, por ejemplo, de di­s­tri­buir 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 cri­p­to­gra­fía asi­mé­tri­ca necesita un mecanismo para poder probar la au­te­n­ti­ci­dad de los pa­r­ti­ci­pa­n­tes en la co­mu­ni­ca­ción. Esta es la función de los ce­r­ti­fi­ca­dos y las firmas digitales.

  • Los ce­r­ti­fi­ca­dos digitales permiten comprobar la au­te­n­ti­ci­dad de las claves públicas de los in­te­r­lo­cu­to­res. Entre ellos el X.509 se ha co­n­so­li­da­do como estándar, en­co­n­tra­n­do apli­ca­ción, por ejemplo, en la tra­n­s­fe­re­n­cia cifrada de datos TLS/SSL con HTTPS o en el cifrado de correos ele­c­tró­ni­cos mediante S/MIME.
  • Si el ce­r­ti­fi­ca­do digital tiene la misión de verificar la clave pública, la firma digital se utiliza para ide­n­ti­fi­car ine­quí­vo­ca­me­n­te al emisor de un mensaje en­cri­p­ta­do. Para ello, el autor del mensaje utiliza su clave privada para generar una firma que el de­s­ti­na­ta­rio verifica con ayuda de la clave pública del emisor. La au­te­n­ti­ci­dad de las firmas digitales se puede ga­ra­n­ti­zar mediante in­frae­s­tru­c­tu­ras je­rá­r­qui­cas, como ocurre en el sistema de co­mu­ni­ca­ción ele­c­tró­ni­ca alemán De-Mail o mediante una es­tru­c­tu­ra en red como la que propone la al­te­r­na­ti­va Web of trust (WOT) o red de confianza, en la cual los usuarios se verifican mu­tua­me­n­te, directa o in­di­re­c­ta­me­n­te, uti­li­za­n­do sus claves privadas.

En 1977 los ma­te­má­ti­cos Rivest, Shamir y Adleman pu­bli­ca­ron el primer algoritmo de cifrado asi­mé­tri­co. Bautizado a partir de sus propios nombres, el método RSA se basa en funciones uni­di­re­c­cio­na­les con trampdoor ("trampilla") y se puede utilizar tanto para la en­cri­p­ta­ción de datos como para generar firmas digitales.

Rivest, Shamir, Adleman (RSA)

RSA es co­n­si­de­ra­do 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 co­di­fi­ca­ción y una privada para el de­s­ci­fra­do se remonta a los cri­p­tó­gra­fos Whitfield Diffie y Martin Hellman, que en 1976 pu­bli­ca­ron, con el protocolo de in­te­r­ca­m­bio de claves Diffie-Hellman (DH), un sistema que permite a dos in­te­r­lo­cu­to­res acordar una clave secreta en un canal inseguro. Para ello partieron de los de­no­mi­na­dos puzles de Merkles, un protocolo de in­te­r­ca­m­bio de claves de­sa­rro­lla­do en 1974 por Ralph Merkle que utiliza problemas co­mpu­tacio­na­les me­dia­na­me­n­te complejos para evitar in­tru­sio­nes. 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 cri­p­to­gra­fía simétrica.

Los in­ve­s­ti­ga­do­res uti­li­za­ron funciones ma­te­má­ti­cas uni­di­re­c­cio­na­les cuyo cálculo directo es sencillo, pero muy complejo a la inversa, ya que requiere muchas ope­ra­cio­nes co­mpu­tacio­na­les. Un mérito de Diffie y Hellman en este sentido lo co­n­s­ti­tu­ye el concepto de "trampilla". Ya en la pu­bli­ca­ción del algoritmo se habla de atajos es­co­n­di­dos 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 pro­po­r­cio­na­ron ninguna prueba, pero motivaron con su teoría de la trampdoor a que numerosos cri­p­tó­gra­fos llevaran a cabo sus propias in­ve­s­ti­ga­cio­nes, 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 in­ve­s­ti­ga­ción, sin embargo, les llevó en una dirección diferente hasta desem­bo­car en el protocolo de cifrado RSA, hoy co­n­si­de­ra­do el primer algoritmo publicado cie­n­tí­fi­ca­me­n­te que permite la tra­n­s­fe­re­n­cia de datos cifrados sin in­te­r­ca­m­bio de claves privadas.

El cifrado RSA utiliza un algoritmo fu­n­da­me­n­ta­do en la mu­l­ti­pli­ca­ción de grandes números primos. Mientras que, en general, no re­pre­se­n­ta ningún problema mu­l­ti­pli­car dos números primos elevados a 100, a 200 o a 300, no existe hasta hoy ningún algoritmo su­fi­cie­n­te­me­n­te eficaz que sea capaz de de­s­co­m­po­ner el producto en sus factores primos. Este es el problema de la fa­c­to­ri­za­ción de números enteros, que se puede entender a la vista del siguiente ejemplo:

Si se mu­l­ti­pli­can los números primos 14.629 y 30.491 se obtiene el producto 446.052.839. Este se de­s­co­m­po­ne en cuatro divisores: 1, sí mismo, y los dos números primos que se mu­l­ti­pli­ca­ron. Si se descartan los dos primeros divisores, que son di­vi­si­bles por 1 y por sí mismos, se obtienen los dos valores iniciales 14.629 y 30.491.  Este es el esquema base de la ge­ne­ra­ción de claves por RSA. Tanto la clave pública como la privada re­pre­se­n­tan dos pares de números:

Clave pública: (e, N)

Clave privada: (d, N)

N es el de­no­mi­na­do 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 li­mi­ta­cio­nes. Cuando se combina con N se obtiene la clave pública, di­s­po­ni­ble como texto plano para cada in­te­r­lo­cu­tor.

Para generar la clave privada se necesita también d, un valor que resulta de los números primos generados alea­to­ria­me­n­te 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 in­vo­lu­cra­dos en el cálculo de la clave privada han de ma­n­te­ne­r­se en secreto para poder ga­ra­n­ti­zar 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 su­fi­cie­n­te­me­n­te eficiente que pueda de­s­co­m­po­ner 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 de­sa­rro­llo de la te­c­no­lo­gía. La potencia de cálculo de los or­de­na­do­res se dobla casi cada dos años, lo que significa que no se puede descartar que en un plazo pre­vi­si­ble se disponga de un pro­ce­di­mie­n­to capaz de de­s­co­m­po­ner factores primos en los tamaños ha­bi­tua­les hoy día. En este caso, RSA ofrece la po­si­bi­li­dad de ajustar el algoritmo al de­sa­rro­llo te­c­no­ló­gi­co, in­vo­lu­cra­n­do 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 im­po­r­ta­n­te de la cri­p­to­gra­fía asi­mé­tri­ca es, como se ha visto, la au­te­n­ti­fi­ca­ción de los in­te­r­lo­cu­to­res. 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 in­te­r­lo­cu­to­res im­pli­ca­dos en la co­mu­ni­ca­ción en­cri­p­ta­da con ayuda de su propia clave pública, el sistema cri­p­to­grá­fi­co puede ser in­va­li­da­do por completo, sin que haya sido necesario atacar di­re­c­ta­me­n­te al algoritmo o a la clave privada. Es por eso que ya en 1984, uno de los de­sa­rro­lla­do­res del RSA, Adi Shamir, propuso un método basado en un ID, apoyado en el principio asi­mé­tri­co pero que intenta compensar su punto débil fu­n­da­me­n­tal.

En el pro­ce­di­mie­n­to de co­di­fi­ca­ción basado en la identidad, en inglés identity-based en­cr­y­p­tion (IBE), la clave pública de un in­te­r­lo­cu­tor no se crea en de­pe­n­de­n­cia de la clave privada, sino que se calcula a partir de un ide­n­ti­fi­ca­dor ine­quí­vo­co, que podría ser, en función del contexto, una dirección de correo ele­c­tró­ni­co o un dominio. Esto hace in­ne­ce­sa­ria la au­te­n­ti­fi­ca­ción de las claves públicas mediante or­ga­ni­s­mos oficiales de ce­r­ti­fi­ca­ción, cuyo papel ve­ri­fi­ca­dor adquiere ahora otra entidad, el de­no­mi­na­do generador de clave privada o private key generator (PKG). Este consiste en un algoritmo central por el cual el de­s­ti­na­ta­rio de un mensaje cifrado puede obtener una clave de de­s­ci­fra­do relativo a su identidad.

Esta teoría resuelve así un problema fu­n­da­me­n­tal de la cri­p­to­gra­fía asi­mé­tri­ca, aunque conduce a otras dos vu­l­ne­ra­bi­li­da­des. Un punto crítico pri­mo­r­dial gira en torno a la forma como se ha de tra­n­s­mi­tir la clave privada del PKG al de­s­ti­na­ta­rio del mensaje en­cri­p­ta­do, el viejo problema del in­te­r­ca­m­bio de claves. Otro in­co­n­ve­nie­n­te lo re­pre­se­n­ta la ci­r­cu­n­s­ta­n­cia de que, con el PKG, existe otra entidad que conoce la clave de­s­ci­fra­do­ra además del de­s­ti­na­ta­rio, lo que despoja a la clave de su pri­va­ci­dad y la hace su­s­ce­p­ti­ble de ser mal utilizada. Teó­ri­ca­me­n­te, el generador de claves tendría la po­si­bi­li­dad de descifrar todos los mensajes sin estar au­to­ri­za­do para ello. Una forma de evitar esta pro­ble­má­ti­ca 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 de­sa­rro­lla­ron los cri­p­tó­gra­fos Dan Boneh y Matthew K. Franklin en 2001.

Cri­p­to­gra­fía híbrida

Los métodos de cifrado híbrido consisten en la uti­li­za­ción de al­go­ri­t­mos tanto si­mé­tri­cos como asi­mé­tri­cos en la tra­n­s­fe­re­n­cia de datos en Internet. El objetivo de esta co­m­bi­na­ción es compensar las de­bi­li­da­des de un sistema con las ventajas de otro.

Métodos de cifrado simétrico como AES se co­n­si­de­ran seguros según el estado actual de la te­c­no­lo­gía y permiten procesar también grandes volúmenes de datos de forma rápida y ope­ra­ti­va­me­n­te eficiente. Sin embargo, tal como está diseñado su algoritmo, sobre la base de una clave privada común que se in­te­r­ca­m­bia entre los in­te­r­lo­cu­to­res de forma segura, sitúa a los usuarios de los métodos si­mé­tri­cos ante el problema del in­te­r­ca­m­bio de claves, úni­ca­me­n­te soluble con al­go­ri­t­mos asi­mé­tri­cos. Métodos como el RSA se apoyan en una se­pa­ra­ción estricta de ambas claves, la privada y la pública, de tal modo que permiten esquivar el problema del in­te­r­ca­m­bio de la clave secreta.

No obstante, RSA solo ofrece pro­te­c­ción fiable ante análisis cri­p­to­grá­fi­cos en el caso de una longitud de clave su­fi­cie­n­te­me­n­te grande de 1976 bits como mínimo, porque deriva en largas ope­ra­cio­nes de cálculo que dejan al algoritmo fuera de juego en el cifrado y de­s­ci­fra­do de grandes ca­n­ti­da­des de datos. Además, el texto secreto re­su­l­ta­n­te es mucho más grande que el original.

En la cri­p­to­gra­fía híbrida los al­go­ri­t­mos asi­mé­tri­cos ya no se utilizan para encriptar datos útiles, sino para asegurar la tra­n­s­fe­re­n­cia de una clave de sesión simétrica en un canal no protegido. Esta clave permite, a su vez, descifrar efi­ca­z­me­n­te un texto co­di­fi­ca­do con ayuda de al­go­ri­t­mos si­mé­tri­cos.

El de­sa­rro­llo 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 asi­mé­tri­co. Para ello se ha de generar tanto una clave asi­mé­tri­ca (a) como otra simétrica (b):

  • Antes de llegar a la tra­n­s­fe­re­n­cia cifrada de datos, ambos in­te­r­lo­cu­to­res generan un par asi­mé­tri­co de claves, una privada y otra pública. A co­n­ti­nua­ción se in­te­r­ca­m­bian las claves públicas, idea­l­me­n­te de forma segura con un mecanismo de au­te­n­ti­fi­ca­ción. El par asi­mé­tri­co de claves sirve para cifrar y descifrar una clave de sesión simétrica y se utiliza ge­ne­ra­l­me­n­te más de una vez.
  • El cifrado y de­s­ci­fra­do 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. En­cri­p­ta­do: 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 in­te­r­vie­ne la clave pública del receptor. Esta se utiliza para cifrar asi­mé­tri­ca­me­n­te la clave de sesión, de tal modo que tanto los datos útiles como la clave simétrica están di­s­po­ni­bles de forma cifrada y se pueden enviar sin re­mo­r­di­mie­n­tos.

3. De­s­ci­fra­do: cuando el mensaje cifrado llega junto a la clave de sesión en­cri­p­ta­da al de­s­ti­na­ta­rio, este utiliza su clave privada para descifrar asi­mé­tri­ca­me­n­te a la clave de sesión, la cual sirve para descifrar fi­na­l­me­n­te los datos cifrados si­mé­tri­ca­me­n­te.

Este esquema permite el cifrado y de­s­ci­fra­do eficiente de datos útiles, incluso de gran volumen, a una gran velocidad. Al en­cri­p­tar­se asi­mé­tri­ca­me­n­te solo una clave de sesión, se evitan los largos tiempos de pro­ce­sa­mie­n­to propios de los lo­ga­ri­t­mos asi­mé­tri­cos, así como el problema del in­te­r­ca­m­bio de claves se reduce al problema de la au­te­n­ti­ca­ción de los usuarios, que se resuelve con las firmas y los ce­r­ti­fi­ca­dos digitales, como en la cri­p­to­gra­fía asi­mé­tri­ca.

La cri­p­to­gra­fía híbrida se utiliza en la forma de IPSec en la co­mu­ni­ca­ción segura a través de redes IP no pro­te­gi­das y como TLS/SSL en el protocolo de tra­n­s­fe­re­n­cia de hi­pe­r­te­x­to seguro o HTTPS, así como también es la base para es­tá­n­da­res de cifrado como Pretty Good Privacy (PGP), GnuPG y S/MIME, uti­li­za­dos en el cifrado del correo ele­c­tró­ni­co.

Una co­m­bi­na­ción muy habitual en la cri­p­to­gra­fía híbrida consiste en el cifrado simétrico de los datos útiles mediante AES y el co­n­si­guie­n­te de­s­ci­fra­do asi­mé­tri­co 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 pro­po­r­cio­nar Forward Secrecy (si una clave es hackeada la anterior es válida), sigue siendo muy vu­l­ne­ra­ble a ataques de hombre en medio (Man in the middle). El algoritmo de Elgamal, de­sa­rro­lla­do en 1985 por Taher Elgamal, re­pre­se­n­ta el relevo a RSA. Basado también en la idea del in­te­r­ca­m­bio de claves DH, se utiliza en la versión actual del programa de en­cri­p­ta­do PGP.

Ir al menú principal