Blog Archives

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.

Importing your PGP keyrings in Windows

Recently I had to encrypt some mails using Mozilla Thunderbird 3 in Microsoft Windows, and I wondered if it was possible to import my existing public and private keyrings from Debian into Windows.

And yes, thanks to WinSCP (GPL), GnuPG (GPL) and Enigmail (dual MPL/GPL), it’s a breeze.

Using WinSCP you can securely transfer the .gnupg/pubring.gpg, .gnupg/secring.gpg, .gnupg/trustdb.gpg files from your Linux profile into the %APPDATA%gnupg directory.

Then, given a Thunderbird setup with the Enigmail extension installed, and GnuPG also installed, it’s just a matter of running the Wizard under the “OpenPGP” menu inside Thunderbird.

If you have mail identities already setup, the sec/pub key combination for those identities will be enabled. Then it’s business as usual with Enigmail.

Usar una tarjeta inteligente como factor adicional de autenticación en GnuPG

Desde DC8 tengo un lector USB de tarjetas inteligentes y una tarjeta inteligente preprogramada para ser utilizada en GnuPG que he estado utilizando principalmente para investigar el impacto de tener un factor adicional de autenticación en GnuPG.En principio, no se trata de un mecanismo asequible para el usuario final a través de las interfaces gráficas que están disponibles en el mercado para Linux, sobre todo si se quiere aprovechar en términos de seguridad el tener un segundo factor de autenticación. Esto es una lástima. El lector de tarjetas, sin embargo, sí puede usarse para otras cosas interesantes.Supongamos que tiene una llave GPG. En este momento no importa mucho si la llave ha sido utilizada para algo útil, aunque esto tendrá algunas repercusiones en la usabilidad del factor adicional a futuro.Su llave GPG tiene una subclave principal de cifrado, probablemente creada utilizando ElGamal y probablemente con una longitud de 2048 bits.El objetivo de utilizar una tarjeta inteligente es eliminar la llave secreta y la subclave principal de cifrado de su llave GPG y sustituirla por tres llaves en la tarjeta inteligente que son utilizadas para cifrar, firmar y autenticar. Estas llaves se crean usando RSA y tienen una longitud de 1024 bits. Para acceder a las llaves necesita introducir un código de identificación denominado PIN. Al eliminar estos dos elementos de la llave, se fuerza a cualquier atacante a tener la tarjeta inteligente y el PIN para ejecutar cualquier acción que comprometa la llave.Obviamente, el estado de su llave GPG antes de hacer este cambio puede (y debe) ser guardado en un dispositivo de almacenamiento exteo que se resguarde físicamente de forma segura. Así podrá tener acceso a la llave secreta principal y a la subclave principal de cifrado en caso de algún problema. Esto lo puede hacer a nivel del sistema de archivos respaldando su directorio .gnupg o bien a nivel de la aplicación utilizando --export-keys y --export-secret-keys.Otro aspecto importante a tener en cuenta es el mecanismo que utilizará para acceder a la tarjeta inteligente. Puede usar PC/SC a través del demonio pcscd, o puede usar CCID directamente de acuerdo a la implementación de GnuPG. Para usar la tarjeta con el segundo mecanismo necesita privilegios de administrador o configurar udev para otorgar permisologías a un usuario o grupo en particular.En cualquier momento puede usar gpg --card-status para verificar no solo que el lector y la tarjeta funcionan, sino que la lógica de la tarjeta arroja datos con sentido. También puede usar gpg --card-edit para agregar información adicional de contexto, además de configurar el PIN de la tarjeta. Hay dos PIN, uno de uso cotidiano y uno administrativo. Asegúrese de estar consciente de cual PIN se le solicita para evitar bloquear la tarjeta.Una vez que tenga todo listo, utilice gpg --edit-key LLAVE para editar su llave GPG, y el comando addcardkey para añadir las tres subclaves en la tarjeta inteligente. El orden en que debe seleccionar las claves es: autenticación, firma y cifrado, ya que GnuPG seleccionará automáticamente la última subclave creada para cifrar.Guarde los cambios y seleccione la subclave principal de cifrado utilizando key 1. En este punto debe haber hecho los respaldos y creado las tres subclaves en la tarjeta inteligente. Ahora está listo para eliminar la subclave principal de cifrado de su llave GPG utilizando delkey y guardar los cambios en la misma. Con esto remueve una parte del material sensible de su llave GPG.El siguiente es un procedimiento un poco extraño. Ya ha borrado la subclave principal de cifrado. Ahora quiere borrar la llave secreta de su llave GPG. Y en ambos casos quiere borrar solo la porción secreta, no la pública. La opción --delete-secret-keys de GnuPG eliminará las claves y subclaves secretas, por lo que primero debe respaldar las subclaves:gpg --export-secret-subkeys LLAVE > sub.secringluego debe eliminar las claves y subclaves secretas:gpg --delete-secret-keys LLAVEy luego debe importar las subclaves secretas:gpg --import < sub.secringAnteriormente dijimos que el objetivo era borrar de la llave el material secreto, y no las porciones públicas, por lo que debe importar las porciones públicas de las subclaves, siendo la forma más sencilla importar todo el keyring público del respaldo que haya realizadogpg --import < pubring.backupEl momento de la verdad es cuando sube a un servidor de llaves públicas su llave pública incluyendo las nuevas subclaves. De hecho, el gran problema en la usabilidad de este mecanismo es que las subclaves anteriores no desaparecen de la memoria colectiva y usted depende de que todas las personas que tengan su llave pública descarguen la nueva desde los servidores, de otra forma, continuará recibiendo material cifrado usando la subclave pública anterior. Por eso recomiendo que sólo utilice este modelo de seguridad con dos factores con llaves nuevas y desde el principio.Aparte del cliente de GnuPG en consola, también utilizo la extensión Enigmail para Mozilla Thunderbird, y ésta es lo suficientemente inteligente como para pedirme el PIN de la tarjeta inteligente para las operaciones de firma y cifrado que realizo a futuro con la tarjeta inteligente en el lector. Así mismo, necesito la tarjeta y el PIN para descifrar cualquier material sensible que hayan enviado firmado a mi subclave. Este es el nivel de funcionalidad esperado.Como nota final, puede regenerar las subclaves de firma, autenticación y cifrado en la tarjeta. Sin embargo, mi experiencia personal con la tarjeta g10 es que debe utilizar el protocolo ccid nativo de GnuPG para acceder a la tarjeta. Para esto hay que tener privilegios sobre el dispositivo, por lo que hay un conjunto de reglas de udev disponibles para configurar los permisos a un grupo adicional.

Follow

Get every new post delivered to your Inbox.

Join 1,800 other followers