Jan 01 2008

Historia de GnuPG

Published by admin at 3:52 pm under Clave pública

El siguiente post está traducido de un mensaje de Werner Koch a la lista de gnupg y trata de la historia de este programa en los últimos diez años.

Ha pasado una década desde la aparición de la primera versión de GnuPG. Esa primera versión no se conocía aún con el nombre de GnuPG sino que se apodó “g10″ en referencia al artículo de la Constitución alemana que trata de la libertad en las telecomunicaciones (Grungesetz Artikel) y como juego de palabras con la ley G-10 que permite a los servicios secretos pasar por alto estos derechos garantizados por la Constitución.

La versión 0.0.0 publicada el 20 de diciembre de 1997, era apenas un sustituto de PGP que evitaba los algoritmos patentados usando Elgamal y Blowfish en lugar de RSA e IDEA. Se definió como versión de prueba pero a pesar de ello incluía la mayoría de las funciones actuales de GnuPG. El formato de los datos sin embargo no era compatible con OpenPGP sino orientado hacia la versión 2 de PGP con unas pocas extensiones (p.ej. permitir streams de datos). El grupo de trabajo OpenPGP se fundó en el otoño de 1997 lo que descubrí algo tarde como para programar “g10″ de acuerdo con el borrador existente. Por razones de copyright no era práctico efectuar ingeniería inversa sobre el formato de PGP-5, así que fundar el grupo de trabajo OpenPGP fue la decisión correcta en el momento correcto.

Antes de hablar de GnuPG necesitamos retroceder unos años más en la historia: para ayudar a los activistas políticos Phil Zimmerman publicó un programa llamado Pretty Good Privacy (PGP) en 1991. PGP se diseñó como una herramienta de cifrado sencilla sin puertas traseras ni código oculto. Se intentaba que PGP fuese de hecho criptográficamente fuerte y no sólo “bastante bueno” (pretty good); sin embargo tenía un par de bugs iniciales, sobre todo en un algoritmo de diseño casero. Al estar disponible el código fuente, una comunidad de hackers (Branko Lankester, Colin Plumb, Derek Atkins, Hal Finney, Peter Gutmann y otros) le ayudaron a arreglar esos fallos y a lanzar una sólida versión 2.

Pronto empezaron los problemas. Al igual que en muchos países el uso o exportación de dispositivos o programas criptográficos estaban fuertemente restringidos en EEUU. Sólo se permitía criptografía débil. PGP era mucho más fuerte y debido a Usenet y a la disponibilidad de servidores de FTP y BBS, PGP accidentalmente se deslizó fuera del país y pronto Phil fue demandado por exportación de municiones sin licencia. Aquellas leyes de control de exportación no estaban al día, con el curioso efecto de que exportar el programa en forma impresa no parecía estar restringido. MIT Press por tanto publicó un libro con el código fuente de PGP que fue después escaneado fuera de EEUU para formar la base de PGP-2i (”i” de internacional). Desde entonces esa versión se usó ampliamente.

Las investigaciones criminales contra Phil acabaron en 1996 y él fundó PGP Inc para escribir PGP-5. La primera versión pública se hizo en la primavera de 1997. El mismo año en la 39ª reunión de la IETF en Munich, en Agosto, Phil Zimmerman y Jon Callas pidieron a la IETF que estableciese un grupo de trabajo para publicar un estándar del protocolo usado por PGP-5 con el nombre OpenPGP. La principal razón para ello era permitir el uso mayoritario del cifrado fuerte incluso si en algún punto la nueva compañía decidiera dejar de vender y apoyar a PGP. Resultó que PGP Inc fue adquirida por Network Associates sólo unos meses más tarde y en 2002 esta compañía dejó de mantener y desarrollar PGP (aunque el producto PGP fue retomado por la nueva Corporación PGP).

Además aunque a menudo se proclame como Software Libre, PGP nunca ha cumplido los requisitos para serlo: PGP-5 es directamente software propietario; la disponibilidad del código fuente por si sola no lo hace libre. PGP-2 tiene ciertas restricciones sobre el uso comercial (pedía compensación económica en ese caso) y por tanto pone restricciones sobre el software que lo hacen no-libre. Otro problema con PGP-2 es que usa los algoritmos patentados RSA e IDEA. La patente sobre RSA sólo era válida en EEUU pero la de IDEA era y es válida aún en la mayoría de los países.

Aunque el proyecto GNU tenía en sus listas de tareas pendientes una petición de un sustituto para PGP, no era posible empezar a implementarlo, pues las patentes sobre todos los algoritmos de clave pública eran aún válidas. Eso cambió en abril de 1997 cuando la patente básica sobre algoritmos de clave pública caducó (patente de Diffie-Hellman EEUU 4200770) y finalmente en agosto la patente de Hellman-Merkle -más amplia- (4218582) también caducó.

Un mes más tarde, durante la Individual-Network Betriebstagung (N. del T.: Betriebstagung significa congreso o reunión de empresas) en Aachen, Richard Stallman acabó su charla con una sesión BoF (N. del T.: Birds of a Feather es un tipo de discusión donde participan unos pocos individuos que tratan de un tema bastante específico) en la que pidió a los hackers europeos que empezaran a implementar programas con clave pública. Las leyes de tráfico de armas en los EEUU prohibían que el proyecto GNU escribiera ese software en su país e incluso en el extranjero. Por tanto dijo a los hackers europeos que estaban en una posición única para ayudar a GNU con programas criptográficos.

