Cifrado
Capítulo 6. Algoritmos de cifrado
6.1 Introducción
Un algoritmo de cifrado o algoritmo criptográfico es un método matemático cuya
utilidad es encriptar y desencriptar un determinado mensaje. Generalmente
funciona empleando una o más claves como parámetros del algoritmo, de modo que
sean necesarias para recuperar el mensaje a partir de la versión cifrada. El mensaje
antes de encriptar se denomina texto en claro y una vez encriptado se denomina texto
cifrado.
Se distinguen tres tipos de algoritmos criptográficos:
• De clave secreta o simétricos.
• De clave pública o asimétricos.
• De resumen de mensajes.
Los algoritmos de clave secreta o simétricos convierten un mensaje en un texto cifrado
del mismo tamaño que el original. Emplean una sola clave para encriptar y
desencriptar. Son los algoritmos empleados para transferir grandes cantidades de
información de modo seguro.
Los algoritmos de clave pública o asimétricos encriptan un mensaje generando un
texto cifrado del mismo tamaño que el original. Usan una clave para encriptar el
mensaje (clave privada) y otra para desencriptar (clave pública). Tienen un coste
computacional alto y se suelen emplear para distribuir las claves de los algoritmos
simétricos.
Los algoritmos de resumen de mensajes transforman mensajes de tamaño variable a
textos cifrados de tamaño fijo sin emplear claves. Se emplean para convertir mensajes
grandes en representaciones más manejables.
En la actualidad, no se cuenta con un sistema estándar de APIs para los servicios de
cifrado digital de XML. Los múltiples algoritmos de cifrado existentes abren un extenso
abanico de posibilidades a la hora de implementar firma digital sobre documentos
XML. La representación de los datos cifrados y de la clave debe ser eficiente y flexible
y la elección de un algoritmo de cifrado u otro dependerá en buen grado de la edición
de Java para la que se esté desarrollando. El cifrado de XML debe proveer de
consistencia y de compatibilidad con la especificación de firma Digital de XML según
lo definido por el W3C.
46
Cifrado
En esta sección, se presentan los diferentes tipos de algoritmos criptográficos que se
distinguen y se discute su idoneidad para llevar a cabo la firma digital de un
documento XML teniendo en cuenta las particularidades y restricciones que presenta
la plataforma de Java para dispositivos móviles J2ME.
6.2 Algoritmos de resumen de mensajes
Un algoritmo de resumen de mensajes o función de dispersión criptográfica es aquel
que toma como entrada un mensaje de longitud variable y produce un resumen de
longitud fija. En inglés el resumen se llama message digest, digest o hash y el
algoritmo message digest algorithm. Es muy común el uso de estos algoritmos en la
generación de firmas digitales.
Estos algoritmos deben tener tres propiedades para ser criptográficamente seguros:
• No debe ser posible averiguar el mensaje de entrada basándose sólo en su
resumen, es decir, el algoritmo es una función irreversible de una sola
dirección.
• Dado un resumen debe ser imposible encontrar un mensaje que lo genere.
• Debe ser computacionalmente imposible encontrar dos mensajes que generen
el mismo resumen.
Entre las funciones de resumen más usadas se destacan las siguientes:
SHA y SHA-1
El SHA (Secure Hash Algorithm) es un algoritmo de resumen seguro
desarrollado por el NIST. El SHA-1 es una versión corregida del algoritmo publicada
en 1994. El algoritmo es un estándar ANSI.
El algoritmo toma un mensaje de menos de 264 bits y genera un resumen de
160 bits. Es más lento que el MD5, pero la mayor longitud de clave lo hace más
resistente a ataques de colisión por fuerza bruta y de inversión.
MD2, MD4 y MD5
Los tres son algoritmos de resumen de mensajes (el MD viene de Message Digest)
desarrollados por Rivest. Los tres toman un mensaje de longitud arbitraria y generan
un resumen de 128 bits. El MD2 está optimizado para máquinas de 8 bits, mientras
que el MD4 y MD5 son para arquitecturas de 32 bits. El código para los tres algoritmos
se puede encontrar en los RFCs 1319, 1320 y 1321.
El MD2 funciona rellenando el mensaje para que tenga una longitud en bytes múltiplo
47
Cifrado
de 16. Sobre ese mensaje se calcula un checksum de 16 bytes que se añade al
mensaje y la función de dispersión se aplica al mensaje resultante. El único problema
que se le conoce es que si se omite el checksum se pueden obtener colisiones.
El MD4 fue desarrollado en 1990 por Rivest. El mensaje se rellena para que su
longitud en bits más 448 sea divisible por 512. Una representación de la longitud del
mensaje de 64 bits se concatena entonces con el mensaje. El mensaje se procesa
iterativamente en bloques de 512 bits y cada bloque es procesado en tres rotaciones
distintas. El algoritmo ha sido criptoanalizado y se han encontrado debilidades, de
hecho es posible encontrar colisiones en menos de un minuto en máquinas modernas,
por lo que el algoritmo se considera a todos los efectos roto.
El MD5 fue desarrollado en 1991 por Rivest. Es básicamente el MD4 con mejoras en
la seguridad, aunque es más lento que este. El tamaño del resumen y la necesidad del
relleno son iguales que en el MD4. Consta de cuatro rotaciones que tienen un diseño
ligeramente diferente a las del MD4. El algoritmo ha sido criptoanalizado con técnicas
similares a las del MD4 y se han encontrado pseudo-colisiones en la función de
compresión, pero no en el algoritmo completo. Adicionalmente, se ha estimado que es
posible construir una máquina capaz de atacar el algoritmo por fuerza bruta y
encontrar una colisión en 24 días, aunque el coste de la máquina era de 10 millones
de dólares en 1994.
Teniendo en cuenta que la velocidad del algoritmo es un parámetro de vital
importancia en las aplicaciones para dispositivos móviles, sin olvidar que debe
proporcionar un margen de seguridad suficiente, el algoritmo MD5 es el que
proporciona las mejores prestaciones por lo que en un principio fue el algoritmo
seleccionado para esta implementación. Sin embargo como se detalla en la siguiente
sección, el descubrimiento del hackeado de dicho algoritmo hizo que se optara por
cambiarlo por SHA-1.
6.2.1 Hackeado del algoritmo MD5
En el mes de Agosto de 2004 se publica la noticia acerca de la vulnerabilidad de
algoritmo MD5, descubierta por el matemático francés Antoine Joux. Éste algoritmo es
frecuentemente utilizado para calcular el resumen o “hash” de un determinado
conjunto de bytes. Una función de “hash” deber cumplir dos condiciones de seguridad
esenciales:
1.- Imposibilidad de obtener el texto original a partir de su resumen.
2.- No debe ser computacionalmente factible encontrar dos textos que generen el
mismo valor de resumen o hash. Este hecho se conoce como colisión. MD5 produce
un valor de “hash” de 128 bits, que supone una media de 2^64 intentos para encontrar
una colisión.
48
Cifrado
En la actualidad no se conoce la posibilidad de romper el primer supuesto para el caso
de un “hash” calculado mediante MD5, sin embargo en la conferencia sobre
criptografía celebrada en Santa Bárbara (California) en 2004, el prestigioso equipo de
criptógrafos encabezado por Xiaoyun Wang anunció que habían encontrado un
método capaz de encontrar una colisión en 2^37 intentos, lo cual hace que MD5 sea
un algoritmo altamente vulnerable. Aunque el ataque de Wang era analítico, el tamaño
del hash (128 bits) es suficientemente pequeño para poder contemplar ataques de
'fuerza bruta' tipo 'cumpleaños'. MD5CRK era un proyecto distribuido que comenzó en
Marzo del 2004 con el propósito de demostrar que MD5 es inseguro encontrando una
colisión usando un ataque de 'fuerza bruta', aunque acabó poco después del aviso de
Wang.
Debido al descubrimiento de un método fácil para generar colisiones de hash, la
tendencia actual es el uso del algoritmo SHA-1 como función de resumen. SHA-1
(Security Hash Algorithm 1) fue desarrollado por la “National Security Agency” en
1995, produce un valor de resumen de 160 bits lo que proporciona una media de 2^80
intentos para encontrar una colisión por el método de prueba y error, nivel de
seguridad bastante alto.
Tras el anuncio de la ruptura del algoritmo MD5, Wang y su equipo comenzaron a
trabajar en la ruptura del algoritmo de resumen más utilizado actualmente, SHA-1.
Así, en la conferencia de seguridad RSA celebrada en San Francisco en Febrero de
2005 se presentaron los resultados obtenidos, asegurando que habían desarrollado un
método que permitía generar colisiones SHA-1 en 2^69 intentos. Ésta cifra aún
permite un nivel de seguridad bastante elevado por lo que se puede concluir que el
algoritmo SHA-1 aún no ha sido “crackeado”.
Uno de los más prestigiosos criptógrafos de la actualidad, Bruce Schneier, aborda el
hallazgo del método para encontrar colisiones en SHA-1 en 2^69 intentos en su
página web. Valorando la magnitud del descubrimiento, Schneier afirma que es un
avance interesante para el mundo de la criptografía que puede ayudar en el desarrollo
de nuevos algoritmos de seguridad. Sin embargo, considera que el anuncio no supone
que el mundo electrónico sea menos seguro que antes. Actualmente no es factible que
se rompan firmas digitales ni que se puedan leer mensajes encriptados con SHA-1.
Aún así, en el NIST (National Institute of Standards and Technology) se buscan
alternativas al algoritmo que pasan por aumentar el tamaño del resumen y por tanto se
aumenta su resistencia ante ataques.
49
Cifrado
6.3 Algoritmos de clave pública o asimétricos
La criptografía de clave pública fue inventada en 1975 por Whitfield Diffie y Matin
Hellman. Se basa en emplear un par de claves distintas, una pública y otra privada. La
idea fundamental es que las claves están ligadas matemáticamente pero es
computacionalmente imposible obtener una a partir de la otra.
Este tipo de algoritmos tiene dos aplicaciones fundamentales:
• Encriptación. Un usuario A manda un mensaje a otro usuario B encriptándolo
mediante el uso de la clave pública de B. Cuando B lo recibe lo desencripta
usando su clave privada. De esta forma se asegura que B es el único que
puede descifrarlo ya que ningún otro usuario debe poseer la clave privada de
B, ni siquiera el que envía el mensaje.
• Firmas digitales. Es habitual es uso de este tipo de algoritmos para la firma
digital de documentos. Si B encripta un mensaje usando su clave privada,
cualquiera que tenga su clave pública podrá obtener el texto en claro
correspondiente; si alguien quiere hacerse pasar por B tendrá que cifrar el
mensaje usando la misma clave privada o no se descifrará correctamente con
la clave pública de B.
Entre los algoritmos de este tipo se pueden destacar dos:
RSA
El RSA, llamado así por las siglas de sus creadores (Rivest, Shamir y Adelman), es el
algoritmo de clave pública más popular. La clave es de tamaño variable, generalmente
se usan claves entre 512 y 2048 bits. Las claves más grandes aumentan la seguridad
del algoritmo pero disminuyen su eficiencia y generan más texto cifrado. Los bloques
de texto en claro pueden ser de cualquier tamaño, siempre que sea menor que la
longitud de la clave. Los bloques de texto cifrado generados son del tamaño de la
clave.
Comparado con los sistemas de cifrado simétrico como el DES, el algoritmo de RSA
es 100 veces más lento en software y de 1000 a 10000 veces más lento en hardware
por lo que su uso no es adecuado para aplicaciones móviles, en las que la capacidad
de cómputo y memoria son bastante reducidas.
Diffie-Hellman
El algoritmo de Diffie Hellman es un algoritmo de clave pública que generalmente se
emplea junto con algoritmos de cifrado simétrico, como método para acordar una clave
50
Cifrado
secreta. El algoritmo no se puede usar para encriptar conversaciones o firmas
digitales.
El problema fundamental de este algoritmo es que es sensible a ataques activos del
tipo hombre en el medio. Si la comunicación es interceptada por un tercero, este se
puede hacer pasar por el emisor cara al destinatario y viceversa, ya que no
disponemos de ningún mecanismo para validar la identidad de los participantes en la
comunicación. Así, el hombre en el medio podría acordar una clave con cada
participante y retransmitir los datos entre ellos, escuchando la conversación en ambos
sentidos.
6.4 Algoritmos de cifrado simétrico
Dentro de estos algoritmos se distinguen dos tipos de algoritmos en función de la
cantidad de datos de entrada que manejan a la vez: algoritmos de cifrado por bloques
y algoritmos de cifrado de flujo.
6.4.1 Cifrado de flujo de datos
Generalmente operan sobre 1 bit (o sobre bytes o palabras de 16 ó 32 bits) de los
datos de entrada cada vez. El algoritmo genera una secuencia (secuencia cifrante o
keystream en inglés) de bits que se emplea como clave. La encriptación se realiza
combinando la secuencia cifrante con el texto en claro.
El paradigma de este tipo de algoritmos es el One Time Pad, que funciona aplicando
una XOR (o-exclusiva) a cada bit de la entrada junto con otro generado aleatoriamente
para obtener cada bit de la salida. La secuencia de bits aleatorios es la clave de la
sesión, secuencia de cifrado o el pad, que es del mismo tamaño que la entrada y la
salida. Para recuperar el texto original el texto cifrado debe pasar por el mismo
proceso empleado para encriptar usando el mismo pad. Este algoritmo es conocido
por ser el único incondicionalmente seguro, aunque, como las claves son del mismo
tamaño que la entrada, es de poca utilidad práctica.
Los algoritmos de este tipo son intentos de conseguir algoritmos prácticos que se
aproximen al funcionamiento del one time pad. El más conocido es el RC$ que se
muestra a continuación:
RC4
El RC4 es un algoritmo de cifrado de flujo diseñado por Ron Rivest para RSA Data
Security. Es un algoritmo de tamaño de clave variable con operaciones a nivel de byte.
Se basa en el uso de una permutación aleatoria y tiene un periodo estimado de más
de 10100. Además, es un algoritmo de ejecución rápida en software.
51
Cifrado
El algoritmo se emplea para encriptación de ficheros y para encriptar la comunicación
en protocolos como el SSL (TLS).
6.4.2 Cifrado por bloques
Los algoritmos de cifrado por bloques toman bloques de tamaño fijo del texto en claro
y producen un bloque de tamaño fijo de texto cifrado, generalmente del mismo tamaño
que la entrada. El tamaño del bloque debe ser lo suficientemente grande como para
evitar ataques de texto cifrado. La asignación de bloques de entrada a bloques de
salida debe ser uno a uno para hacer el proceso reversible y parecer aleatoria.
Para la asignación de bloques los algoritmos de cifrado simétrico realizan sustituciones
y permutaciones en el texto en claro hasta obtener el texto cifrado. Un tipo especial de
algoritmos de cifrado por bloques iterativos son los denominados algoritmos de cifrado
de Feistel. En estos algoritmos el texto cifrado se obtiene del texto en claro aplicando
repetidamente la misma transformación o función de rotación.
Una característica interesante de estos algoritmos es que la encriptación y
desencriptación son idénticas estructuralmente, aunque las subclaves empleadas en la
encriptación se toman en orden inverso en la desencriptación.
Existen multitud de algoritmos de este tipo. A continuación se muestran los más
populares y de los que se disponen de implementaciones Java:
DES
El DES (Data Encription Standard o Estándar de Encriptación de Datos) es el nombre
del documento FIPS (Federal Information Processing Standard) 46-1 del Instituto
Nacional de Estándares y Tecnología (NIST) del Departamento de Comercio de
Estados Unidos. Fue publicado en 1977. En este documento se describe el DEA (Data
Encription Algorithm o Algoritmo de Encriptación de Datos). Es el algoritmo de cifrado
simétrico más estudiado, mejor conocido y más empleado del mundo.
El DEA (llamado con frecuencia DES) es un algoritmo de cifrado por bloques de 64
bits de tamaño. Emplea una clave de 56 bits durante la ejecución (se eliminan 8 bits de
paridad del bloque de 64). El algoritmo fue diseñado para ser implementado en
hardware. Cuando se utiliza en comunicaciones ambos participantes deben conocer la
clave secreta (para intercambiarla se suelen emplear algoritmos de clave pública). El
algoritmo se puede usar para encriptar y desencriptar mensajes, generar y verificar
códigos de autentificación de mensajes (MAC) y para encriptación de un sólo usuario.
Aunque el DES era un algoritmo computacionalmente seguro, esto ha dejado de ser
cierto, ya que con hardware específico es posible realizar ataques por fuerza bruta que
descubran una clave en pocos días. El problema principal es que el tamaño de la
clave, 56 bits es demasiado pequeño para la potencia de cálculo actual.
52
Cifrado
Triple-DES
Consiste en encriptar tres veces una clave DES. Esto se puede hacer de varias
maneras:
• DES-EEE3: Tres encriptaciones DES con tres claves distintas.
• DES-EDE3: Tres operaciones DES con la secuencia encriptar-desencriptar-
encriptar con tres claves diferentes.
• DES-EEE2 y DES-EDE2: Igual que los anteriores pero la primera y tercera
operación emplean la misma clave.
Dependiendo del método elegido, el grado de seguridad varía; el método más seguro
es el DES-EEE3.
RC2
El RC2 es un algoritmo de cifrado por bloques de clave de tamaño variable diseñado
por Ron Rivest de RSA Data Security (la RC quiere decir Ron's Code o Rivest's
Cipher). El algoritmo trabaja con bloques de 64 bits y entre dos y tres veces más
rápido que el DES en software. Se puede hacer más o menos seguro que el DES
contra algoritmos de fuerza bruta eligiendo el tamaño de clave apropiadamente.
RC4
El RC4 es un algoritmo de cifrado de flujo diseñado por Ron Rivest para RSA Data
Security. Es un algoritmo de tamaño de clave variable con operaciones a nivel de byte.
Se basa en el uso de una permutación aleatoria y tiene un periodo estimado de más
de 10100. Además, es un algoritmo de ejecución rápida en software. El algoritmo se
emplea para encriptación de ficheros y para encriptar la comunicación en protocolos
como el SSL (TLS).
RC5
El RC5 es un algoritmo parametrizable con tamaño de bloque variable, tamaño de
clave variable y número de rotaciones variable. Los valores más comunes de los
parámetros son 64 o 128 bits para el tamaño de bloque, de 0 a 255 rotaciones y claves
de 0 a 2048 bits. Fue diseñado en 1994 por Ron Rivest.
La mezcla de rotaciones dependientes de los datos y de distintas operaciones lo hace
resistente al criptoanálisis lineal y diferencial. El algoritmo RC5 es fácil de implementar
y analizar.
53
Cifrado
IDEA
El IDEA (International Data Encription Algorithm) es un algoritmo de cifrado por
bloques de 64 bits iterativo. La clave es de 128 bits. La encriptación precisa 8
rotaciones complejas. El algoritmo funciona de la misma forma para encriptar que para
desencriptar (excepto en el cálculo de las subclaves). El algoritmo es fácilmente
implementable en hardware y software, aunque algunas de las operaciones que
realiza no son eficientes en software, por lo que su eficiencia es similar a la del DES.
El algoritmo es considerado inmune al criptoanálisis diferencial y no se conocen
ataques por criptoanálisis lineal ni debilidades algebraicas. La única debilidad conocida
es un conjunto de 251 claves débiles, pero dado que el algoritmo tiene 2 128 claves
posibles no se considera un problema serio.
SAFER
El SAFER (Secure And Fast Encription Routine) es un algoritmo de cifrado por bloques
no propietario. Está orientado a bytes y emplea un tamaño de bloque de 64 bits y
claves de 64 (SAFER K-64) o 128 bits (SAFER K-128). Tiene un número variable de
rotaciones, pero es recomendable emplear como mínimo 6. El algoritmo original fue
considerado inmune al criptoanálisis lineal y diferencial, pero Knudsen descubrió una
debilidad en el generador de claves y el algoritmo fue modificado (SAFER SK-64 y
SAFER SK-128).
AES
Para evitar las quejas que se procedieron con la implantación del algoritmo DES
debido a partes del algoritmo no documentadas el NIST ( National Institute ofStander
and Tecnology) decide iniciar un proceso abierto para seleccionar el algoritmo que
formaría el nuevo estándar de cifrado AES.
Se inicia entonces la consolidación de un Estándar de Cifrado Avanzado (AES) que
permita proteger los datos confidenciales.
En Septiembre de 1997 de presentan los criterios de evaluación y requisitos mínimos
que debían cumplir todos los algoritmos que optaban a ganar el concurso, entre ellos
destacan:
• El algoritmo debe ser público.
• Debe ser un algoritmo de cifrado en bloque simétrico.
• La longitud de la clave debe ser como mínimo 128 bits.
• Su diseño debe permitir aumentar la longitud de la clave según las
54
Cifrado
necesidades.
• Debe ser implementable tanto en hardware como en software.
Además de cumplir estos requisitos, los algoritmos fueron juzgados por los siguientes
factores:
• Seguridad.
• Eficiencia computacional.
• Requisitos de memoria.
• Implementable en Hardware y Software.
• Simplicidad de diseño.
• Flexibilidad.
Entre todos los algoritmos que se presentaron a concurso, destacaron cinco que
llegaron a la final. Concretamente fueron el algoritmo de Rijndael, Serpent, Twofish,
RC6 y MARS.
Blowfish
Es un algoritmo de cifrado por bloques de 64 bits desarrollado por Scheiner. Es un
algoritmo de tipo Feistel y cada rotación consiste en una permutación que depende de
la clave y una sustitución que depende de la clave y los datos. Todas las operaciones
se basan en o-exclusivas sobre palabras de 32 bits. La clave tiene tamaño variable
(con un máximo de 448 bits) y se emplea para generar varios vectores de subclaves.
Este algoritmo se diseño para máquinas de 32 bits y es considerablemente más rápido
que el DES. El algoritmo es considerado seguro aunque se han descubierto algunas
claves débiles, un ataque contra una versión del algoritmo con tres rotaciones y un
ataque diferencial contra una variante del algoritmo.
Mars
Fue la propuesta de IBM par este concurso. Su gran problema es la complejidad,
aunque a su favor cuenta con un margen de seguridad elevado.
Serpent
Serpent fue diseñado por Ross Anderson, Eli Biham y Lars Knudsen como candidato a
AES. Cifra bloques de 128 bits u el tamaño mínimo de clave es del mismo valor,
aunque puede manejar claves de 192 y 256 bits. Es similar al algoritmo de Rijndael,
55
Cifrado
destacando como principal diferencia que el a la postre ganador Rijndael resulta más
rápido mientras que Serpent se muestra más seguro.
Cabe destacar que Serpent es mucho más rápido que DES y que la actual versión
alcanza los 45 Mbits/s sobre un Pentium a 200 Mhz mientras que DES lo hace a 15
Mbits/s.
Twofish
Creado por Bruce Schneier, presenta un encriptado de bloques simétricos de 128 bits,
una longitud de la clave variable que puede ser 128, 192 y 256 bits. Obtuvo una buena
acogida en el concurso para el estándar AES quedando en segundo lugar.
Su funcionamiento se detalla a continuación. Divide el texto plano en 4 grupos de 32
bytes. En cada una de ellas las 2 palabras de la izquierda son usadas como entradas
de una función g, una de ellas es rotada 8 bits a la izquierda. Se les aplica whitening al
inicio con cuatro llaves. Utiliza 40 subllaves de 32 bits. Las primeras ocho son usadas
para whitening. Cuatro al principio y cuatro al final son utilizadas en un xor con el
bloque entero, cada iteración usa dos de las 32 restantes subllaves, por lo que Twofish
realiza 16 iteraciones. El resultado de las dos funciones g son mezcladas unas con
otras a través de una Pseudo-Hadamard Transform (PHT),mas dos llaves. A ese
resultado se realiza una suma (XOR) con la parte derecha, una de las cuáles son
rotadas un bit a la izquierda y la otra a la derecha. Las mitades izquierda y derecha
son intercambiadas para la siguiente iteración. Cuando finaliza el proceso, el
intercambio de la última iteración es revertido y se le suman las 4 llaves restantes para
producir el texto cifrado.
Twofish ha recibido críticas por su complejidad haciendo difícil su análisis durante el
tiempo establecido en el proceso de desarrollo de AES.
RC6
RC6 es un algoritmo de cifrado de bloques que utiliza llaves simétricas de una longitud
máxima de 256 bits y un tamaño de bloque cifrado de 128 bits. Fue diseñado por Ron
Rivest, Ray Sidney, y Yiqun Lisa Yin para RSA cumpliendo con los requisitos de AES.
Destaca por la sencillez en sus mecanismos de cifrado, descifrado y generación de
sub-llaves y tiene una buena velocidad de cifrado y descifrado. Sin embargo su
seguridad ha sido ampliamente cuestionada.
Rijndael
Rijndael resultó ser el algoritmo ganador por lo que quedó establecido como el
estándar AES. Sus creadores son Vincent Rijmen y Joan Daemen y es un algoritmo
que maneja claves desde un valor mínimo aconsejado de 128 bits hasta 256 bits.
56
Cifrado
También permite trabajar con varios tamaños de bloque distintos desde 128 bits
pasando por 160,192, 224 hasta llegar a 256 bits. El motivo de su elección para el
estándar AES fue su combinación de seguridad, velocidad, eficiencia, sencillez y
flexibilidad. Entre todas éstas características destacó su sencillez, que permitió un
análisis muy intenso de su estructura.
En Octubre de 2000, quedó establecido el estándar AES, y por lo tanto el algoritmo
Rijndael como el estándar actual de las comunicaciones de EEUU y por derivación de
todo el mundo. Todas las aplicaciones y servicios se están adaptando
progresivamente pasando de utilizar DES a usar el nuevo estándar de cifrado. Rijndael
recibió críticas sobre su margen de seguridad, debido a que era de los más bajos entre
los finalistas y a que su estructura matemática puede conducir a ataques. Sin
embargo, la simplicidad de su estructura hizo que fuese elegido.
El proceso de cifrado consiste en la aplicación de cuatro funciones matemáticas
invertibles sobre la información que se desea cifrar. Estas transformaciones se
realizan de forma reiterativa para cada ronda o vuelta definida. La información a cifrar
se va mapeando en una matriza de Estado. Esta matriz de estado se introduce en el
cifrador y sufre una primera transformación, en su ronda inicial, que consiste en una
or-exclusiva entre una Subclave generada y la matriz de Estado. A continuación, a la
matriz de Estado resultante se le aplican cuatro transformaciones invertibles,
repitiéndose este proceso en lo que se conoce como ronda Estándar. Finalmente se le
aplica una última ronda o vuelta a la matriz de Estado resultante de las rondas
anteriores utilizando tres funciones distintas. El resultado de la ronda final produce el
bloque cifrado deseado.
A la hora de seleccionar un determinado algoritmo de cifrado para desarrollar la firma
digital XML para dispositivos móviles, hay que tener en cuenta los siguientes factores
e intentar tomar la solución óptima:
• Rapidez: los dispositivos móviles deben ser rápidos. Esto es difícil de conseguir
teniendo en cuenta que las CPUs de las que disponen son lentas. Por este motivo,
no se debe sobrecargar la CPU con excesivas tareas criptográficas, lo que supone
que los algoritmos de clave pública sean inapropiados para este tipo de
dispositivos.
• Buena reputación: es importante que el algoritmo esté suficientemente probado y
extendido para tener una mayor seguridad y ofrecer unos buenos resultados.
• Conocimiento de sus debilidades: si se conocen los agujeros de seguridad que
presenta el algoritmo se podrán combatir de manera más eficaz.
• Implementaciones eficientes: la mayoría de los paquetes criptográficos
consumen varios Mbs de espacio de almacenamiento lo que los convierte en
inviables para el uso en dispositivos móviles.
57
Cifrado
6.5 Conclusiones
El hecho de producirse colisiones el un algoritmo de “hash” provoca que no se pueda
garantizar la integridad de los datos firmados ya que dos textos distintos podrían
generar el mismo valor de resumen. Aún demostrada analíticamente la vulnerabilidad
del algoritmo MD5, se continúa haciendo uso de él en multitud de aplicaciones, si bien
la mayoría de los expertos aconsejan la migración a SHA-1.
SHA-1 es en la actualidad el algoritmo de resumen más usado y es capaz de
proporcionar un nivel de seguridad ante ataques bastante elevado, aunque se buscan
alternativas a éste algoritmo ante los descubrimientos que reducen la probabilidad de
colisión a 2^69 intentos.
Analizados estos datos se consideró necesaria la utilización del algoritmo de cálculo
de “hash” SHA-1 para realizar la firma digital de documentos XML en lugar del hasta
entonces usado MD5. En contraposición al aumento de seguridad, el aumento de la
longitud del resumen a 160 bits provoca una mayor carga computacional en la
obtención de la firma.
Los algoritmos de cifrado asimétricos presentan dos problemas fundamentales:
• Uno es la distribución de claves ya que aunque la clave pública se puede
distribuir libremente, existe la posibilidad de la suplantación que hace necesario
el uso de autoridades certificadoras y certificados digitales.
• El segundo de los problemas es sin duda el más importante para el caso
particular de firma digital XML para dispositivos móviles. Se trata del alto coste
computacional que presentan, que lo hace inapropiado para las características
de la plataforma J2ME.
Como se expresa anteriormente, se descarta la posibilidad de seleccionar un algoritmo
de cifrado asimétrico para llevar a cabo la firma. Entre los algoritmos simétricos
presentados, por su sencillez, velocidad y eficiencia el algoritmo más adecuado para
generar una firma digital de máxima eficiencia es el de Rijndael. Además de poseer
estas notables características, es el algoritmo seleccionado para el estándar AES, está
ampliamente estudiado y su nivel de acogida e implantación está en continuo
crecimiento, lo que está motivando que paulatinamente esté sustituyendo a DES.
Por otro lado, el algoritmo de Rijndael cuenta con implementaciones adaptadas a
J2ME. En concreto cabe destacar la implementación realizada por Bouncy Castle
dentro de su API ligera para criptografía.
58