Seguridad en Unix y Redes
Libro en Formato HTML y PDF de seguridad informática realizado por Antonio Villalon Huerta

Los contenidos pueden estar desactualizados con respecto al original

Este documento se encuentra disponible también en formato PDF

Criptología


next up previous contents
Siguiente: Algunas herramientas de seguridad Subir: Otros aspectos de la Anterior: Otros aspectos de la   Índice General

Subsecciones

Criptología

Introducción

En el mundo real, si una universidad quiere proteger los expedientes de sus alumnos los guardará en un armario ignífugo, bajo llave y vigilado por guardias, para que sólo las personas autorizadas puedan acceder a ellos para leerlos o modificarlos; si queremos proteger nuestra correspondencia de curiosos, simplemente usamos un sobre; si no queremos que nos roben dinero, lo guardamos en una caja fuerte... Lamentablemente, en una red no disponemos de todas estas medidas que nos parecen habituales: la principal (podríamos decir única) forma de protección va a venir de la mano de la criptografía. El cifrado de los datos nos va a permitir desde proteger nuestro correo personal para que ningún curioso lo pueda leer, hasta controlar el acceso a nuestros archivos de forma que sólo personas autorizadas puedan examinar (o lo que quizás es más importante, modificar) su contenido, pasando por proteger nuestras claves cuando conectamos a un sistema remoto o nuestros datos bancarios cuando realizamos una compra a través de Internet. Hemos presentado con anterioridad algunas aplicaciones que utilizan de una u otra forma la criptografía para proteger nuestra información; aquí intentaremos dar unas bases teóricas mínimas sobre términos, algoritmos, funciones...utilizadas en ese tipo de aplicaciones. Para más referencias es imprescindible la obra [Sch94]; otras publicaciones interesantes son [MvOV96], [Den83], [Sal90] y, para temas de criptoanálisis, [otUAH90]. Un texto básico para aquellos que no disponen de mucho tiempo o que sólo necesitan una perspectiva general de la criptografía puede ser [Cab96].

La criptología (del griego krypto y logos, estudio de lo oculto, lo escondido) es la ciencia21.1 que trata los problemas teóricos relacionados con la seguridad en el intercambio de mensajes en clave entre un emisor y un receptor a través de un canal de comunicaciones (en términos informáticos, ese canal suele ser una red de computadoras). Esta ciencia está dividida en dos grandes ramas: la criptografía, ocupada del cifrado de mensajes en clave y del diseño de criptosistemas (hablaremos de éstos más adelante), y el criptoanálisis, que trata de descifrar los mensajes en clave, rompiendo así el criptosistema. En lo sucesivo nos centraremos más en la criptografía y los criptosistemas que en el criptoanálisis, ya que nos interesa, más que romper sistemas de cifrado (lo cual es bastante complicado cuando trabajamos con criptosistemas serios), el saber cómo funcionan éstos y conocer el diseño elemental de algunos sistemas seguros.

La criptografía es una de las ciencias consideradas como más antiguas, ya que sus orígenes se remontan al nacimiento de nuestra civilización. Su uso original era el proteger la confidencialidad de informaciones militares y políticas, pero en la actualidad es una ciencia interesante no sólo en esos círculos cerrados, sino para cualquiera que esté interesado en la confidencialidad de unos determinados datos: actualmente existe multitud de software y hardware destinado a analizar y monitorizar el tráfico de datos en redes de computadoras; si bien estas herramientas constituyen un avance en técnicas de seguridad y protección, su uso indebido es al mismo tiempo un grave problema y una enorme fuente de ataques a la intimidad de los usuarios y a la integridad de los propios sistemas. Aunque el objetivo original de la criptografía era mantener en secreto un mensaje, en la actualidad no se persigue únicamente la privacidad o confidencialidad de los datos, sino que se busca además garantizar la autenticidad de los mismos (el emisor del mensaje es quien dice ser, y no otro), su integridad (el mensaje que leemos es el mismo que nos enviaron) y su no repudio (el emisor no puede negar el haber enviado el mensaje).

Podemos dividir la historia de la criptografía en tres periodos fundamentales; hasta mediados de siglo, tenemos la criptología precientífica, considerada no una ciencia sino más bien un arte. En 1949, Shannon logró cimentar la criptografía sobre unas bases matemáticas ([Sha49]), comenzando el período de la criptografía científica. Poco más de diez años después se comenzó a estudiar la posibilidad de una comunicación secreta sin que ambas partes conocieran una clave común (hasta ese momento la existencia de dicha clave era la base de toda la seguridad en el intercambio de información), de forma que esos estudios dieron lugar a diversos artículos sobre el tema durante la década de los setenta ([Ell70], [Coc73], [Wil74], [Wil76]...). Finalmente, en 1976 Diffie y Hellman publicaron sus trabajos sobre criptografía de clave pública ([DH76]), dando lugar al período de criptografía de clave pública, que dura hasta la actualidad.

Criptosistemas

