29 marzo, 2008

CSI XII: Criptografía y cifrado de datos

Bueno, en los últimos posts de Cosas que Sí se dan en Informática hemos tratado (y bastante) el tema de la codificación, que no es más que utilizar otra representación de los datos con algún motivo. Hoy me voy a plantar y os presento el último post dedicado a este tema: luego pasaremos a otra cosa completamente diferente. Pero es que hablando de codificación de la información no quería dejar sin tratar uno de los temas más interesantes y actuales: la encriptación de datos.

Efectivamente, encriptar información consiste en transformarla siguiendo unas reglas o algoritmo. Cuando hacemos esto es, por lo general, porque no nos interesa que todo el mundo pueda entender nuestro mensaje. La primera aproximación para conseguir esto es la que nos parece más evidente: sólo el receptor del mensaje sabrá cuales son las reglas o algoritmo para descifrar la información que yo envío. A esto se le conoce como cifrado de algoritmo secreto y la verdad es que hoy en día está un poco caduco. Veamos por qué.


Probablemente, todo aquel que de pequeño haya formado parte de un club secreto sabrá a lo que me refiero. Lo más sencillo es establecer unas reglas para codificar la información que sólo conozcamos en el club. De ese modo será casi imposible, si las reglas son complicadas, que cualquier persona ajena pueda descifrar el mensaje. Pongamos un ejemplo, en cambio, de reglas sencillas.

El cifrado más antiguo que se conoce se denomina cifrado César y consiste en sumar a cada letra una cantidad para convertirla en otra del mismo abecedario. Si queremos codificar una 'a' y la clave es 5, sumamos 5 caracteres a la 'a' (b,c,d,e,f) y la cambiamos por una 'f'. Cuando llegamos a las letras del final, por supuesto, reemplazamos por las primeras. Así, un mensaje 'abcdez' se codificaría como 'fghije'. Sencillo.

Demasiado sencillo, claro. Pero aquí ha aparecido un concepto importante, que es el de clave. Nuestra clave era 5 y, en principio, sin conocerla, no podíamos descifrar el mensaje... aún conociendo las reglas de codificación. Bueno, en este caso sí, porque el algoritmo es muy sencillo: sabiendo que la regla consiste en sumar cierto número, para romper la clave sólo tendría que probar a ir sumando a cada carácter 1, luego 2, luego 3... hasta encontrar que la clave es 5 al leer un mensaje con sentido: a esto se le conoce como ataque de fuerza bruta

Pero a medida que el algoritmo se hace más complicado y las claves son largas y complejas, se puede asegurar con cierto rigor que un ataque de fuerza bruta encontrará la clave, en el peor de los casos, cuando la información enviada ya no tenga relevancia. Por eso hoy en día la tendencia es utilizar algoritmos públicos -reglas- para codificar la información. Además, con Internet surgió un problema muy importante para los algoritmos secretos: en nuestro club infantil podemos acordar las reglas secretas en una reunión secreta en la casa del árbol (secreta). ¡Pero en Internet no existe esa posibilidad!: necesitas una canal seguro para difundir las reglas secretas y es justamente eso lo que no tenemos1.

El primer 'estándar de facto' de los algoritmos públicos fue DES (Data Encryption Standard). DES fue aprobado en 1976 y en 1998 se consiguió romper la clave mediante un ataque de fuerza bruta que duró 56 horas2. Si consideramos que la potencia de los computadores ha crecido exponencialmente todos esos años podemos otorgar más que un notable a este algoritmo. De todos modos para entonces DES ya había sido sustituido por una variante más compleja Triple DES que en 2001 fue 'reemplazado' por otro algoritmo, AES (Advanced Encryption Standard). Se han especulado algunas debilidades de AES, pero por el momento no se conoce ningún ataque de fuerza bruta que pudiera dar resultado. Tanto es así que el Gobierno de los EE.UU., acostumbrado a los algoritmos secretos, anunció que podía emplear este método público para cifrar sus documentos TOP-SECRET. Así que es MUY, MUY DIFÍCIL romper una clave. Es MUCHO, MUCHO más sencillo robarla.

Se llama criptografía de clave simétrica a la que usa la misma clave para cifrar y para descifrar. Esto es lo más evidente y en lo que todos hemos estado pensando hasta ahora. Pero he aquí un problema: ¿cómo obtener una clave secreta?. Si emisor y receptor comparten ciudad, o país, la cosa es sencilla: quedan un día y, si tienen la seguridad de que la persona que tienen enfrente no es una impostora, acuerdan una clave segura. Pero si dos personas quieren intercambiar información a través de Internet y no pueden conocerse ¿cómo acuerdan la clave con seguridad?.

