Experiencias con PGP en Unix
Este documento no ha sido actualizado desde 1996.
Consulte
esta página para acceder a información más actualizada.
Introducción
Este documento ha sido elaborado dentro del Grupo de Trabajo sobre PGP y explica la experiencia que ha tenido el autor con la instalación, uso, problemas etc. de PGP.
- Software: cómo y dónde.
- Compilación.
- Instalación
- Uso: primeros pasos.
- Firma digital.
- Cifrado.
- Ambas cosas.
- Interpretando un mensaje PGP.
- Recibiendo nuevas claves.
- Verificando una firma en dos partes.
- Descifrando un fichero.
- Gestión de claves.
- Revocación de claves.
Software: cómo y dónde.
RedIRIS mantiene un mirror de software relacionado con PGP en su servidor de FTP anónimo. La dirección es: Software PGP para máquinas UNIX
La última versión internacional de PGP para UNIX es la 2.6.3i, desarrollada por Stäle Schumacher a partir de su propia versión 2.6.2i que está basada a su vez en la versión 2.6.2 del MIT. No existe una versión 2.6.3 del MIT; la versión internacional puede ser compilada con RSAREF generando una versión 'americana' llamada 2.6.3, lo que tal vez puede conducir a equívocos.
Compilación.
Las pruebas han sido realizadas en estaciones Sun con arquitectura sun4 (sparc), sistemas operativos Solaris 2.4 y 2.5 y compiladores SparcWorks (oficial de Sun) y gcc. En todas ellas la compilación transcurre sin problemas. Nos gustaría saber de vuestras experiencias con otros entornos para incorporarlas a este documento.
- Extraer el contenido del archivo tar. Dentro hay dos ficheros: otro tar y la firma PGP del mismo, con lo cual podéis (si ya tenéis PGP) verificar la integridad de la distribución. Si no tenéis aún PGP, siempre podéis hacerlo a posteriori.
- Al extraer este segundo tar, tened en cuenta que os volcará toda la distribución en el directorio actual, es decir, no cuelga todo de un mismo directorio de trabajo por lo que tal vez prefiráis crearlo vosotros.
- La generación ocurre dentro del subdirectorio src. No hay en principio
necesidad de editar el makefile ni de ejecutar un script de configuración.
Un 'make' a secas nos muestra todos los sistemas previstos. Por ejemplo,
en nuestro caso es una Sparc1000 con Solaris y dos compiladores de C,
el oficial (acc) y el de GNU (gcc). Por tanto, de las alternativas que
se nos muestran hay dos válidas a priori:
sun4sunos5acc sun4sunos5gcc
make sun4sunos5gcc
Instalación.
El makefile incluido con la distribución no incluye una opción 'install'. La instalación en sí es muy sencilla, consta de lo siguiente:- el binario (pgp): en src - el manual (pgp.1): en doc - el resto.PGP necesita una serie de ficheros accesibles a nivel de host (config.txt, *.hlp, doc/*, etc). Esperará encontrarlos en /usr/local/lib/pgp entre otros sitios, aunque podemos ponerlos donde queramos y definir la variable PGPPATH que apunte a ellos. Por coherencia decidimos usar /usr/local, luego la instalación se reduce a lo siguiente (aprovechamos para cambiar un par de parámetros de la configuración: idioma por defecto y aplicación de codificación ASCII para los binarios).
mkdir -p /usr/local/bin mkdir -p /usr/local/man/man1 mkdir -p /usr/local/lib/pgp mv src/pgp /usr/local/bin mv doc/pgp.1 /usr/local/man/man1 mkdir /usr/local/lib/pgp sed 's/= en/= es/;s/# Armor/Armor/' config.txt >/usr/local/lib/pgp/config.txt mv * doc/* /usr/local/lib/pgpPGP se negará a funcionar si no encuentra los documentos originales. Existe un directorio contrib, tal vez os interese algo de lo que hay allí. Por otro lado, no está de más comprobar que todos los archivos se han creado con el propietario/grupo/permisos adecuados (depende del umask de root, y de su grupo primario, por ejemplo).
Uso: Primeros pasos.
Si un determinado usuario no tiene una variable PGPPATH en su entorno, PGP asume que los ficheros PGP de ese usuario (claves, etc) estarán en el directorio ~/.pgp (por convención casi todos los shells interpretan ~ como $HOME). PGP NO crea este directorio, así que antes de usarlo por primera vez deberemos crearlo a mano. En cualquier caso, el directorio .pgp o equivalente deberá tener permisos drwx------. Los ficheros creados en él serán los 'llaveros' de claves públicas (pubring.pgp) y de claves privadas (secring.pgp), y además es posible tener una copia local de config.txt cuyas definiciones tendrán prioridad sobre la global. Convenciones a seguir:- Comandos Unix: $ comando - Texto de salida de PGP Texto - Respuesta a preguntas de PGP [ respuesta ]
Lo primero que hay que hacer es crear una pareja de claves:
$ pgp -kg Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/14 15:47 GMT Elija un tamaño de clave RSA: 1) 512 bits- Nivel comercial bajo, rápido pero menos seguro 2) 768 bits- Nivel comercial alto, velocidad media con buena seguridad 3) 1024 bits- Nivel "militar", lento con alta seguridad Escoge 1, 2, 3, o el número requerido de bits:
Escoge 1, 2, 3, o el número requerido de bits: [3] Generando una clave RSA con módulo de 1024 bits. Necesitas un identificador para tu clave pública. El formato preferido consiste en tu nombre, seguido de tu dirección de correo electrónico, si tienes, entre <ángulos>. Por ejemplo: Nadie <nadie@limbo.org> Introduce un identificador de usuario para tu clave pública:
Introduce un identificador de usuario para tu clave pública: [Ruben Martinez <ruben@rediris.es>] Necesitas una contraseña para proteger tu clave secreta RSA.
Introduce la contraseña:La contraseña será utilizada en cualquier operación de acceso a la clave privada (por ejemplo: para descifrar un fichero dirigido a nosotros, o para firmar un documento). Esta contraseña no se verá mientras se teclea.
Introduce la contraseña: [no esperaras que te ponga la contraseña real] Escríbela otra vez: [no esperaras que te ponga la contraseña real] Ten en cuenta que la generación de claves es un proceso lento. Necesitamos generar 882 bits aleatorios. Se hace midiendo los intervalos de tiempo entre pulsaciones de tecla. Escribe texto al azar en el teclado hasta que oigas un pitido: 882
0 * -Es suficiente. ........**** ............................................**** La contraseña es correcta. Un momento.... Se ha añadido el certificado de firma. Finalizada la generación de claves.
$ pgp -kv ruben Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/14 15:59 GMT Anillo de claves: '/home/users/ruben/.pgp/pubring.pgp', buscando el usuario "ruben" Tipo Bits/Clave Fecha Identificador pub 1024/146DE28D 1995/07/31 Ruben Martinez <ruben@rediris.es> Se ha encontrado 1 clave.
$ ppg -ke ruben Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/14 16:01 GMT Se necesita el identificador de usuario para elegir la clave que quieras modificar. Introduce el identificador: [Ruben] Modificación del identificador "Ruben" en el anillo: '/home/users/ruben/.pgp/pubring.pgp'. Clave del usuario: Ruben Martinez <ruben@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el También conocido como: Ruben Martinez <ruben.martinez@rediris.es> Se necesita la contraseña para abrir la clave secreta RSA. Clave del usuario: Ruben Martinez <ruben.martinez@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el Introduce la contraseña: La contraseña es correcta. Identificador actual de usuario: Ruben Martinez <ruben@rediris.es> ¿Quieres añadir un nuevo identificador de usuario (s/N)? [n] ¿Quieres cambiar la contraseña (s/N)? [n] (No se efectuará ningún cambio.)
$ pgp -kxa ruben Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/14 16:11 GMT Extrayendo del anillo de claves: '/home/users/ruben/.pgp/pubring.pgp', identificador "ruben". Clave del usuario: Ruben Martinez <ruben@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el También conocido como: Ruben Martinez <ruben.martinez@rediris.es> ¿En qué fichero se extrae la clave anterior? [ruben.asc]
Firma digital.
Como ya se ha explicado en otro documento, la firma digital garantiza dos cosas: identidad del remitente e integridad del fichero firmado.$ pgp -s fichero Añade una firma digital usando mi clave privada por defecto (si tengo más de una identidad, puedo especificar una: pgp -s-u ). Todos aquellos que tengan mi clave pública podrán verificarla. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/14 16:15 GMT Se necesita una clave secreta para generar la firma. Se necesita la contraseña para abrir la clave secreta RSA. Clave del usuario: Ruben Martinez <ruben@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el Introduce la contraseña: La contraseña es correcta. Un momento.... Fichero normal con firma: fichero.asc
Cifrado.
Para cifrar un fichero especificamos el usuario o usuarios destino. La cifrado se realizará usando sus claves públicas (que deberemos tener obviamente), y sólo ellos podrán descifrarlo ya que sólo ellos tienen sus respectivas claves privadas.$ pgp -e fichero Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/14 16:19 GMT Se utilizan las claves públicas de los destinatarios para cifrar. Se necesita un identificador para encontrar la clave pública del destinatario. Introduzca el identificador del destinatario: [simpson] Clave del usuario: William Allen SimpsonClave de 1024 bits, con identificador 3022C951, creada el También conocido como: William Allen Simpson . Fichero con armadura: fichero.asc
Ambas cosas.
Si queremos cifrado+garantía de integridad+autentificación de origen, podemos combinar ambas operaciones. $ pgp -es ficheroInterpretando un mensaje PGP.
Todo eso está muy bien, pero qué hago si me mandan claves públicas, o un fichero firmado, o cifrado, o de todo a la vez? La respuesta es la misma. Para interpretar un mensaje PGP ejecutamos:$ pgp ficheroY ya está. PGP analizará el mensaje, y puede pasar cualquiera, o varias, o ninguna de las siguientes cosas:
- Encuentra firma digital.
- Encuentra mensaje cifrado.
- Encuentra clave.
Recibiendo nuevas claves.
Cuando PGP encuentra una o más claves públicas en un fichero, intenta verificarlas y nos da la posibilidad de añadirlas a nuestro propia colección de claves. El procedimiento es más o menos como sigue:
- Si ya tenemos una clave determinada, se mira si incluye información adicional (por ejemplo, más certificados), y de ser así, se actualiza nuestra versión.
- Si no, se nos pregunta si queremos añadir esa clave. Supongamos que sí.
- La clave está avalada por al menos una persona a la que hayamos concedido el máximo nivel de credibilidad, es aceptada inmediatamente. Es posible hacer que sean necesarios más de uno de estos avales modificando el parámetro "Completes_Needed" de config.txt.
- Si la clave está avalada por al menos X personas a las que hayamos concedido el segundo nivel de credibilidad es aceptada inmediatamente. Por defecto X=2, y es el parámetro "Marginals_Needed" de config.txt.
- Si no, se nos pregunta si queremos avalarla nosotros mismos. Para ello deberemos tener la COMPLETA SEGURIDAD de que la clave es auténtica. No puedo hacer bastante hincapié sobre este punto. Si queremos que PGP tenga alguna utilidad, no podemos romper la red de confianza certificando claves que 'suponemos que serán buenas, por qué no iban a serlo'. Para verificar una clave, hay varios métodos. Uno de ellos es extraer su 'huella dactilar' (16 números hexadecimales) y verificarlos por un canal independiente y seguro (por ejemplo, por teléfono).
- Si certificamos una clave, estamos declarando que es de quien dice ser. Pero esto no dice nada acerca de la fiabilidad de dicho usuario a la hora de avalar nuevas claves. Por ejemplo, yo puedo estar completamente seguro de que una determinada clave A es de Pepe Usuario, pero Pepe Usuario puede a) ser un completo desastre con la gestión de claves b) ser una persona poco de fiar, por lo que no me fiaría de otra clave B que viniera avalada por él. Por eso, cuando certificamos una clave, PGP nos pregunta si nos fiaríamos de su dueño como aval para nuevas claves. Las respuestas posibles son: no sé, no, generalmente, siempre. Si contesto que me fiaré SIEMPRE de Pepe, las claves avaladas por él serán aceptadas sin más. Si contesto que me fiaré GENERALMENTE de Pepe, y he configurado el umbral de certificaciones marginales ("Marginals_Needed") como 3, se necesitarán al menos otros dos avales del mismo nivel, además del de Pepe, para que la clave sea dada por buena.
$ pgp file Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/19 16:28 GMT El fichero contiene claves. Se muestran a continuación ... Anillo de claves: 'file.$00', Tipo Bits/Clave Fecha Identificador pub 1024/12345678 1996/01/01 Pepito Grillo <insect@somewhere.net> Se ha encontrado una clave. ¿Quieres añadir este fichero de claves al anillo '/home/users/ruben/.pgp/pubring.pgp' (s/N)? [s]
Buscando nuevas claves... pub 1024/12345678 1996/01/01 Pepito Grillo <insect@somewhere.net> Comprobando las firmas... El fichero de claves contiene: 1 nueva(s) clave(s) Una o más de las nuevas claves no están completamente certificadas. ¿Quieres certificar alguna de ellas tú mismo (s/N)?
¿Quieres certificar alguna de ellas tú mismo (s/N)? [s] Clave del usuario: Pepito Grillo <insect@somewhere.net> Clave de 1024 bits, con identificador 12345678, creada el Huella dactilar = 9D 77 C1 C6 E7 5D 37 C7 3C F7 24 3F 60 81 61 7E Esta asociación clave/usuario no está certificada. ¿Quieres certificar esta clave tú mismo (s/N)?
¿Quieres certificar esta clave tú mismo (s/N)? [s] Buscando la clave del usuario 'Pepito Grillo <insect@somewhere.net>': Clave del usuario: Pepito Grillo <insect@somewhere.net> Clave de 1024 bits, con identificador 12345678, creada el Huella dactilar = 9D 77 C1 C6 E7 5D 37 C7 3C F7 24 3F 60 81 61 7E LEE ATENTAMENTE: Según tu conocimiento directo, ¿estás absolutamente seguro de poder certificar solemnemente que la clave pública pertenece realmente al usuario especificado por este identificador (s/N)? [s]
Se necesita la contraseña para abrir la clave secreta RSA. Clave del usuario: Ruben Martinez <ruben@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el Introduce la contraseña: La contraseña es correcta. Un momento.... Se ha añadido el certificado de firma.
Decide tú mismo si esta clave realmente pertenece, según la evidencia a tu alcance, a la persona que crees. Si es así, contesta a la siguiente pregunta, basándote en tu estimación de la integridad de esa persona y de su conocimiento sobre gestión de claves:
¿Confiarías en "Pepito Grillo <insect@somewhere.net>" como referencia y para certificar ante ti otras claves públicas? (1=No sé. 2=No. 3=Normalmente. 4=Sí, siempre.) ? [1]
- interpretar un fichero:
pgp 'fichero'
- certificar una clave. Ocurre automáticamente como parte
del proceso anterior. También podemos hacerlo aparte:
pgp -ks 'fichero'
- asignar nivel de confianza a una clave. Ocurre automáticamente
como parte del proceso anterior. También podemos hacerlo aparte:
pgp -ke 'fichero'
Verificando una firma.
Como de costumbre, pgp <fichero>. Pueden pasar tres cosas:- Clave pública del firmante desconocida: no se puede verificar.
- Firma incorrecta de <id>: es una firma auténtica del usuario <id>, pero no concuerda con el contenido del documento (no se garantiza que dicho documento no haya sido modificado).
- Firma correcta de <id>: es una firma auténtica del usuario <id>, y además concuerda con el contenido del fichero, que no ha sido modificado de ninguna forma después de hecha la firma.
$ pgp 'fichero' El fichero tiene firma. Se necesita la clave pública para comprobarla. Firma correcta de "Dixie <flatline@matrix.net>". Firma realizada el 1996/02/16 12:21 GMT con una clave de 1024 bits, identificador 87654321
AVISO: Esta clave pública no está certificada con una firma de confianza, por lo que no se sabe con seguridad si realmente pertenece a: "Dixie <flatline@matrix.net>". Ya has permitido antes que se utilice esta clave pública.
Nombre del fichero normal: fichero El fichero de salida 'fichero' ya existe. ¿Sobrescribir (s/N)? [s]
Verificando una firma en dos partes.
En algunos casos la firma no está en el mismo fichero. Por ejemplo, no es raro encontrarse en los servidores de FTP con <fichero>.tar.gz y lt;fichero>.tar.gz.sig (por ejemplo). Eso quiere decir que ...sig es una firma digital del otro fichero. Para verificarla, daremos a PGP el fichero que contiene la firma, no el que contiene los datos (que podrá llamarse igual sin el .sig, o se nos preguntará su nombre):$ pgp <fichero>.tar.gz.sigPor lo demás, todo es igual.
Descifrando un fichero.
De nuevo el procedimiento es el mismo:$ pgp <fichero> Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/19 16:49 GMT El fichero está cifrado. Para leerlo se necesita la clave secreta. Clave del usuario: Ruben Martinez <ruben.martinez@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el También conocido como: Ruben Martinez <ruben@rediris.es> Se necesita la contraseña para abrir la clave secreta RSA. Introduce la contraseña: La contraseña es correcta. Un momento...... Nombre del fichero normal: fichero El fichero de salida 'fichero' ya existe. ¿Sobrescribir (s/N)? [s]
Gestión de claves.
Hemos visto cómo añadir nuevas claves públicas. Podemos también eliminarlas (pgp -kr- ¿Por qué no compartir los ficheros de claves? ¡No! Cada clave en tu pubring.pgp lleva implícita tu estimación de su credibilidad. Eso es una valoración subjetiva, y por lo tanto personal e intransferible.
- ¿Por qué no compartir sólo las claves, dejando a los usuarios que se hagan copias locales con su propia estimación de credibilidad y sólo de aquellas que necesiten?. Eso está mejor. Puesto que las claves públicas son públicas, cualquier medio público de distribución es válido. Cada usuario podrá usar sólo las claves que tenga en su pubring.pgp, pero habrá un 'servidor' del que pueda obtener claves nuevas cuando sea necesario.
- ¿Qué tipos de mecanismos de distribución de claves hay?
Bajo demanda:
- Email directo.
- El grupo de News alt.pgp.keydist
- Interfaz email.
- Interfaz ftp.
- Interfaz WWW.
- Asimilación de un protocolo distribuido similar a DNS (proyectado para PGP 3.0 o posterior).
- Directorio X.500
(la recomendación X.509 ya contempla tal servicio, para PEM.
La integración de PGP no es difícil, pero tampoco trivial)
.
- Las CA estarían organizadas jerárquicamente. La certificación es top-down (de la raíz del árbol a las hojas).
- Se confía en la integridad del sistema de certificación, lo que permite cierta relajación a la hora de verificar el contenido de las mismas claves (dicho de otra forma: una clave será sometida a un control estricto antes de ser aceptada por el sistema, pero una vez aceptada, el simple hecho de que el sistema te la ofrezca será garantía de fiabilidad).
- Inconveniente: el mismo. El usuario no necesita hacer una verificación formal, ya que tiene la garantía del sistema. Por lo tanto, no la hará, y estará indefenso si la seguridad del sistema es comprometida.
- El modelo de PEM sobre X.500 sigue este esquema.
- Los servidores no están organizados jerárquicamente (no quiere decir que no puedan estarlo, pero no es un requisito). La certificación va incluida en las claves, por los mismos usuarios, por lo que es bottom-up (de las hojas a la raíz).
- El sistema de distribución no garantiza nada. Los usuarios añaden sus propias certificaciones a las claves, que pueden ser creídas o no por otros usuarios. Esto es más flexible, y permite relajar la seguridad en cuanto al propio servidor de claves.
- Inconveniente: el mismo. El usuario debe tomarse el trabajo extra de verificar y/o certificar las claves que recibe.
- La mayor parte de los servidores de claves para PGP funcionan de esta manera.
Revocación de claves.
En algunos casos puede ser necesario dar de baja una clave. Los motivos pueden variar, por ejemplo: supongamos que alguien ha tenido acceso a nuestra clave secreta. Pero se plantean dos problemas:- Mucha gente puede tener ya nuestra clave antigua. Por no mencionar servidores de claves. Habría que notificar el cambio a todos ellos.
- Además, hay que notificarlo de manera que sólo yo pueda dar de baja mi clave (o bien ese usuario que ha tenido acceso a la clave privada, pero eso nos da igual... si es eso lo que ha ocurrido, nos ahorra trabajo dándola de baja él mismo :)
$ pgp -kd ruben Pretty Good Privacy(tm) 2.6.3i - Criptografía de clave pública para todos. (c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 Versión internacional - no apta para los EE.UU. No utiliza RSAREF. Hora actual: 1996/02/19 13:39 GMT Clave del usuario: Ruben Martinez <ruben@rediris.es> Clave de 1024 bits, con identificador 146DE28D, creada el También conocido como: Ruben Martinez <ruben.martinez@rediris.es> ¿Quieres revocar permanentemente tu clave pública emitiendo un certificado de compromiso de clave secreta para "Ruben Martinez <ruben.martinez@rediris.es>" (s/N)? [s]
Se necesita la contraseña para abrir la clave secreta RSA. Clave del usuario: Ruben Martinez <ruben.martinez@rediris.es> Clave de 1024 bits, con identificador 14F428CD, creada el Introduce la contraseña: La contraseña es correcta. Un momento.... Creado el certificado de compromiso de clave.