Matemáticamente, podemos definir un criptosistema como una cuaterna de elementos {}, formada por:
  • Un conjunto finito llamado alfabeto, , a partir del cual, y utilizando ciertas normas sintácticas y semánticas, podremos emitir un mensaje en claro (plain text) u obtener el texto en claro correspondiente a un mensaje cifrado (cipher text). Frecuentemente, este alfabeto es el conjunto de los enteros módulo , , para un dado.
  • Otro conjunto finito denominado espacio de claves, , formado por todas las posibles claves, tanto de cifrado como de descifrado, del criptosistema.
  • Una familia de aplicaciones del alfabeto en sí mismo, , llamadas transformaciones de cifrado. El proceso de cifrado se suele representar como
    donde , y .
  • Otra familia de aplicaciones del alfabeto en sí mismo, , llamadas transformaciones de descifrado. Análogamente al proceso de cifrado, el de descifrado se representa como
    ,
    donde , y .
Muchos autores dividen a su vez un miembro de esta cuaterna, el alfabeto, en dos espacios diferentes: el espacio de mensajes, , formado por los textos en claro que se pueden formar con el alfabeto, y el espacio de cifrados, , formado por todos los posibles criptogramas que el cifrador es capaz de producir. Sin embargo, lo habitual es que tanto el texto en claro como el cifrado pertenecezcan al alfabeto, por lo que hemos preferido no hacer distinciones entre uno y otro, agrupándolos en el conjunto para simplificar los conceptos que presentamos. Así, un criptosistema presenta la estructura mostrada en la figura 20.1.
Figura 20.1: Estructura de un criptosistema

El emisor emite un texto en claro, que es tratado por un cifrador con la ayuda de una cierta clave, , creando un texto cifrado (criptograma). Este criptograma llega al descifrador a través de un canal de comunicaciones (como hemos dicho antes, para nosotros este canal será habitualmente algún tipo de red), y este convierte el criptograma de nuevo en texto claro, apoyándose ahora en otra clave, (veremos más adelante que esta clave puede o no ser la misma que la utilizada para cifrar).Este texto claro ha de coincidir con el emitido inicialmente para que se cumplan los principios básicos de la criptografía moderna: en este hecho radica toda la importancia de los criptosistemas.

Es obvio, a la vista de lo expuesto anteriormente, que el elemento más importante de todo el criptosistema es el cifrador, que ha de utilizar el algoritmo de cifrado para convertir el texto claro en un criptograma. Usualmente, para hacer esto, el cifrador depende de un parámetro exterior, llamado clave de cifrado (o de descifrado, si hablamos del descifrador) que es aplicado a una función matemática irreversible (al menos, computacionalmente): no es posible invertir la función a no ser que se disponga de la clave de descifrado. De esta forma, cualquier conocedor de la clave (y, por supuesto, de la función), será capaz de descifrar el criptograma, y nadie que no conozca dicha clave puede ser capaz del descifrado, aún en el caso de que se conozca la función utilizada.

Clasificación de los criptosistemas

La gran clasificación de los criptosistemas se hace en función de la disponibilidad de la clave de cifrado/descifrado. Existen, por tanto, dos grandes grupos de criptosistemas:

Criptosistemas de clave secreta

Denominamos criptosistema de clave secreta (de clave privada, de clave única o simétrico) a aquel criptosistema en el que la clave de cifrado, , puede ser calculada a partir de la de descifrado, , y viceversa. En la mayoría de estos sistemas, ambas claves coinciden, y por supuesto han de mantenerse como un secreto entre emisor y receptor: si un atacante descubre la clave utilizada en la comunicación, ha roto el criptosistema.

Hasta la década de los setenta, la invulnerabilidad de todos los sistemas dependía de este mantenimiento en secreto de la clave de cifrado. Este hecho presentaba una gran desventaja: había que enviar, aparte del criptograma, la clave de cifrado del emisor al receptor, para que éste fuera capaz de descifrar el mensaje. Por tanto, se incurría en los mismos peligros al enviar la clave, por un sistema que había de ser supuestamente seguro, que al enviar el texto plano. De todos los sistemas de clave secreta, el único que se utiliza en la actualidad es DES (Data Encryption Standard, que veremos más adelante); otros algoritmos de clave privada, como el cifrado Caesar o el criptosistema de Vigenère (serán también brevemente comentados más adelante) han sido criptoanalizados con éxito, lo cual da una idea del porqué del desuso en que han caído estos sistemas (con la excepción de DES, que es seguramente el algoritmo de cifra más utilizado en la actualidad). Por si esto no fuera suficiente, el hecho de que exista al menos una clave de cifrado/descifrado entre cada dos usuarios de un sistema haría inviable la existencia de criptosistemas simétricos en las grandes redes de computadores de hoy en día: para un sistema de computación con usuarios, se precisarían claves diferentes, lo cual es obviamente imposible en grandes sistemas. Todos estos motivos han propiciado que el estudio de los cifradores simétricos (excepto DES) quede relegado a un papel histórico.

Los sistemas de cifrado de clave única se dividen a su vez en dos grandes grupos de criptosistemas: por una parte tenemos los cifradores de flujo, que son aquellos que pueden cifrar un sólo bit de texto claro al mismo tiempo, y por tanto su cifrado se produce bit a bit, y por otro lado tenemos los cifradores de bloque, que cifran un bloque de bits (habitualmente, cada bloque es de 64 bits) como una única unidad.

