Claves públicas
Por Jacobo Tarrío
13 de febrero de 2003

Creo que una vez iba a escribir aquí sobre criptografía de clave pública, pero cancelé el mensaje antes de ponerlo, que ya iba para largo. Pero ahora que he hablado de X.509 (en el mensaje anterior, o sea, en el de abajo) me animo a ello…

La criptografía, en su sentido clásico, es el “arte” de ocultar el significado de un mensaje. Esto incluye, por supuesto, el cifrado de mensajes.

En el mundo del cifrado hay, principalmente, dos sistemas: criptografía de clave privada y criptografía de clave pública.

En la criptografía de clave privada, para descifrar un mensaje cifrado se tiene que utilizar la misma clave que se empleó para cifrarlo. Es la criptografía clásica, que todo el mundo conoce. Tiene la desventaja de que para que dos personas puedan emplearla para comunicarse, han de ponerse de acuerdo en una clave. Y, por supuesto, han de poder hacerlo de una forma segura: por ejemplo, reuniéndose cara a cara donde nadie pueda verlos o escucharlos.

La criptografía de clave pública es un sistema nuevo (años 70), en el que los mensajes cifrados sólo se pueden descifrar con una clave distinta de la que se usó para cifrarlos; no se pueden descifrar con la misma.

La criptografía de clave pública se llama así porque, de este modo, es posible que alguien pueda enviar a otra persona un mensaje cifrado, sin que antes hayan tenido que reunirse para ponerse de acuerdo en el empleo de una clave; basta con que el destinatario del mensaje haya publicado la clave de cifrado para que cualquier otro la pueda emplear; cuando reciba el mensaje, sólo él con su clave de descifrado podrá leerlo.

Otra cosa interesante (que ya he comentado en la historia del X.509) es la posibilidad de comprobar que un mensaje procede realmente de su “supuesto” autor, y que no ha sido modificado. Para esto, lo que se hace es utilizar criptografía de clave pública, pero “al revés”: es decir, se guarda en secreto la clave de cifrado, y se publica la de descifrado. Cuando el autor quiere enviar un mensaje, lo cifra con su clave secreta: el que lo reciba puede descifrarlo y ver si tiene sentido.

Esto tiene el problema de que alguien que no tuviera un programa capaz de descifrarlo no podría leer el mensaje; podría solucionarse enviando una copia en claro y otra cifrada, pero esto es una barbaridad. En realidad, lo que se cifra es un número, calculado a partir del contenido del mensaje, que se llama “hash”. Las funciones que calculan “hashes” están diseñadas para que un cambio pequeño en el mensaje produzca un cambio grande en el “hash”, y para minimizar la posibilidad de que dos mensajes diferentes produzcan el mismo “hash”. El hash MD5 (el más conocido) produce números de 128 bits (o sea, unas 39 cifras decimales). El hash SHA produce números de 160 bits (es decir, 48 cifras decimales). El receptor calcula el “hash” del mensaje recibido, descifra el “hash” cifrado y los compara. Si son iguales, el mensaje es el mismo. Al “hash” cifrado, por ello, se le llama “firma”.

La criptografía de clave pública tiene sus propios problemas, por supuesto. El principal es el de comprobar que una clave pública determinada pertenece realmente a alguien, y no a otra persona que se hace pasar por ese alguien. Para ello, los programas de criptografía de clave pública suelen incorporar la “firma” de claves públicas. Cuando alguien firma una clave pública de otra persona, está dando fe de que esa persona es quien dice ser, y que esa clave pública le pertenece realmente; luego, los programas pueden comprobar estas firmas automáticamente para determinar la validez de una clave.

Por ejemplo, si Alicia tiene una clave pública firmada por Berto, y la clave pública de Berto está firmada por Carlos, y tú sabes que la clave pública de Carlos es buena, puedes tener una seguridad bastante buena de que la clave de Alicia es buena.

Algunos sistemas, como X.509, dependen de un conjunto de claves “de confianza”, en las que todo el mundo confía, y que firman las claves de todos los demás. Otros, como PGP dependen de la creación de “redes de confianza”. No hay claves en las que todos confíen, y que firmen las claves de los demás, sino que la gente se firma las claves entre sí. Después es posible decirle al programa “confío en las firmas que hace esta persona; no confío en las que hace esta otra persona”, etc., y la fiabilidad de cada clave se calcula automáticamente por la secuencia de firmas que llevan hasta ella.

Otros artículos sobre “Tirando Líneas (2002-2004)”, “criptografía”.
Índice.
Salvo indicación en contrario, esta página y su contenido son Copyright © Jacobo Tarrío Barreiro. Todos los Derechos Reservados. Información sobre tratamiento de datos y condiciones de uso.