Substituir PGP 2.x por GnuPG Copyright ? 1999 Kyle Hasselbacher ------------------------------------------------------------------------------- Este documento est basado en una gu a de compatibilidad PGP 2.x/GnuPG anterior, desarrollada por Kyle Hasselbacher (). La gu a fue reeditada y ampliada por Mike Ashley (). Michael Fischer v. Mollard () transform el c digo HTML a DocBook SGML, y tambi n a adi algunos datos. Algunos de los temas aqu tratados tienen su origen en las listas de correo de gnupg-devel y gnupg-user. La soluci n dada al problema de firmar y cifrar a un tiempo con una clave RSA fue tomada del gui n de compatibilidad de Gero Treuner. Para cualquier duda, error, o sugerencia sobre este manual, dir jase al mantenedor de este documento, Mike Ashley (). Para cualquier duda, correcci n, o sugerencia sobre la versi n en castellano, dir jase al traductor, Horacio (). Este manual puede ser redistribuido de acuerdo con los t rminos de la GNU General Public License; se puede encontrar una traducci n de esta licencia al castellano en: Licencia P blica GNU ------------------------------------------------------------------------------- Introducci n Este documento describe c mo comunicarse con otras personas que todav a est n usando viejas versiones de PGP 2.x. GnuPG puede usarse como un substituto completo de PGP 2.x. Con GnuPG es posible cifrar y descifrar mensajes PGP 2.x, importando primero las claves viejas, pero no se pueden generar claves de PGP 2.x. En este documento se demuestra c mo ampliar la distribuci n normal de GnuPG para que funcione con claves PGP 2.x, y muestra qu opciones deben ser usadas para asegurar la interoperabilidad con los usuarios de PGP 2.x. Tambi n se avisa de anomal as en la interoperabilidad entre PGP 2.x y GnuPG. Nota: El uso de los m dulos de extensi n idea.c y rsa.c sin las correspondientes licencias de estos algoritmos puede ser ilegal. En este documento no se recomienda que se usen dichos m dulos. Si Vd. dispone de claves PGP 2.x, el autor sugiere que las revoque en favor de otras nuevas y que anime a las personas con las que mantenga correspondencia y que contin en usando claves PGP 2.x, a que hagan lo mismo. ------------------------------------------------------------------------------- Ampliar GnuPG para su funcionamiento con claves PGP 2.x La distribuci n normal de GnuPG no funciona con claves PGP 2.x debido a que PGP 2.x hace uso de IDEA como algoritmo de cifrado sim trico, y de RSA como algoritmo de clave p blica. Estos dos algoritmos est n patentados[1]y s lo pueden ser usados bajo ciertas condiciones restrictivas. La pol tica de GNU es la de no hacer uso de algoritmos patentados, dado que stas son una contradicci n con el esp ritu del "software" libre. La utilizaci n de estos algoritmos representa una barrera para el uso libre de GnuPG. El uso de RSA e IDEA sin una licencia sobre stos puede ser o no legal dependiendo de varias cuestiones. RSA s lo est patentado en los Estados Unidos, por lo tanto s que es l cito desarrollar versiones de RSA fuera de los EE.UU. El m dulo de extensi n de RSA para GnuPG es una de estas versiones, y en consecuencia s que puede ser usado legalmente fuera de los Estados Unidos, aunque ser a ilegal si lo usara dentro de este pa s. En los Estados Unidos existe una implementaci n de referencia para RSA, llamada RSAREF, y que se encuentra disponible por ftp en funet.fi, o en debian.org, y que puede usarse legalmente en los EE.UU. sin cargo alguno para el uso con fines no lucrativos. Debido a leyes que restringen la exportaci n de este c digo de los EE.UU., no puede ser distribuido fuera de este pa s, y por tanto existen dos modos de integrar RSA en GnuPG: uno para los EE.UU. y Canad , y otro para el resto del mundo. La situaci n de IDEA es m s simple. IDEA est patentado en Europa y en los EE.UU., y queda pendiente una patente para Jap n. El propietario de la patente, Ascom, concede una licencia con fines no lucrativos gratuita, pero la definici n de fines no lucrativos es bastante estricta. Si desea utilizar IDEA para fines comerciales necesita adquirir una licencia. Para poder usar los m dulos de extensi n primero hay que obtener el c digo fuente de stos, idea.c y rsa.c, o rsaref.c, del directorio de cotribuci n de c digo a GnuPG. Una vez se tenga el c digo, ste debe ser compilado. Si se usa gcc, la compilaci n ser como sigue: alice% gcc -Wall -O2 -shared -fPIC -o idea idea.c [...] alice% gcc -Wall -O2 -shared -fPIC -o rsa rsa.c [...] # alice% gcc -Wall -O2 -shared -fPIC -o rsa rsaref.c /usr/lib/rsaref.a El ltimo argumento /usr/lib/rsaref.a se debe substituir con el camino real de la biblioteca RSAREF en el sistema. Una vez compilado, GnuPG debe recibir las instrucciones para cargarlos. Esto se puede hacer usando la opci n load-extension, bien desde la l nea de rdenes, o bien desde el fichero de opciones, aunque por regla general se har desde el fichero de opciones. Por ejemplo, si se ha puesto los binarios compilados idea y rsa en el directorio ~/.gnupg, en el fichero de opciones se debe a adir load-extension ~/.gnupg/idea load-extension ~/.gnupg/rsa Si no se especifica un camino de modo expl cito, GnuPG busca los m dulos de extensi n en el directorio de m dulos de GnuPG por definici n, el cual es /usr/ local/lib/gnupg. Si se ha compilado GnuPG con prefijo distinto para el directorio de instalaci n, usando --prefix PREFIX durante la configuraci n del c digo fuente de GnuPG, entonces el directorio de m dulos ser PREFIX/lib/ gnupg. En tal caso, copiar los dos ficheros `rsa' e `idea' en el directorio de m dulos descrito arriba. Aseg rese de que estos ficheros tienen los permisos correctos. No es necesario hacer los ficheros ejecutables, ya que estos ficheros no son programas sino m dulos compartidos, y por tanto deben tener permiso de lectura para todos. ------------------------------------------------------------------------------- Importar claves PGP 2.x Una vez que las extensiones han sido cargadas, el importar un par de claves de PGP 2.x es una tarea f cil usando la opci n import. Aun as se debe tener cuidado con un par de detalles. * No se debe exportar una clave privada desde PGP 2.x en forma de fichero en armadura ASCII. Ya que PGP 2.x es anterior a la especificaci n OpenPGP, la cabecera del mensaje en armadura que usa PGP 2.x no es conforme con OpenPGP. Debido a que la exportaci n de una clave privada es un caso poco com n, GnuPG no comprueba que el fichero en armadura ASCII sea una clave privada. * GnuPG presupone que las claves p blicas importadas van autofirmadas por sus correspondientes claves p blicas. Esta es una precauci n bastante prudente, y tanto GnuPG como las nuevas versiones de PGP autofirman las claves p blicas durante el proceso de su generaci n. Sin embargo, PGP 2.x no lo hace. Para solventarlo, se puede autofirmar la clave p blica antes de exportarla desde PGP 2.x. De modo alternativo, se puede usar la opci n allow-non-selfsigned-uid para forzar a GnuPG a aceptar la clave. Se recomienda que la clave sea autofirmada antes de ser exportada, o incluso despu s de haber sido importada usando la opci n anterior, ya que el uso de una clave no autofirmada es un riesgo para la seguridad. alice% pgp -kx alice public.pgp Pretty Good Privacy(tm) 2.6.2 - Public-key encryption for the masses. [...] Extracting from key ring: '/u/alice/.pgp/pubring.pgp', userid "alice". Key for user ID: Alice 1024-bit key, Key ID 24E2C409, created 1999/09/18 Key extracted to file 'public.pgp'. alice% pgp -kx alice private.pgp .pgp/secring.pgp Pretty Good Privacy(tm) 2.6.2 - Public-key encryption for the masses. [...] Extracting from key ring: '.pgp/secring.pgp', userid "alice". Key for user ID: Alice 1024-bit key, Key ID 24E2C409, created 1999/09/18 Key extracted to file 'private.pgp'. alice% gpg --import public.pgp gpg: key 24E2C409: public key imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) alice%gpg --import private.pgp gpg: key 24E2C409: secret key imported gpg: Total number processed: 1 gpg: secret keys read: 1 gpg: secret keys imported: 1 ------------------------------------------------------------------------------- Usar claves PGP 2.x Una clave p blica importada se puede usar para cifrar documentos para un usuario de PGP 2.x y para verificar firmas que hayan sido generadas con una clave privada PGP 2.x Es importante comprender que no es posible usar una nueva clave OpenPGP para comunicarse con un usuario PGP 2.x, por tanto es necesario importar una clave vieja PGP 2.x para esta tarea. ------------------------------------------------------------------------------- Cifrar un documento para un usuario de PGP 2.x Para cifrar un documento se usan varias opciones en la l nea de rdenes, y el documento que se va a cifrar debe ser especificado como un fichero. alice% gpg --rfc1991 --cipher-algo idea --compress-algo 1 --encrypt --recipient alice secret gpg: RSA keys are deprecated; please consider creating a new key and use this key in the future gpg: this cipher algorithm is depreciated; please use a more standard one! Cada una de las opciones en la l nea de rdenes son necesarias. * La opci n rfc1991 se usa para forzar GnuPG a que sea m s conforme con RFC 1991, que es la antigua especificaci n PGP implementada en PGP 2.x. Si se omite esta opci n, la salida de GnuPG estar malformada e inutilizable por PGP 2.x. * La opci n cipher-algo especifica el algoritmo de cifrado sim trico con el que el documento ser cifrado. En el caso especial de cifrar un documento para una clave p blica de PGP 2.x, el algoritmo de cifrado que se especifique debe ser IDEA. Si se omitiera esta opci n, el documento se cifrar generalmente con 3DES, un algoritmo que no est implementado en PGP 2.x. * El algoritmo de compresi n indica c mo se formar el resto de la orden. La opci n compress-algo especifica a GnuPG que debe usar el viejo algoritmo de compresi n zlib, que es el usado por PGP 2.x. A pesar de esto, GnuPG usa cabeceras de longitud parcial cuando cifra una cadena de tama o desconocido, y esto no est implementado en PGP 2.x. El documento que se vaya a cifrar debe estar por lo tanto, en un fichero de modo que GnuPG sepa el tama o total del documento a cifrar antes de comenzar. Por consiguiente, no es posible usar tuber as al utilizar claves PGP 2.x. ------------------------------------------------------------------------------- Firmar un documento para un usuario de PGP 2.x Firmar un documento con una clave vieja no es diferente a hacerlo con una clave nueva. alice% gpg --local-user 0x24E2C409 --sign document You need a passphrase to unlock the secret key for user: "Alice " 1024-bit RSA key, ID 24E2C409, created 1999-09-18 gpg: RSA keys are deprecated; please consider creating a new key and use this key in the future En este ejemplo, la opci n local-user se usa para especificar qu clave privada se utilizar para firmar. El fichero de salida es de la forma document.gpg. Si la firma va a ser verificada usando PGP 2.x, se debe renombrar a un nombre de fichero con la extensi n .pgp. ------------------------------------------------------------------------------- Firmar y cifrar un documento para un usuario de PGP 2.x GnuPG no posee una implementaci n nativa para firmar un documento con una clave RSA y al mismo tiempo cifrarlo con una clave RSA. Sin embargo es posible usar una soluci n que requiere que se lleven a cabo unos cuantos pasos anteriormente. El proceso implica la creaci n de una firma acompa ante y a continuaci n el uso de sta para crear un fichero cifrado que pueda ser descifrado y verificado usando PGP 2.x. Hay cuatro pasos. El primer paso genera una firma acompa ante. alice% gpg --detach-signature --recipient alice --local-user 0x24E2C409 document You need a passphrase to unlock the secret key for user: "Alice " 1024-bit RSA key, ID 24E2C409, created 1999-09-18 gpg: RSA keys are deprecated; please consider creating a new key and use this key in the future El segundo paso convierte el documento a un formato interno, literal, que va descifrado. alice% gpg --store -z 0 --output document.lit document El tercer paso combina la firma acompa ante con el documento literal. Es esto lo que PGP 2.x usa para verificar la firma despu s de descifrarlo. alice% cat Notes.sig Notes.lit | gpg --no-options --no-literal --store --compress-algo 1 --output document.z gpg: NOTE: --no-literal is not for normal use! El cuarto y ltimo paso implica el uso de GnuPG para descifrar el texto plano y la firma con el objeto de producir un documento firmado y cifrado que pueda ser descifrado y verificado por PGP 2.x. alice% gpg --rfc1991 --cipher-algo idea --no-literal --encrypt --recipient alice --output document.pgp document.z gpg: NOTE: --no-literal is not for normal use! gpg: RSA keys are deprecated; please consider creating a new key and use this key in the future gpg: this cipher algorithm is depreciated; please use a more standard one! El documento firmado y cifrado tambi n puede ir en armadura ASCII mediante el uso de las opciones de rigor. alice% gpg --rfc1991 --cipher-algo idea --no-literal --encrypt --recipient alice --output document.asc --armor document.z gpg: NOTE: --no-literal is not for normal use! gpg: RSA keys are deprecated; please consider creating a new key and use this key in the future gpg: this cipher algorithm is depreciated; please use a more standard one! ------------------------------------------------------------------------------- Descifrar un documento gpg Una clave privada importada se puede usar para descifrar documentos cifrados para esa clave, as como generar firmas mediante el uso de esa clave. Descifrar un mensaje no es, en este caso, m s dif cil que cuando se usa cualquier otra clave. alice% gpg secret.pgp You need a passphrase to unlock the secret key for user: "Alice " 1024-bit RSA key, ID 24E2C409, created 1999-09-18 gpg: NOTE: cipher algorithm 1 not found in preferences gpg: secret.pgp: unknown suffix Enter new filename [secret]: De nuevo, en este caso, se puede evitar el aviso de error renombrando el fichero de entrada con una extensi n .gpg. Si se ve un aviso de GnuPG del tipo ``cipher algorithm 1 not found in preferences'', se puede ignorar sin problemas. ------------------------------------------------------------------------------- Verificar una firma de PGP 2.x Verificar una firma usando generada con una clave PGP 2.x es sencillo. alice% gpg document.pgp gpg: document.pgp: unknown suffix Enter new filename [document]: File `document' exists. Overwrite (y/N)? y gpg: old style (PGP 2.x) signature gpg: Signature made Sat Sep 18 17:55:30 1999 EST using RSA key ID 24E2C409 gpg: Good signature from "Alice " El di logo para renombrar el fichero puede ser evitado si el documento que se quiere verificar ha sido renombrado con una extensi n .gpg antes de invocar gpg. ------------------------------------------------------------------------------- Trabajar con firmas sobre texto Desde la aparici n de la versi n 1.0 de GnuPG, existe un problema con el intercambio de documentos con firma sobre el texto entre GnuPG y todas las versiones de PGP. Parece ser que las dificultades se deben a desviaciones en la implementaci n de la especificaci n OpenPGP. Respecto a PGP 2.x, las firmas generadas por ste se pueden verificar usando GnuPG, y las firmas generadas con GnuPG se pueden verificar usando PGP 2.x. El documento resultante del proceso de verificaci n ser , en ambos casos, diferente del documento original. Estas diferencias se limitan a espacios en blanco, y por tanto no deber an afectar la legibilidad de los documentos firmados. En caso de que mantener la completa integridad del documento fuera de importancia, se recomienda evitar el uso de firmas sobre texto. En cualquier caso, se insiste una vez m s en la recomendaci n de usar y recomendar el uso, siempre que sea posible, de las nuevas claves OpenPGP generadas por GnuPG. Notas [1] La patente de RSA finaliza en Septiembre de 2000. La patente de IDEA finaliza en el a o 2011.