Criptosistemas de clave pública

Como hemos dicho en la introducción, en 1976, Whitfield Diffie y Martin Hellman, de la Universidad de Stanford, demostraron la posibilidad de construir criptosistemas que no precisaran de la transferencia de una clave secreta en su trabajo [DH76]. Esto motivó multitud de investigaciones y discusiones sobre la criptografía de clave pública y su impacto, hasta el punto que la NSA (National Security Agency) estadounidense trató de controlar el desarrollo de la criptografía, ya que la consideraban una amenaza peligrosa para la seguridad nacional. Esta polémica ha llegado incluso hasta nuestros días, en los que el affaire Zimmermann (el autor de PGP) o el Clipper Chip han llenado portadas de periódicos de todo el mundo.

Veamos ahora en que se basan los criptosistemas de clave pública. En éstos, la clave de cifrado se hace de conocimiento general (se le llama clave pública). Sin embargo, no ocurre lo mismo con la clave de descifrado (clave privada), que se ha de mantener en secreto. Ambas claves no son independientes, pero del conocimiento de la pública no es posible deducir la privada sin ningún otro dato (recordemos que en los sistemas de clave privada sucedía lo contrario). Tenemos pues un par clave pública-clave privada; la existencia de ambas claves diferentes, para cifrar o descifrar, hace que también se conozca a estos criptosistemas como asimétricos.

Cuando un receptor desea recibir una información cifrada, ha de hacer llegar a todos los potenciales emisores su clave pública, para que estos cifren los mensajes con dicha clave. De este modo, el único que podrá descifrar el mensaje será el legítimo receptor, mediante su clave privada. Matemáticamente, si es el algoritmo cifrador y el descifrador, se ha de cumplir que
,
representando un mensaje, y siendo y las claves de descifrado y cifrado, respectivamente.

Criptoanálisis

El criptoanálisis es la ciencia opuesta a la criptografía (quizás no es muy afortunado hablar de ciencias opuestas, sino más bien de ciencias complementarias), ya que si ésta trata principalmente de crear y analizar criptosistemas seguros, la primera intenta romper esos sistemas, demostrando su vulnerabilidad: dicho de otra forma, trata de descifrar los criptogramas. El término descifrar siempre va acompañado de discusiones de carácter técnico, aunque asumiremos que descifrar es conseguir el texto en claro a partir de un criptograma, sin entrar en polémicas de reversibilidad y solidez de criptosistemas.

En el análisis para establecer las posibles debilidades de un sistema de cifrado, se han de asumir las denominadas condiciones del peor caso: (1) el criptoanalista tiene acceso completo al algoritmo de encriptación, (2) el criptoanalista tiene una cantidad considerable de texto cifrado, y (3) el criptoanalista conoce el texto en claro de parte de ese texto cifrado. También se asume generalmente el Principio de Kerckhoffs, que establece que la seguridad del cifrado ha de residir exclusivamente en el secreto de la clave, y no en el mecanismo de cifrado.