Otro problema: si yo quiero comunicarme con Juan, gasto una clave secreta. Y con María otra clave (no sea que Juan se entere) y con Antonio otra, Juan gasta otra distinta para comunicarse con Antonia... en fin, que para comunicarme con n personas necesito n claves distintas y esas son muchas: mejor las apunto en un POST-IT, ¿no?.

Para solucionar estos problemas surgió la criptografía de clave asimétrica que, básicamente, gasta una clave para cifrar y una pareja para descifrar. Y esto da mucho juego. Supongamos que yo en mi casa genero una pareja de claves y me quedo una para descifrar: esa es mi clave secreta. Pero la otra clave la publico en un servidor: es mi clave pública. Entonces, si Juan quiere enviarme algo cifrado, coge mi clave pública, encripta la información con ella y me la envía. La gracia está en que sólo con mi clave privada se puede descifrar este mensaje y esa clave yo la tengo escondida: cualquier otro que lea el mensaje sólo encontrará un galimatías. Y lo mismo puede hacer María, Antonio...

Pero, fatalidad, aquí el problema es otro: cuando me llega un mensaje cifrado con mi clave pública y firmado por Juan... ¿cómo sé yo que es Juan el que me lo envía?. No puedo: Juan debe autenticarse. Pero... ¿y si lo hacemos al revés?: Juan publica una clave suya para descifrar. Cifra el mensaje con mi clave pública para cifrar y cifra el resultado con su clave privada para cifrar. Entonces yo (y cualquiera) podré leer el mensaje cifrado por Juan sin más que coger la clave pública de Juan. El texto contendrá un galimatías: sólo yo puedo entenderlo gastando mi clave privada. Al mensaje cifrado con una clave privada para autenticarse se le llama firma digital. La firma digital autentica, impide la alteración (añadiendo contenido al mensaje) y no es repudiable: Juan no puede alegar que ese mensaje no era suyo.

¿Ya está?. No, nunca. Supongamos que Antonio quiere suplantar a Juan y cifra el mensaje: "Hola soy Juan" con una clave privada suya (la de Juan no la conoce). Y en el momento en que yo accedía a un servidor de claves para conocer la clave pública de Juan (y descifrar el mensaje), Antonio intercepta la comunicación y me envía SU clave pareja: entonces yo pensaré que el mensaje ha sido firmado por Juan. Es necesario que existan Autoridades Certificadoras (AC). Estas sirven para garantizar que cierta clave pública corresponde a la de una entidad o persona. Para ello, tras comprobar la identidad del solicitante (y en los casos más serios se requiere la presencia física), la autoridad certificadora asocia en un documento la identidad de la persona con la clave pública y firma digitalmente con su clave -la de la AC- esa asociación.

Yo puedo exigir a Juan su firma digital obtenida de alguna AC de renombre. Por ejemplo, si quiero hacer la declaración de la renta por Internet se me exigirá una firma digital expedida por la administración. Cuando "Juan" contacte conmigo descifraré la firma digital con la clave pública de la AC (que se supone conocida) y obtendré la clave pública de Juan junto con sus datos personales. Y si alguien ha suplantado la clave pública de Juan de algún modo maligno la culpa es de la AC. Fácil, ¿no?.

La verdad es que me he extendido mucho en este post y me he dejado muchas cosas en el tintero. Es un tema muy interesante que se presta al pensamiento conspiranoico. Y es que cualquier comunicación mediante Internet, en algún punto de la misma, será insegura. Pero es lo que tiene la conspiranoia: nunca se puede acabar con ella: siempre puede dar un paso más e incluir a alguien más en la trama. Normal que algunas de estas teorías tengan tanto éxito, ¿no?

1 Eso no significa que los algoritmos secretos de codificación no se sigan utilizando. Los ejércitos (en especial el de EE.UU.) los emplean. Es lo que se llama seguridad por ocultación.
2 La empresa RSA patrocinaba el concurso de rotura, otorgando un premio de 10000 dólares. El primer equipo que lo consiguió tardó 4 meses en encontrar la clave. En 1988 Distributed.Net ganó el segundo desafío en 41 días. Este equipo volvería a ganar en 1999 en un tiempo de 22 horas y 15 minutos, habiendo probado 245000 millones de claves por segundo.

Redes de Computadores (James F. Kurose, Keith W. Ross). Ed. Adison-Wesley
Wikipedia: Criptografia, DES (criptografía simétrica), RSA (criptografía asimétrica).

Posts relacionados