miércoles, 24 de enero de 2007

Criptografía asimétrica (o de clave pública)

Hasta el momento, todos los algoritmos criptográficos que hemos visto se engloban dentro de los conocidos como "simétricos" o de clave privada. Es decir, entre Alice y Bob se comparte un secreto (la clave) que se utiliza para cifrar el contenido de un mensaje. Esto tiene un grave inconveniente y es la distribución de dichas claves: Alice y Bob se tienen que ver en persona para intercambiarla de forma que sea completamente secreta. Además, hay que tener en cuenta que una clave reduce su eficiencia con el tamaño de los mensajes cifrados, por lo que hay que cambiarlas con relativa frecuencia. Todo esto provocaba que antiguamente la distribución de claves no fuera ni sencilla ni barata. Si querías intercambiar un número grande de mensajes tenías que ver en persona a la otra parte e intercambiar un libro entero de claves. El problema surgía cuando estas claves se agotaban: había que reunirse de nuevo o enviar a alguien de plena confianza con el libro (destacando lo de "plena confianza", ya que a partir de ese momento la tercera persona podía leer todos los mensajes que se intercambiaran con tan solo conservar una copia del libro). Imaginad el problema logístico que suponía la distribución de claves en la segunda guerra mundial, controlando hasta el último detalle para minimizar el peligro de que los libros cayeran en manos enemigas.

Unos años antes, allá por el final del siglo XIX, un economista inglés, William Stanley Jevons, se percató de que el coste de una operación y su inversa puede ser muy distinto. Por ejemplo, si os pido que me calculeis los factores primos de 851 seguramente me mandéis a paseo, pero en cambio todos podéis multiplicar sin esfuerzo 23 por 37 (aunque viendo el caso que le hicisteis al criptograma de felicitación del año nuevo, que era también bastante fácil, no me atrevería a pedírlo ;).

Pero no fue hasta la década de los 70 del siglo pasado cuando se aprovechó dicha propiedad (en concreto la del ejemplo, la factorización de números primos) para utilizarla en un protocolo criptográfico, revolucionando de esta forma la criptografía. Primero el conocido como Diffie-Hellman y posteriormente el RSA se convirtieron los primeros algoritmos públicos asimétricos que generalizaron su uso. Digo "públicos" porque el ejército del reino unido tenía algún desarrollo previo (y es de esperar que otros gobiernos poderosos también los tuvieran).

¿Y qué nos permiten estos algoritmos? Pues, en contraste con los simétricos, estos nos proveen con dos claves, una sirve para cifrar y la otra para descifrar (de ahí la consideración de "asimétricos"). De esta forma, la clave que utilizamos para descifrar la podemos mantener privada y publicar la que solo sirve para cifrar. Cualquier persona puede tomar nuestra clave pública y cifrar un mensaje con ella de tal forma que solo nosotros, los poseedores de la clave privada, podremos descifrar.

Pero esta forma de comunicación es muy costosa, asi que los protocolos nos recomiendan utilizarla solamente para intercambiar una clave que posteriormente utilizaremos en un algoritmo simétrico (conocida como clave de sesión). Así, cada vez que queramos intercambiar un mensaje podemos utilizar una clave distinta sin necesidad de tener que recurrir a los costosos libros de códigos y su engorrosa distribución.

Pero lo que es también muy interesante de estos protocolos es que nos ofrecen mas funcionalidades aparte de la confidencialidad (acordaos que ya escribí un post hablando de estos servicios). Por ejemplo, permiten "firmar" un mensaje proporcionando autenticidad a la comunicación. ¿Y cómo se hace? Pues resulta que el esquema anterior se puede invertir, es decir, podemos cifrar un mensaje con nuestra clave privada, de tal forma que tan solo se pueda descifrar con la pareja pública. Así, cualquiera puede saber de quién proviene el mensaje: de la única persona que tiene la clave privada.

Con estos protocolos, por tanto, obtenemos servicios de confidencialidad y autenticidad, pero también (no lo voy a explicar ahora, pero lo haré mas adelante) se consigue integridad y no repudio, con lo que por fin tenemos un protocolo que proporciona todos los servicios necesarios para realizar comunicaciones entre dos personas con toda la seguridad posible. Pero además dan mucho juego para otro tipo de servicios muy interesantes que dejo para otra ocasión.

Como es ya costumbre dejo muchas cosas en el tintero, de las que espero hablar mas adelante. Con esto nos adentramos ya en la criptografía contemporánea, ya que los dos algoritmos que he nombrado antes se utilizan en la actualidad (vosotros los utilizais cada vez que accedeis a la página del banco o haceis un comentario en este blog, por poner dos ejemplos), y preparamos el terreno para la aparición de la criptografía cuántica (que es eso que me permite escribir en el blog menos de lo que me gustaría :).

No hay comentarios: