General

Firma de llaves PGP con networking

Para aquellas personas que buscan autenticidad, integridad y cifrado en sus comunicaciones electrónicas existen muchos protocolos y metodologías criptográficas disponibles, categorizables por muchos factores, uno de los cuales me apasiona en particular: aquellos mecanismos que necesitan un notario (como SSL y S/MIME) y aquellos que no, como PGP, OpenPGP y en particular GnuPG.

Con PGP puedo, por ejemplo, intercambiar con personas que conozco correos firmados y cifrados, con adjuntos firmados y cifrados, que me permiten también validar la autenticidad e integridad de estos mensajes. El procedimiento es muy simple, mis amigos y yo creamos pares de llaves, firmamos e intercambiamos las partes públicas de la misma lo que establece una relación de confianza entre nosotros, y el no repudio.

Pero, como todo en tecnología, si no escala, no es útil. Y si quiero comunicarme con personas más allá de los amigos que conozco y con los que físicamente me intercambio estas claves, necesito construir una red de confianza, que en PGP ya existe, y se fortalece mediante buenas prácticas y eventos presenciales conocidos como fiestas de firmado de llaves.

Tradicionalmente, estas fiestas se organizan con mucho tiempo de anticipación, involucra cargar nuestras llaves públicas en servidores de llaves, enviarlas al organizador, imprimir listas en papel con las huellas digitales de las llaves públicas (algoritmos de resumen) y posteriormente una logística presencial mediante la cual se revisan 1 o 2 documentos de identidad como un pasaporte, para validar la identidad. Posteriormente, se firman las llaves y se envían por correo o se suben a un servidor de llaves, y se fortalece la red de confianza.

Esto está bien, pero es una logística complicada, que solo se suele hacer en grandes eventos, relacionados en general con la seguridad informática o el software libre, y excluye a mucha gente que puede usar PGP ahora. Por eso, desde hace unos años promuevo firmados de llaves distribuidos, para novatos, con un enfoque práctico y didáctico. Con el venidero Encuentro Binacional de Software Libre entre Ecuador y Perú en la ciudad de Loja a finales de Enero 2012, me gustaría retomar esta alteativa modea:

  • Crea tu llave con gpg --gen-key. Coloca tu nombre completo con tu apodo y, de ser posible, tu fecha de nacimiento, así como tu correo electrónico principal. Los valores predeterminados para el resto de las opciones están bien. Asegúrate de elegir una clave de al menos 4096 bits.
  • Toma nota del fingerprint de tu clave, revisando si todo salió bien con gpg --fingerprint --list-keys. Recuerda que los últimos ocho dígitos de tu fingerprint son tu key ID. Si algo no salió bien, borra la clave y empieza de nuevo, no pasa nada.
  • Asocia identificadores de usuario si tienes más de una cuenta de correo y quieres manejar PGP en estas cuentas también. Para esto, usa gpg --edit-key KEYID y luego usa el comando adduid. No te olvides de hacer un save de los cambios.
  • Genera un certificado de revocación para salvar tu vida si pierdes la clave, con gpg -o revocacion.asc --armor --gen-revoke KEYID e imprime el archivo revocacion.asc.
  • Cuando esté todo listo, sube tu llave a un servidor de llaves públicas. Nosotros usamos pgp.mit.edu. El comando que debes usar es gpg --keyserver pgp.mit.edu --send-keys KEYID. Puedes usar subkeys.pgp.net o algún otro.
  • Para el día del evento, lleva impreso la salida del comando gpg --fingerprint KEYID, te recomiendo que hagas una hoja con dos columnas en tu procesador de texto favorito y hagas 8-10 por página usando un tipo de letra pequeño. Luego imprimes 2-3 hojas (depende de cuánta gente vaya al evento) y las recortas, quedando como pequeñas tarjetas de presentación con tus datos.
  • Lo más importante, es llevar dos documentos de identificación. Aceptaremos como documento principal la cédula de identidad o el pasaporte de cualquier País, y como documentos de apoyo, las identificaciones emitidas por instituciones educativas y gubeamentales e identificaciones nacionales de otros países.

El día/hora de la fiesta, acércate con tus tarjetas y preséntate, intercambia una tarjeta tuya por otra de tu interlocutor y revisa que su nombre completo y fecha de nacimiento coincida con su documento de identidad. Si todo está bien, pon una pequeña nota en el papel de tu interlocutor para recordarte que debes firmarla al volver a tu casa. Repite hasta que se acaben todos los interesados, y aprovecha para hacer networking.

Al llegar a tu casa, firma las llaves de los participantes así:

  • Instala el paquete signing-party en Debian/Ubuntu o descarga caff para tu distribución: aptitude install signing-party
  • Descarga y firma las llaves con caff -u KEYID -m KEYID1 ... KEYIDn. Si no tienes tu MTA bien configurado, no se enviarán los correos: no entres en pánico, lee más abajo.
  • Importa las llaves firmadas con for file in ~/.caff/keys/`date +%Y-%m-%d`/*.asc; do gpg --import "$file"; done
  • Opcionalmente, firma las llaves manualmente con gpg --edit-key LLAVE y luego usando el comando sign. No te olvides de hacer un save de los cambios.
  • Si no pudiste enviar los correos con caff, sube las llaves firmadas a un servidor de llaves con for llave in LLAVE1 ... LLAVEn; do gpg --keyserver pgp.mit.edu --send-keys $llave; done.

Muchos de estos pasos pueden ser sustituídos con un manejador de llaves GPG gráfico, como Enigmail, kgpg, entre otros, y también hay opciones para Windows y otros sistemas operativos. Deja una nota en los comentarios si tienes más inquietudes, y ¡nos vemos en la fiesta!

En mis últimas firmas en Centroamérica, he llevado pequeños volantes de presentación con mis teléfonos, correos, página Web, Twitter/Identi.ca y otros medios de contacto y agradeciendo a mis huéspedes por su hospitalidad. Te invito a pensar en una idea cool para tu fingerprint y cambiar el mensaje en cada evento que vayas.

Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s