domingo, 25 de mayo de 2014

Criptografía de clave pública. Introducción para dummies


El siguiente artículo pretende servir de introducción a la criptografía de clave pública. Las motivaciones de por qué emplear un sistema de cifrado en cualquier comunicación electrónica están bastante claras... ¿verdad? Del mismo modo que no enviarías una carta sin sobre, no enviarías un email sin cifrar.

El sistema estándar de facto es PGP.

Primero, la teoría

La criptografía de clave pública resuelve tres problemas:
  • Cifrar un mensaje.
  • Evitar tener que compartir la clave.
  • Adicionalmente, nos permite verificar la identidad del emisor del mensaje.
Así, existen dos claves para cada persona: una clave pública (que es pública y puede conocerla todo el mundo), y una clave privada (que sólo conozco yo y que he de guardar con celo). La magia del sistema es que todo lo que cifra una clave lo descifra la otra.

Pongamos un ejemplo: El empresario Da Sousa le envía un email al influyente político Menéndez.
Hola Menéndez:

Pronto tendrá lugar el concurso de las obras para construir la piscina municipal. Sabes que siempre he apoyado a tu partido y a tus ideales, así que me he tomado la molestia de enviarte un pequeño regalo al despacho. Acuérdate de mi cuando haya que adjudicar los contratos ;)

Un saludo,
Da Sousa

Si Menéndez y Da Sousa enviasen esto sin cifrar, podría venir un juez y descubrirles el pastel. Malo, malo.

Así que deciden usar el cifrado asimétrico. Lo hacen en varios pasos
  • Da Sousa redacta el email.
  • Da Sousa busca la clave pública de Menéndez. La busca en un servidor de claves, o ya la tenía de antemano.
  • Da Sousa cifra el texto, y queda algo así:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1

jA0EAwMCiDDVdRjAK5RgyerPIZTNEHttH/eiW6NqbM5UheQpbvbuus6lIP5j4ETk
IVhJR+2YW5ZeOK1gEceYcStiprRhjskpqhYMoGg30MJMDNNQ1q/EwbJ+EMg1ZhYq
+HBzAK2KlvDhnoTXTacngsp12A4Ocy8vqtE8QUoTKRBHZuegDc3NDHWJ4Bc211u/
VHmx43Rvs/5gxUVvAvVMjKd8SiS3qmVEX/jqr/cfQaWBI3j/o3boQC+yiDiRs+0+
/pQSGgsv9g1aQl6wJc6wRemrXjkpJyscrma49ss2yBSyZbEEu2UtLGoBzXlwF7v+
NsE0WO0DYusedj4qHoejco5Zwx5g5KsyaI/rOf+XsbsARPXX18UvhSvo0nDWWkq7
i7zakVL0sfpFS9XovBAmXFxG+StQh6e+zTkfVufWmqNZ4vlb24VViHMNigABVmwU
qXvxKl9wNVAQHIGRkP3XvHhLUyTzI+MNWHA3bjkBS/lhEDD/iaNAKyzKrQ+eD0l8
CgP5SnWvqqS2EcGx0TZ3Bm+D127GEGTGooon2/Xh/BqT9lsubjF1Lpavg/dtPU7j
riCsAuWS2JFEO80kVmMg+zItjQRiTLJgZAM3PnjD6Rowq/lxA+HS7kwYOkoUv96V
CIf57fk/CI1Pn8sq3UPQtbRExn7BoNi3tekS438zd9CuqOsJlQUJMvnRJxj5BA5R
xSR9mjPR2qLVf7EwAzUbfUCNGbguE99ZOMKICv5cNrFnLQlkSAlRnsHgH1kWp6dO
4Y2vFcBm4qRpaic+y+VJV1Y77/tLrj6i8bJoMJVdgBWcoF1QQcHDqMtvE1gvHyf5
fyOhd6/lsghTTeiYvEgiQ5NnWp8JGNUEZCzSn0Orffc2i16hpefMLdnUXU+5Wykb
kJBont+z6HbgLp5w5B/G5Xldzjw69U0PpI5RVY9Vwq9x1D/MoAc0X+VWSTZ3py5q
WyhZYqadlbqdLlxXc8AQ9rr5Xg+TZpdZ36uHtf0RXDyU4XIMZicc0BqxB86LxlE6
J+tGSW4rMQiZFztx7Z+QlhJH/9j5i/gRshIELlRYyvNB984x5TEu32Odxd1xHx+I
tV5BFsPMjokh6mf7R7aR7yfUUeSN1xldVAMAQBAk+r77ws+MY830pENwJPhdp1WS
u/q6NGMlFo5/MJ/x6aBksFIRWG5stJ7i7opjX1lcFCGI2ypoSkJB9UQFNrmeqWvH
9LA/eBTiwa9CRp1XIuG2tFwtIBrEdoifQ95srJD0BpxrGam2tA+qNbh9R96eu4/Y
yUWziXrjEEvPf7FfJqZIrXVFEPwXvWfkbzjxNqhzO//MbcFd9plqoHrIo23isO52
fTM+iu5/l/M6y7/QDO90Cie6np3oqYUYFErbGL23iQKkIJUH7WE3OzZK/nJTgsxP
v6ob/mx/CxvMeANDLViFgyT5
=7e+6
-----END PGP MESSAGE-----
  • Menéndez recibe un texto aparentemente ilegible.
  • Como el texto aparentemente ilegible está cifrado con la clave pública de Menéndez, lo único que puede descifrarlo es la clave privada de Menéndez.
  • Menéndez usa su clave privada, que sólo conoce él, y puede leer el soborno.