Aunque para validar la robustez de un criptosistema normalmente se suponen todas las condiciones del peor caso, existen ataques más específicos, en los que no se cumplen todas estas condiciones. Cuando el método de ataque consiste simplemente en probar todas y cada una de las posibles claves del espacio de claves hasta encontrar la correcta, nos encontramos ante un ataque de fuerza bruta o ataque exhaustivo. Si el atacante conoce el algoritmo de cifrado y sólo tiene acceso al criptograma, se plantea un ataque sólo al criptograma; un caso más favorable para el criptoanalista se produce cuando el ataque cumple todas las condiciones del peor caso; en este caso, el criptoanálisis se denomina de texto en claro conocido. Si además el atacante puede cifrar una cantidad indeterminada de texto en claro al ataque se le denomina de texto en claro escogido; este es el caso habitual de los ataques contra el sistema de verificación de usuarios utilizado por Unix, donde un intruso consigue la tabla de contraseñas (generalmente /etc/passwd) y se limita a realizar cifrados de textos en claro de su elección y a comparar los resultados con las claves cifradas (a este ataque también se le llama de diccionario, debido a que el atacante suele utilizar un fichero `diccionario' con los textos en claro que va a utilizar). El caso más favorable para un analista se produce cuando puede obtener el texto en claro correspondiente a criptogramas de su elección; en este caso el ataque se denomina de texto cifrado escogido.

Cualquier algoritmo de cifrado, para ser considerado seguro, ha de soportar todos estos ataques y otros no citados; sin embargo, en la criptografía, como en cualquier aspecto de la seguridad, informática o no, no debemos olvidar un factor muy importante: las personas. El sistema más robusto caerá fácilmente si se tortura al emisor o al receptor hasta que desvelen el contenido del mensaje, o si se le ofrece a uno de ellos una gran cantidad de dinero; este tipo de ataques (sobornos, amenazas, extorsión, tortura...) se consideran siempre los más efectivos.

Criptografía clásica

El sistema Caesar

El cifrado Caesar (o César) es uno de los más antiguos que se conocen. Debe su nombre al emperador Julio César, que presuntamente lo utilizó para establecer comunicaciones seguras con sus generales durante las Guerras Gálicas.

Matemáticamente, para trabajar con el cifrado Caesar, tomamos el alfabeto (enteros de módulo ). Cuando y son primos entre sí, la aplicación , , recibe el nombre de codificación módulo m con parámetros a, b, donde el par es la clave de este criptosistema. Así, trabajando con el alfabeto inglés (para nosotros resulta conveniente tomar este alfabeto, de uso más extendido en informática que el español; la única diferencia radica en el uso de la letra `ñ'), podemos tomar el alfabeto definido por , para lo cual asignamos a cada letra un entero módulo 26, de la siguiente forma:
A=0 B=1 C=2 D=3 E=4 F=5
G=6 H=7 I=8 J=9 K=10 L=11
M=12 N=13 O=14 P=15 Q=16 R=17
S=18 T=19 U=20 V=21 W=22 X=23
Y=24 Z=25        
El cifrado Caesar siempre utiliza la clave , es decir, siempre tomaremos . De esta forma, la anterior aplicación quedará , lo cual se traduce sencillamente en que para encriptar una letra hemos de tomar su entero correspondiente y sumarle (la clave del criptosistema) para obtener el texto cifrado. Análogamente, y gracias al hecho de que siempre ha de ser biyectiva, independientemente del valor de , para descifrar un texto tomamos la función inversa, definida por . Veamos un ejemplo sencillo, en el que se toma : queremos cifrar, con la clave , la palabra CESAR; en primer lugar, tomando el valor de cada letra, tenemos el equivalente numérico de la palabra:
C E S A R
2 4 18 0 17
A cada uno de los números anteriores le aplicamos la función , de forma que obtenemos el texto cifrado:
6 8 22 4 21
G I W E W
Este texto (GIWEV) es el resultado de cifrar la palabra CESAR con la clave elegida (): es lo que enviaríamos al receptor, que conociendo la clave acordada sería capaz de descifrarlo.

Veamos ahora el ejemplo contrario: somos los receptores de un mensaje del que sabemos que ha sido cifrado con la misma clave , y buscamos descifrar la cadena que nos ha sido enviada, FVYXYW. El valor de cada letra es
F V Y X Y W
5 21 24 23 24 22
Tomando , tenemos el resultado
1 17 20 19 20 18
B R U T U S
Como vemos, retornando cada número al alfabeto inglés obtenemos el texto en claro que nuestro emisor nos ha enviado: BRUTUS, equivalente al cifrado FVYXYW.

Si en el cifrado de un mensaje obtuviéramos que (genéricamente, ), como trabajamos con enteros de módulo , deberíamos dividir por , considerando el resto entero como la cifra adecuada. Así, si , tomamos (el resto de la división entera), por lo que situaríamos una `A' en el texto cifrado.

Es obvio que el cifrado Caesar tiene 26 claves diferentes (utilizando el alfabeto inglés), incluyendo la clave de identidad (), caso en el que el texto cifrado y el texto en claro son idénticos. Así pues, no resultaría muy difícil para un criptoanalista realizar un ataque exhaustivo, buscando en el texto cifrado palabras en claro con significado en el lenguaje utilizado. Por este motivo, y por otros muchos, este criptosistema es claramente vulnerable para un atacante, no ofreciendo una seguridad fiable en la transmisión de datos confidenciales.

El criptosistema de Vigènere

El sistema de cifrado de Vigenère (en honor al criptógrafo francés del mismo nombre) es un sistema polialfabético o de sustitución múltiple. Este tipo de criptosistemas aparecieron para sustituir a los monoalfabéticos o de sustitución simple, basados en el Caesar, que presentaban ciertas debilidades frente al ataque de los criptoanalistas relativas a la frecuencia de aparición de elementos del alfabeto. El principal elemento de este sistema es la llamada Tabla de Vigenère, una matriz de caracteres cuadrada, con dimensión , que se muestra en la tabla 20.1.

Tabla 20.1: Tableau Vigènere


  a b c d e f g h i j k l m n o p q r s t u v w x y z
A a b c d e f g h i j k l m n o p q r s t u v w x y z
B b c d e f g h i j k l m n o p q r s t u v w x y z a
C c d e f g h i j k l m n o p q r s t u v w x y z a b
D d e f g h i j k l m n o p q r s t u v w x y z a b c
E e f g h i j k l m n o p q r s t u v w x y z a b c d
F f g h i j k l m n o p q r s t u v w x y z a b c d e
G g h i j k l m n o p q r s t u v w x y z a b c d e f
H h i j k l m n o p q r s t u v w x y z a b c d e f g
I i j k l m n o p q r s t u v w x y z a b c d e f g h
J j k l m n o p q r s t u v w x y z a b c d e f g h i
K k l m n o p q r s t u v w x y z a b c d e f g h i j
L l m n o p q r s t u v w x y z a b c d e f g h i j k
M m n o p q r s t u v w x y z a b c d e f g h i j k l
N n o p q r s t u v w x y z a b c d e f g h i j k l m
O o p q r s t u v w x y z a b c d e f g h i j k l m n
P p q r s t u v w x y z a b c d e f g h i j k l m n o
Q q r s t u v w x y z a b c d e f g h i j k l m n o p
R r s t u v w x y z a b c d e f g h i j k l m n o p q
S s t u v w x y z a b c d e f g h i j k l m n o p q r
T t u v w x y z a b c d e f g h i j k l m n o p q r s
U u v w x y z a b c d e f g h i j k l m n o p q r s t
V v w x y z a b c d e f g h i j k l m n o p q r s t u
W w x y z a b c d e f g h i j k l m n o p q r s t u v
X x y z a b c d e f g h i j k l m n o p q r s t u v w
Y y z a b c d e f g h i j k l m n o p q r s t u v w x
Z z a b c d e f g h i j k l m n o p q r s t u v w x y



La clave del sistema de cifrado de Vigenère es una palabra de letras, , del alfabeto utilizado anteriormente; esta palabra es un elemento del producto cartesiano ( veces), que es justamente el alfabeto del criptosistema de Vigenère. De esta forma, el mensaje a cifrar en texto claro ha de descomponerse en bloques de elementos - letras - y aplicar sucesivamente la clave empleada a cada uno de estos bloques, utilizando la tabla anteriormente proporcionada.

Veamos un ejemplo de aplicación del criptosistema de Vigenère: queremos codificar la frase La abrumadora soledad del programador utilizando la clave prueba. En primer lugar, nos fijamos en la longitud de la clave: es de seis caracteres, por lo que descomponemos la frase en bloques de longitud seis; aunque el último bloque es de longitud tres, esto no afecta para nada al proceso de cifrado:
laabru madora soleda ddelpr ograma dor
Ahora, aplicamos a cada bloque la clave prueba y buscamos los resultados como entradas de la tabla de Vigenère:
laabru    madora   soleda    ddelpr    ograma   dor
prueba    prueba   prueba    prueba    prueba   pru
arufsu    brxhsa   igfiea    suyoqr    exmena   sgm
Por ejemplo, la primera `a' del texto cifrado corresponde a la entrada , o, equivalentemente, de la tabla de Vigenère. Finalmente, vemos que el texto cifrado ha quedado arufsu brxhsa igfiea suyoqr exmena sgm.

Este método de cifrado polialfabético se consideraba invulnerable hasta que en el S.XIX se consiguieron descifrar algunos mensajes codificados con este sistema, mediante el estudio de la repetición de bloques de letras: la distancia entre un bloque y su repetición suele ser múltiplo de la palabra tomada como clave.

Una mejora sobre el cifrado de Vigenère fué introducida por el sistema de Vernam, utilizando una clave aleatoria de longitud igual a la del mensaje; la confianza en este nuevo criptosistema hizo que se utilizase en las comunciaciones confidenciales entre la Casa Blanca y el Kremlin, hasta, por lo menos, el año 1987.

Un criptosistema de clave secreta: DES

El DEA (Data Encryption Algorithm) o DES (Data Encryption Standard) es desde 1977 de uso obligatorio en el cifrado de informaciones gubernamentales no clasificadas (anunciado por el National Bureau of Standards, USA). Este criptosistema fue desarrollado por IBM como una variación de un criptosistema anterior, Lucifer, y posteriormente, tras algunas comprobaciones llevadas a cabo por la NSA estadounidense, pasó a transformarse en el que hoy conocemos como DES. DES puede ser implementado tanto en software como en chips con tecnología VLSI (Very Large Scale Integration), alcanzando en hardware una velocidad de hasta 50 Mbs. Un ejemplo de implantación hard puede ser PC-Encryptor, de Eracom, y un ejemplo de implantación en software es DES-LOCK, de la empresa Oceanics.

DES es un sistema de clave privada tanto de cifrado como de descifrado; posee una clave de entrada con una longitud de 64 bits, produciendo una salida también de 64 bits, con una clave de 56 bits (el octavo bit de cada byte es de paridad), llamada clave externa, en la que reside toda la seguridad del criptosistema ya que el algoritmo es de dominio público. Cada trozo de 64 bits de los datos se desordena según un esquema fijo a partir de una permutación inicial conocida como IP. A continuación, se divide cada uno de los trozos en dos mitades de 32 bits, que se someten a un algoritmo durante 16 iteraciones. Este algoritmo básico que se repite 16 veces (llamadas vueltas), utiliza en cada una de ellas 48 de los 56 bits de la clave (estos 48 bits se denominan clave interna, diferente en cada vuelta); las claves internas se utilizan en un orden para cifrar texto (llamemoslas ) y en el orden inverso ( ) para descifrarlo. En cada una de las vueltas se realizan permutaciones, sustituciones no lineales (que constituyen en sí el núcleo del algoritmo DES) y operaciones lógicas básicas, como la XOR. La mitad derecha se transfiere a la mitad izquierda sin ningún cambio; también se expande de 32 hasta 48 bits, utilizando para ello una simple duplicación. El resultado final de una iteración es un XOR con la clave interna de la vuelta correspondiente, y esta salida se divide en bloques de 6 bits, cada uno de los cuales se somete a una sustitución en un bloque de 4 bits (bloque-S, con un rango 0...63) dando una salida también de 4 bits (rango decimal 0...15) que a su vez se recombina con una permutación en un registro con longitud 32 bits. Con el contenido de este registro se efectua una operación XOR sobre la mitad izquierda de los datos originales, convirtiéndose el nuevo resultado en una salida (parte derecha) de 32 bits; transcurridas las dieciseis vueltas, las dos mitades finales (de 32 bits cada una) se recombinan con una permutación contraria a la realizada al principio (IP), y el resultado es un criptograma de 64 bits.

Aunque no ha sido posible demostrar rigurosamente la debilidad del criptosistema DES, y actualmente es uno de los más utilizados en el mundo entero, parece claro que con las actuales computadoras y su elevada potencia de cálculo una clave de 56 bits (en la que recordemos, reside toda la seguridad del DES) es fácilmente vulnerable frente a un ataque exhaustivo en el que se prueben combinaciones de esos 56 bits. Hay que resaltar que el tamaño inicial de la clave, en el diseño de IBM, era de 128 bits; la razón de la disminución no se ha hecho pública hasta el momento. Por si esto fuera poco, otro factor que ha aumentado las controversias y discusiones acerca de la seguridad de DES son dos propiedades del algoritmo: la propiedad de complementación, que reduce el tiempo necesario para un ataque exhaustivo, y la propiedad de las claves débiles, dada cuando el proceso de cifrado es idéntico al de descifrado ( ), que sucede con cuatro claves del criptosistema. Otro secreto de IBM (a instancias de la NSA) es la elección y diseño de las cajas que DES utiliza para el cifrado; no se puede evitar el pensar que el gobierno estadounidense precise un criptosistema con la robustez necesaria para que nadie, excepto ellos, pueda descifrarlo.

A la vista de estos hechos, la idea de que DES no va a seguir siendo el algoritmo de cifrado estándar en las instituciones estadounidenses se va generalizando poco a poco; por tanto, va a ser necesario sustituirlo por otro algoritmo más robusto frente a los ataques. Siguiendo esta línea, Xuejia Lai y James Massey, dos prestigiosos criptógrafos, desarrollaron a finales de la década de los ochenta el algoritmo IDEA (International Data Encryption Algorithm), compatible con DES (para aprovechar el gran número de equipos que utilizan este algoritmo), y con una robustez garantizada por la clave de 128 bits que utiliza este cifrador de bloques y las complejas operaciones utilizadas para evitar el éxito de un posible atacante, que van desde técnicas de difusión hasta adiciones módulo .

El algoritmo IDEA está siendo ampliamente aceptado en diversas aplicaciones informáticas orientadas a la seguridad de los datos; numerosos programas destinados a trabajar en red utilizan ya este algoritmo como el principal de cifrado.

Criptosistemas de clave pública

El criptosistema RSA

Este sistema de clave pública fué diseñado en 1977 por los profesores del MIT (Massachusetts Institute of Technology) Ronald R. Rivest, Adi Shamir y Leonard M. Adleman, de ahí las siglas con las que es conocido. Desde entonces, este algoritmo de cifrado se ha convertido en el prototipo de los de clave pública.

La seguridad de RSA radica en la dificultad de la factorización de números grandes: es fácil saber si un número es primo, pero es extremadamente difícil obtener la factorización en números primos de un entero elevado, debido no a la dificultad de los algoritmos existentes, sino al consumo de recursos físicos (memoria, necesidades hardware...incluso tiempo de ejecución) de tales algoritmos. Se ha demostrado que si n es el número de dígitos binarios de la entrada de cualquier algoritmo de factorización, el coste del algoritmo es , con un tiempo de ejecución perteneciente a la categoría de los llamados problemas intratables.

Veamos el funcionamiento del algoritmo RSA: si un usuario A desea enviar información cifrada, en primer lugar tiene que calcular un par de claves (pública y privada), para lo que ha de elegir aleatoriamente dos números primos grandes (del orden de cien dígitos), y , números que se han de mantener en secreto; si llamamos ( se conoce como módulo) al producto , el usuario ha de determinar otro entero, , llamado exponente privado, que cumpla
es decir, y el producto , que llamaremos función de Euler y denotaremos , han de ser primos. Con estos datos, ya tenemos la clave privada del cifrado: el par ; para obtener la clave pública, hallamos el inverso multiplicativo del número respecto de , de la forma . Calculado este entero , llamado exponente público, la clave pública será el par .

Una vez el emisor A dispone de sus claves pública y privada, podría enviar un mensaje cifrado, que llamaremos , a un posible receptor, mediante la operación
aplicada a cada elemento del mensaje.

Cuando el receptor del criptograma desee descifrar el mensaje recibido, ha de realizar la operación
para obtener el texto en claro del mensaje que acaba de recibir.

El sistema RSA ha permanecido invulnerable hasta hoy, a pesar de los numerosos ataques de criptoanalistas; teóricamente es posible despejar para obtener la clave privada, a partir de la función de descifrado, resultando
Sin embargo, el cálculo de logaritmos discretos es un problema de una complejidad desbordante, por lo que este tipo de ataque se vuelve impracticable: la resolución de congruencias del tipo , necesarias para descifrar el mensaje, es algorítmicamente inviable sin ninguna información adicional, debido al elevado tiempo de ejecución del algoritmo. Aunque cuando los factores de son pequeños existe un algoritmo, desarrollado por Pohlig y Hellman de orden , éste es otro de los algoritmos catalogados como intratables, vistos anteriormente.

El criptosistema de ElGamal

Durante 1984 y 1985 ElGamal desarrolló un nuevo criptosistema de clave pública basado en la intratabilidad computacional del problema del logaritmo discreto: obtener el valor de a partir de la expresión
es, como hemos comentado para RSA, computacionalemente intratable por norma general.

Aunque generalmente no se utiliza de forma directa, ya que la velocidad de cifrado y autenticación es inferior a la obtenida con RSA, y además las firmas producidas son más largas (<el doble de largo que el texto original!), el algoritmo de ElGamal es de gran importancia en el desarrollo del DSS (Digital Signature Standard), del NIST (National Institute of Standards and Technology) estadounidense.

En este sistema, para generar un par clave pública/privada, se escoge un número primo grande, , y dos enteros y , , , y se calcula
La clave pública será el número , y la privada el número .

Para firmar un determinado mensaje, el emisor elige un entero aleatorio , , no usado con anterioridad y con la restricción que sea relativamente primo a , y computa

,
donde es el inverso de ; así,
.
La firma del mensaje estará entonces formada por y ; un potencial receptor puede usar la clave pública y para calcular y comprobar si coincide con :
El criptosistema de ElGamal tiene una característica determinante que lo distingue del resto de sistemas de clave pública: en el cifrado se utiliza aparte de la clave pública del receptor, la clave privada del emisor.

Criptosistema de McEliece

En 1978 McEliece presentó un nuevo criptosistema de clave pública, basado en la Teoría de la Codificación algebraica. Dado que esta teoría es muy compleja, los expertos recomiendan una familiarización matemática preliminar con la Teoría de la Codificación, los Códigos de Goppa, y los Cuerpos de Galois.

En el sistema de McEliece, cada usuario ha de elegir un polinomio irreducible de grado , y construir una matriz generadora del correspondiente código de Goppa, matriz , de orden . También ha de calcular , matriz generadora de código lineal tal que no exista un algoritmo computable que corrija los errores con éste código en un tiempo pequeño; esta matriz es obtenida a partir de la expresión
con una matriz aleatoria no singular de orden , y una matriz de permutaciones de orden . Todos los usuarios del sistema mantienen sus respectivos y públicos, mientras que las matrices , y serán secretas.

Supongamos que un emisor A quiere enviar un mensaje al receptor B. Para ello, representará el mensaje como un conjunto de cadenas binarias, , de longitud bits, y enviará el mensaje cifrado de bits
,
siendo un vector de longitud y peso que dificulta el criptoanálisis de un potencial atacante, por razones en las que no vamos a entrar.

Cuando B recibe el mensaje, ha de calcular
utilzando sus matrices , y (que recordemos son privadas). El vector se calcula como
y tiene también un peso inferior a .

Llamando , el receptor B puede calcular ahora el mensaje original, a partir de
(<recordemos una vez más que ha de ser privada para cada usuario!). Hay que resaltar, por último, que aunque el criptosistema de McEliece no ha sido completamente acogido por la comunidad criptológica, es muy importante el estudio que desde la presentación del sistema en 1978 se está haciendo para el desarrollo de sistemas de clave pública basados en la Teoría de la Codificación.

Funciones resumen

Matemáticamente podemos definir las funciones resumen (hash functions) como proyecciones de un conjunto, generalmente con un número elevado de elementos (incluso infinitos), sobre un conjunto de tamaño fijo y mucho más pequeño que el anterior; por ejemplo, podemos definir la siguiente función resumen, que va de un conjunto con un número infinito de elementos a otro con únicamente 10:
, ,
Sin embargo, aunque la anterior sea una función resumen en sentido estricto, no es especialmente interesante en aplicaciones criptográficas; para serlo, habría de cumplir los siguientes requisitos:
  • La entrada puede ser de un tamaño indeterminado.
  • La salida es de un tamaño fijo, varios órdenes de magnitud más pequeño que el anterior.
  • Para un cierto , calcular es computacionalmente barato.
  • es de un solo sentido.
  • no presenta colisiones.
El que una función hash sea de un solo sentido (lo que se denomina One-Way hash function) no implica más que a partir del valor de no puedo obtener el de : no existe , o su cálculo es computacionalmente difícil. Las colisiones en una función resumen se producen cuando para dos entradas diferentes e , , y se habla de funciones hash débilmente libres de colisiones (weakly collision free) cuando es computacionalmente imposible encontrar dos elementos e tales que cumplan ; si aparte de computacionalmente imposible también lo es matemátimamente, se habla de funciones resumen fuertemente libres de colisiones (strongly collision-free).

Una de las aplicaciones criptográficas más importante de las funciones resumen es sin duda la verificación de integridad de archivos; aunque ya hemos hablado de los verificadores de integridad tipo Tripwire en el capítulo dedicado a los sistemas de detección de intrusos, la idea es sencilla: en un sistema del que tengamos constancia que está `limpio' (esto es, que no ha sido troyanizado o modificado de cualquier forma por un pirata) podemos generar resúmenes de todos los ficheros que consideremos clave para el correcto funcionamiento de la máquina y guardar dichos resúmenes - como ya indica su nombre, mucho más cortos que los archivos originales - en un dispositivo de sólo lectura como un CD-ROM. Periódicamente, o cuando sospechemos que la integridad de nuestro entorno ha sido violada, podemos volver a generar los resúmenes y comparar su resultado con el almacenado previamente: si no coinciden, podemos estar seguros (o casi seguros) de que el fichero ha sido modificado.

Para este tipo de aplicaciones se suele utilizar la función resumen MD5, diseñada por Ronald Rivest y que viene implementada `de serie' en muchos clones de Unix, como Solaris o Linux (órdenes `md5' o `md5sum'):
luisa:~$ echo "Esto es una prueba" >/tmp/salida
sluisa:~$ md5sum /tmp/salida 
3f8a62a7db3b276342d4c65dba2a5adf  /tmp/salida
luisa:~$ echo "Ahora modifico el fichero" >>/tmp/salida
luisa:~$ md5sum /tmp/salida 
1f523e767e470d8f23d4378d74817825  /tmp/salida
luisa:~$
Otra aplicación importante de las funciones resumen es la firma digital de mensajes - documentos - y su timestamping; en el primer caso, como los algoritmos de firma digital suelen ser lentos, o al menos más lentos que las funciones hash, es habitual calcular la firma digital de un resumen del fichero original, en lugar de hacer el cálculo sobre el propio fichero (evidentemente, de tamaño mayor que su resumen). Con respecto al timestamping, las funciones hash son útiles porque permiten publicar un resumen de un documento sin publicar su contenido, lo cual permite a una parte obtener un timestamp de un documento sin que la autoridad de timestamp conozca el contenido del mismo, pero asegurándose la validez del procedimiento en caso de repudio; en ambos casos, tanto en la firma digital como en el timestamping, trabajar con el resumen es completamente equivalente a trabajar con el archivo original.

Esteganografía

La esteganografía (también llamada cifra encubierta, [CES91]) es la ciencia que estudia los procedimientos encaminados a ocultar la existencia de un mensaje en lugar de ocultar su contenido; mientras que la criptografía pretende que un atacante que consigue un mensaje no sea capaz de averiguar su contenido, el objetivo de la esteganografía es ocultar ese mensaje dentro de otro sin información importante, de forma que el atacante ni siquiera se entere de la existencia de dicha información oculta. No se trata de sustituir al cifrado convencional sino de complementarlo: ocultar un mensaje reduce las posibilidades de que sea descubierto; no obstante, si lo es, el que ese mensaje haya sido cifrado introduce un nivel adicional de seguridad.

A lo largo de la historia han existido multitud de métodos para ocultar información. Quizás los más conocidos hayan sido la tinta invisible, muy utilizada durante la Segunda Guerra Mundial, o las marcas de cualquier tipo sobre ciertos caracteres (desde pequeños pinchazos de alfiler hasta trazos a lápiz que marcan un mensaje oculto en un texto), pero otros mecanismos más `extravagantes' también han sido utilizados: por ejemplo, afeitar la cabeza de un mensajero y tatuar en el cuero cabelludo el mensaje, dejando después que el crecimiento del pelo lo oculte; podemos repasar algunos modelos esteganográficos cuanto menos curiosos en [Kah67].

Con el auge de la informática, el mecanismo esteganográfico más extendido está basado en las imágenes digitales y su excelente capacidad para ocultar información; aunque existen varias formas de conseguirlo ([vSTO94]), la más básica consiste simplemente en sustituir el bit menos significativo de cada byte por los bits del mensaje que queremos ocultar; dado que casi todos los estándares gráficos tienen una graduación de colores mayor de lo que el ojo humano puede apreciar, la imagen no cambiará su apariencia de forma notable. Otros elementos donde ocultar información son las señales de audio y video y el propio texto ([BGML96]); aunque históricamente nunca han estado tan extendidas como la anterior, en los últimos tiempos el interés por los mecanismos de ocultación de información en formatos de audio (principalmente MP3) y video ha ido en aumento. Y no es de extrañar: a nadie se le escapa que con la cantidad de protocolos peer to peer de intercambio de archivos (e-Donkey, Morpheus...) que existen en la actualidad, y que son usados por millones de usuarios para intercambiar ficheros MP3 y DIVX a través de la red, el volumen de información que puede viajar camuflada en los mismos es impresionante. Esto, que a la mayor parte de los mortales nos da un poco igual, es un área de gran interés para las agencias de inteligencia de todo el mundo (muy en especial desde los desgraciados sucesos del once de septiembre pasado), debido al peligro que entraña el intercambio de información discreto, rápido y efectivo que puede establecerse entre miembros de redes terroristas desde cualquier punto del planeta, sin más que un PC conectado a Internet y un programa cliente de cualquiera de estos protocolos.
next up previous contents
Siguiente: Algunas herramientas de seguridad Subir: Otros aspectos de la Anterior: Otros aspectos de la   Índice General
2002-07-15