Cansado de escribir software para convertir SGML y sin un proyecto actual divertido, pronto me vi hackeando el código de PGP-2 basándome en la descripción del RFC-1991 y en el fichero pgpformat.txt. Como resultó ser fácil, continué y llegué a tener un código que descifraba y creaba datos PGP-2. Después de decir a los jefazos de GNU que me ocuparía de la implementación del sustituto de PGP pasé el resto del año reemplazando IDEA con Blowfish, RSA con Elgamal, implementando el cifrado de flujo, añadiendo algo de gestión de claves y dando una forma razonable al código.

Existía entonces un plan para una versión libre de Secure Shell (SSH) llamada PSST (más tarde conocida como LSH) con una lista de correo algo concurrida mantenida por Martin Hamilton. Martin tuvo la amabilidad de crear una lista de correo para g10 también y anunciarla en su lista. De esta forma conseguimos los primeros suscriptores. Finalmente hice el primer tar, subiéndolo a ftp.guug.de, el servidor de FTP del Grupo de Usuarios de Unix Alemanes y escribí un anuncio.

Justo al siguiente día Peter Gutmann ofreció permitir el uso de su código para generar números aleatorios en sistemas sin /dev/random. Esto finalmente ayudó un montón a hacer GnuPG transportable a muchas plataformas. Los siguientes dos meses se actualizó muchas veces el código y tuvo lugar una larga discusión sobre el nombre; finalmente acordamos la sugerencia de GnuPG que se debe a Anand Kumria e hicimos la primera publicación bajo ese nombre (gnupg-0.2.8) el 24 de febrero. Sólo unos pocos días después se publicó una versión experimental que funcionaba con Windows (también arreglaba un problema de alineamiento en máquinas Alpha que se detectó gracias a que los ficheros de log del núcleo llenaban el disco duro y un administrador preguntó si realmente necesitaba hacerse una copia de seguridad de aquello ;-))

En julio de 1998 se publicó la primera versión que seguía más o menos el borrador de OpenPGP. Matthew Skala contribuyó con código muy limpio para Twofish escrito desde cero (Twofish era en aquel momento un candidato prometedor al AES y sugerido por Schneier como sustituto de Blowfish; sin embargo teníamos algunas dudas sobre el copyright del código de referencia). Michael Roth contribuyó más tarde, ese mismo año, con una implementación de Triple-DES y completó así el conjunto de algoritmos OpenPGP requeridos. Durante el siguiente año los problemas de costumbre se resolvieron, se discutieron características, se tomó nota de las quejas y se añadió el soporte para gpg en varios programas por sus autores respectivos.

Finalmente el 7 de septiembre de 1999 el código en uso se publicó como versión 1.0.0 con la gran mejora de incluir el Manual de GNU Privacy de Mike Ashley. Un año más tarde la patente de RSA iba a expirar el 20 de septiembre; el poseedor de la patente la cedió al dominio público 3 semanas antes y así pudimos lanzar 1.0.3 con soporte para RSA el 18 de septiembre. Uno de los mayores obstáculos para el uso generalizado de la criptografía de clave pública había desaparecido (demasiado tarde por supuesto).

También en 1999 el gobierno alemán decidió que la criptografía fuerte no estaría regulada de ninguna manera y que su uso se recomendaría a todo el mundo. Para apoyar públicamente esta declaración, el Ministerio de Economía financió el paso de GnuPG y programas relacionados a Microsoft Windows. Al gobierno de EEUU no le gustó mucho e intentó urgir al gobierno alemán a que revisase la decisión de permitir la distribución no regulada de programas criptográficos. No resultó y al final EEUU no tuvo más remedio que relajar sus propias reglas sobre exportación.

Aunque aún se desarrolla GnuPG en servidores localizados en Europa, los nuevos controles sobre exportación permitieron finalmente a los hackers estadounidenses contribuir al desarrollo de GnuPG. En 2001 David Shaw se unió al proyecto y es desde entonces uno de los hackers de GnuPG más activos y el co-mantenedor.

Ha pasado mucho tiempo desde que GnuPG podía ser manejado como un proyecto divertido y por tanto paso la mayoría de mi vida profesional manteniendo y extendiendo GnuPG. En 2001 fundé g10 Code, una compañía de Código Libre para el desarrollo y soporte de GnuPG y software relacionado. El proyecto más conocido es posiblemente GnuPG-2 que empezó con el nombre de NewPG como parte del más amplio proyecto Aegypten. El objetivo principal de Aegypten era proporcionar soporte para S/MIME en GNU/Linux e integrarlo limpiamente con otros clientes de correo, principalmente KMail. Aunque se ha usado activamente desde 2004, publicamos 2.0.0 sólo hace un año.

No fue tan divertido escribir programas X.509/CMS (comúnmente llamado S/MIME) comparado con el elegante y muy “comunicativo” protocolo OpenPGP. Habiendo dominado eso conseguimos a la vez un programa que es realmente útil y funciona bien con casi cualquier otra implementación de S/MIME. Resultó también que eramos capaces de trasladar GnuPG-2 a Windows - a pesar de mi afirmación original de que se necesitaría una plataforma POSIX moderna para GnuPG-2. Este desarrollo también mostró que es viable escribir software libre como negocio.

Con las nuevas herramientas y desde una perspectiva de usuario, S/MIME y OpenPGP pronto no se diferenciarán más. Sin embargo tuve que sonreír cuando hoy leí un informe sobre el último congreso RSA europeo donde una encuesta rápida durante una charla mostró que OpenPGP es el protocolo de cifrado más ampliamente utilizado.

Recuerda que GnuPG es sólo una herramienta; hay muchas otras herramientas para resolver problemas relacionados con la privacidad. ¡Gloria a todos los que trabajaron escribiendo y distribuyeron herramientas para la privacidad durante todos estos años!

Feliz hacking.

Trackback URI | Comments RSS

Leave a Reply