Años más tarde, cuando un juez investigue la causa, sólo verá texto sin sentido y Menéndez y Da Sousa se irán de rositas.

Resumen más resumido:
  1. Redacto un email.
  2. Lo cifro con la clave pública del destinatario.
  3. El destinatario recibe el texto cifrado.
  4. El destinatario usa su clave privada para leerlo.
Así que para poder enviar mensajes cifrados, sólo necesitas tener la clave pública del destinatario. Si la tiene, puedes buscarla en un servidor de claves públicas. O puede pasártela él por email.

Segundo, la práctica

 

Todo esto está muy bien, pero... ¿Cómo lo hago?

El primer paso es bajarse los programas, claro.
  • Para windows: http://www.gpg4win.org/
  • Para linux: seahorse, gpg (consola), seahorse-nautilus. GPG se integra bastante bien en linux
  • Para Android: OpenKeyChan, o APG. Se integran MUY bien en Android.
  • Existen extensiones de Chromium y Firefox. Ejemplo:  Mailvelope
  • Extensiones también para Thunderbird: Enigmail
Si no tenéis un par de claves, podéis generarlo siguiendo los pasos que os diga el programa que habéis elegido.

Importante:
  • Si usáis varios programas, usad el mismo par de claves en todos los dispositivos
  • Subid la clave pública a un servidor de claves. Así cualquiera que quiera podrá encontrarla. Es indiferente a qué servidor la subáis, ya que todos se replican entre sí.
  • Cread un certificado de recovación. Si perdéis la clave (os roban el móvil, os entra un virus...) podréis revocarla. Haciendo esto, le estáis diciendo a todo el mundo "eh! que mi clave ya no es segura!".
  • Guardad vuestra clave privada en un lugar seguro. Copiadla a un pendrive y guardadla a buen recaudo.
Y recordad que todo esto no funciona sólo para el email. También sirve para cifrar archivos, o cifrar texto plano. Podéis hasta pegarle algo a alguien en el muro de Facebook.

Existen muchísimos detalles que no he comentado, así como la posibilidad de firmar mensajes y asegurar tu identidad. Pero creo es mejor omitirlo para mantener la sencillez de esta guía introductoria.