Para poder entender mejor el sistema de codificación usado por los sistemas de claves asimétricas (es decir, claves públicas y privadas), es necesario entender las diferencias con los sistemas de claves simétricas (es decir, claves secretas).
Los sistemas de cifrado con clave simétrica son aquellos en los que la clave que se usa para cifrar una serie de datos es la misma que la que se usará para descifrar estos datos. En el caso del correo electrónico, el remitente cifraría el mensaje con una clave secreta, y para que el destinatario pueda descifrarlo, necesitaría haber obtenido previamente esta misma clave de un modo «seguro», o sea de modo que la clave no haya podido ser interceptada durante la entrega. Si no tenemos la completa seguridad de que el intercambio de la clave ha sido seguro, la validez de este sistema es nula.
Por el contrario, los sistemas de cifrado con claves asimétricas usan claves distintas para el cifrado y posterior descifrado de los datos. En un caso como el anterior, el remitente usaría la clave pública del destinatario para cifrar el mensaje, y el destinatario descifraría el mensaje con su propia clave privada. Así pues, la clave privada no debe ser accesible para nadie que no sea el propio dueño de la misma, mientras que la clave pública, puede ser entregada a cualquier persona. En un sistema de cifrado bien implementado, la clave privada no debe derivar nunca de la clave pública.
El concepto de la firma digital se basa en la verificación de la autoría de un mensaje. Esto quiere decir que se puede comprobar que el destinatario del mensaje puede comprobar que el «supuesto» remitente es quien afirma ser. Para ello, el remitente, una vez compuesto el mensaje, lo firma usando su propia clave privada. El destinatario, una vez ha recibido el mensaje, comprobará la veracidad de éste, esto es, lo verificará usando la clave pública del remitente.
Este método es de especial utilidad para reducir riesgos de seguridad en nuestros sistemas (nos podrían enviar un supuesto parche para un programa, y éste en realidad ser un virus o un troyano); también podrían enviarnos información o datos, como provenientes de una fuente lícita o fiable. En ambos casos, no sería muy difícil falsificar la dirección y nombre del remitente, pero sí imposible falsificar la firma digital de éste.
Como ya hemos dicho, la verificación de un mensaje firmado digitalmente se lleva a cabo mediante el uso de la clave pública del remitente sobre el texto del propio mensaje. De este modo no sólo podemos verificar la identidad del autor, sino que también podemos comprobar la integridad del mensaje, ya que la firma digital ha sido generada con el texto y la clave privada. Así pues, una alteración o modificación del texto «a posteriori», o cualquier manipulación del mensaje (especialmente si hacemos uso de las especificaciones MIME/PGP), daría como resultado un error en la verificación.
Un punto flaco en los algoritmos de clave asimétrica es la transmisión del código público. Es posible que una persona ponga en circulación código con un identificador de usuario falso. Si se codifican mensajes con este pseudo código, el intruso los puede descodificar y leerlos.
La solución PGP
(y por consiguiente la solución GnuPG
) está en
firmar los códigos. La clave pública de un usuario puede estar firmada
con las claves de otros usuarios. El objetivo de estas firmas es el de
reconocer que el UID (identificador de usuario) de la clave pertenece al
usuario a quien dice pertenecer. A partir de ahí es un problema de cada
usuario de GnuPG
el decidir hasta qué punto se puede fiar de la firma.
Una clave se puede considerar fiable cuando se confía en el remitente y
cuando se sabe con seguridad que dicha clave pertenece a éste. Sólo cuando
se puede confiar plenamente en la clave del firmante, se puede confiar en la
firma que acompaña a la clave de un tercero. Para tener la certeza de que la
clave es correcta hay que compararla con la huella digital por medio de
canales fiables (por ejemplo, podríamos buscar el teléfono en la guía y
llamarle, y que nos la dijera de palabra para poder compararla), antes de
darle una confianza absoluta.
Si lo que se desea es mantener la confidencialidad de los datos que se
poseen, no basta con determinar qué algoritmo de cifrado se va a usar;
también es necesario pensar en la seguridad general del sistema. En
principio, PGP
está considerado como suficientemente seguro, y hasta el
momento no se sabe que haya habido ningún incidente en el que una clave PGP
haya sido descodificada. Pero eso no significa que todo lo cifrado sea
seguro; si la NSA (Agencia de Seguridad Nacional de los EE.UU.) hubiera
conseguido descodificar una clave PGP mediante criptoanálisis, análisis
del código, o cualquier otro modo, no es probable que lo hicieran público.
Pero aún en el caso de que las claves PGP fueran a todas luces imposibles de
descodificar, pueden ser utilizados otros tipos de ataques a la seguridad. A
principios de Febrero fue detectado un troyano que buscaba las claves PGP en
el disco duro, y las transfería al atacante mediante FTP. Si en este caso
hubiéramos escogido una contraseña débil o fácil, un simple análisis que
consistiera en un «ataque de diccionario» la descubriría en poco tiempo.
Otra posibilidad técnica, aunque más difícil, es la de los troyanos que recogen entradas de teclado y las transmiten al asaltante. También es posible, aunque muy difícil, pasar el contenido de una pantalla a otra. En este último caso no sería necesario ningún análisis sobre datos cifrados, ya que se obtendrían antes de su cifrado.
Por todo esto es necesaria una planificación de la seguridad que esté bien prevista y que minimice los riesgos.
La idea no es la de recrear una atmósfera de paranoia entre la gente, sino dejar claro que para implementar un sistema seguro no basta con la instalación de un programa criptográfico, que si bien es un paso hacia un sistema más seguro, no es una solución completa. Troyanos como el aparecido en Marzo de 1999 (Melissa) probaron que muchas compañías no se encuentran preparadas en temas de seguridad.