GPG Departamento de Sistemas Telemáticos y Computación (GSyC) http://gsyc.urjc.es Febrero de 2013 GSyC - 2013 GPG 1 c 2013 GSyC Algunos derechos reservados. Este trabajo se distribuye bajo la licencia Creative Commons Attribution Share-Alike 3.0 Incluye material original de M.Vidal, I.Herraiz http://gsyc.es/ mvidal/docs/gnupg.pdf GSyC - 2013 GPG 2 PGP, OpenPGP, GnuPG PGP ¿Qué es PGP? Pretty Good Privacy: primera implementación popular del cifrado de clave pública (RSA) Creado en solitario por Phil Zimmermann en 1991, un activista de los ciberderechos Lo puso a disposición de todo el mundo (código fuente incluido) y se hizo muy popular Zimmermann tuvo muchos problemas con la patente de RSA y fue investigado por presunta violación de las leyes de exportación de armas Su caso fue finalmente archivado en 1996 GSyC - 2013 GPG 3 PGP, OpenPGP, GnuPG OpenPGP OpenPGP Estándar abierto para PGP propuesto por Zimmermann. Aceptado por la IETF en 1998. RFC 4880 (noviembre 2007), sucesor del RFC 2440. Tiene muchas implementaciones, sobre todo para clientes de correo La implementación libre de OpenPGP se llama GnuPG (GNU Privacy Guard) o simplemente GPG (que es la herramienta con la que se encripta y firma) GSyC - 2013 GPG 4 PGP, OpenPGP, GnuPG GnuPG GnuPG GnuPG: Implementación libre (GPLv3) de OpenPGP. Promovido por la Free Software Foundation desde 1999. Fue apoyado por el Gobierno alemán en sus inicios (financiaron la documentación y el port a Windows). Se basa en interfaz de lı́nea de mandatos Existen versiones para los sistemas operativos más utilizados Linux: Instalamos el paquete gnupg Windows: gpg4win, cryptophane MacOS: http://gpgtools.org También hay diversos frontends gráficos. P.e. seahorse para gnome y Cryptophane para Windows GSyC - 2013 GPG 5 Uso de gpg Uso de gpg gpg puede usar Criptografı́a simétrica Ofrece privacidad Cifro un mensaje con una clave simétrica y solo quien conozca esa clave podrá descifrarlo Criptografı́a asimétrica Ofrece privacidad Cifro un mensaje con la clave pública de un usuario, y solo él (por tener la clave privada) podrá descifrarlo Ofrece integridad Firmo un mensaje con mi clave privada y cualquiera que tenga mi clave pública, podrá comprobar que yo soy el autor y que no ha sido alterado posteriormente GSyC - 2013 GPG 6 Uso de gpg Uso de gpg con criptografı́a simétrica Uso de gpg con criptografı́a simétrica Para cifrar un fichero: gpg --symmetric ejemplo.txt De forma abreviada: gpg -c ejemplo.txt Descifrado: gpg -d ejemplo.txt.gpg > ejemplo.txt GSyC - 2013 GPG 7 Uso de gpg Uso de gpg con criptografı́a asimétrica Uso de gpg con criptografı́a asimétrica Par de claves = Clave pública + Clave privada Normalmente cada usuario tiene un par principal de claves que usa para firmar Este par principal tiene, además: Uno o varios nombres aka uid = nombre de usuario + eMail Un segundo par de claves, subordinado al primero, para cifrar GSyC - 2013 GPG 8 Uso de gpg Uso de gpg con criptografı́a asimétrica koji@mazinger:~$ gpg --list-keys tino pub 1024D/4D019CB0 2002-02-09 uid José Celestino Pérez Pérez (Tino Pérez) <tinoperez@gmail.com> uid José Celestino Pérez <jcperez@empresa.com> sub 1024g/900A4865 2002-02-09 pub: par principal, para firmar 1024D: La longitud son 1024 bits y es de tipo DSA 4D019CB0: Identificador del par, aka keyID (últimos 8 caracteres de la huella) sub: par subordinado, para cifrar 1024g: La longitud son 1024 bits y es de tipo ElGamal 900A4865: Identificador del par subordinado Si invocamos gpg --list-keys sin ningún argumento adicional, nos muestra un listado de todas las claves de nuestro anillo GSyC - 2013 GPG 9 Uso de gpg Uso de gpg con criptografı́a asimétrica Creación de las claves koji@mazinger:~$ gpg --gen-key gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Por favor seleccione tipo de clave deseado: (1) RSA y RSA (predeterminado) (2) DSA y Elgamal (3) DSA (sólo firmar) (4) RSA (sólo firmar) ¿Su selección?: Podemos contestar (2) para una configuración como la del ejemplo anterior, o (1), que es el valor por omisión actual GSyC - 2013 GPG 10 Uso de gpg Uso de gpg con criptografı́a asimétrica La herramienta seguirá haciendo preguntas: Tamaño de la clave. Podemos responder 1024 como en el ejemplo anterior, 2048 o cualquier otro valor hasta 4096 Fecha de caducidad de la clave. Lo tı́pico es constar nunca Nuestro nombre y apellidos Dirección de correo Comentario. Aparecerá entre paréntesis. Generalmente lo dejaremos en blanco, pero podemos indicar, por ejemplo, formas alternativas de identificarnos. Maria Rosario Fuente López (Charo Fuente) <charo.fuente@correo.com> Juan Carlos Ramos Garcı́a (Joan Carles Ramos Garcı́a) <jcramos@empresa.es> Contraseña para proteger la clave secreta No es ni la clave pública ni la clave privada, sino una contraseña simétrica que impide que alguien que acceda a nuestro equipo pueda usar nuestra clave privada GSyC - 2013 GPG 11 Uso de gpg Uso de gpg con criptografı́a asimétrica Generación de valores aleatorios Para que las claves sean robustas, es importante partir de valores aleatorios de calidad, verdaderamente aleatorios A un ordenador no le resulta fácil generar este tipo de valores. GPG toma como punto de partida la entrada de usuario: sus movimientos de ratón, lo que teclee, su actividad Por ello, mientras GPG está generando las claves, nos solicitará que durante algún tiempo hagamos cualquier otra tarea en otra ventana GSyC - 2013 GPG 12 Uso de gpg Uso de gpg con criptografı́a asimétrica Almacenamiento de las claves Nuestras claves y las claves de nuestros contactos se almacenan en nuestro anillo de claves (keyring) El anillo de claves, junto con toda la configuración de gpg, se guardan en el directorio ~/.gnupg El contenido de este directorio es muy importante. Tras crearlo, deberı́amos hacer una o varias copias de seguridad, guardarlas cuidadosamente y no olvidar la contraseña de la clave secreta. De lo contrario, perderı́amos nuestra identidad GSyC - 2013 GPG 13 Uso de gpg Uso de gpg con criptografı́a asimétrica Invocación de gpg Para usar gpg, normalmente el esquema es gpg -o fichero_salida --parametro1 bla --parametro2 bla fichero_entrada En muchas ocasiones la salida es un documento binario. Si preferimos salida en texto plano (para pegar en correo o en web), añadimos la opción -a (ascii armor, armadura ascii) GSyC - 2013 GPG 14 Uso de gpg Uso de gpg con criptografı́a asimétrica Exportación de claves Una vez creado el par, necesitaremos dar a conocer la clave pública Podemos exportarla a un fichero de texto plano, p.e. para colgarlo en nuestra web gpg -o clave_pperez.asc -a --export pperez@gmail.com Podemos exportarla a un servidor público (están federados) gpg --keyserver pgp.rediris.es --send-keys 4D019CB0 GSyC - 2013 GPG 15 Uso de gpg Uso de gpg con criptografı́a asimétrica Importación de claves Si disponemos de un fichero con una clave pública , podemos importarlo en nuestro anillo mediante la orden gpg --import clave.asc Si no tenemos la clave pública, podemos buscarla en el servidor. P.e. en el servidor de claves de RedIRIS, accesible via web. Basta introducir en cualquier buscador las palabras rediris pgp, lo que nos llevará a http://www.rediris.es/keyserver En esta página, un formulario nos permite buscar una clave pública introduciendo nombre y/o apellidos y/o correo De esta manera, localizamos el keyID GSyC - 2013 GPG 16 Uso de gpg Uso de gpg con criptografı́a asimétrica Una vez que tenemos el keyID, importamos la clave a nuestro anillo gpg --keyserver pgp.rediris.es --recv-keys 4D019CB0 GSyC - 2013 GPG 17 Uso de gpg Uso de gpg con criptografı́a asimétrica Integración en los clientes de correo Los clientes de correo tradicionales de cierta calidad como thunderbird, evolution, outlook, etc suelen tener funcionalidad integrada para manejar gpg Pero los clientes web (gmail, hotmail, etc) no incluyen estas prestaciones y posiblemente nunca lo hagan, puesto que si el usuario cifrara su correo, ya no serı́a posible mostrar publicidad personalizada Por tanto, es necesario cifrar en otro lugar, p.e. la shell y luego cortar y pegar, o usar ficheros adjuntos GSyC - 2013 GPG 18 Uso de gpg Uso de gpg con criptografı́a asimétrica Cifrado y descifrado Para cifrar un documento con la clave pública de alguien gpg -o ejemplo.txt.gpg --encrypt \ --recipient jperez@gmail.com ejemplo.txt Para que además de cifrar, también firme con nuestra clave privada, añadimos la opción --sign Estas son opciones muy comunes, se pueden abreviar ası́: gpg -es -r jperez ejemplo.txt Para descifrar un documento gpg -o ejemplo.txt --decrypt ejemplo.txt.gpg que se puede abreviar gpg -d ejemplo.txt.gpg > ejemplo.txt GSyC - 2013 GPG 19 Uso de gpg Uso de gpg con criptografı́a asimétrica Firma Para firmar un documento de forma que el resultado aparezca en texto plano dentro de una armadura ascii gpg --clearsign ejemplo.txt Resultado: -----BEGIN PGP SIGNED MESSAGE----Hash: SHA1 Hola mundo -----BEGIN PGP SIGNATURE----Version: GnuPG v1.4.11 (GNU/Linux) iD8DBQFPFGRPBvDObj0BnLkRAolKAJ992iBpkd0AeAVIxAn5q0PcSj/+tACfVKfR 4kjnoM1pJR8ULNQEDYcr4P0= =TIFC -----END PGP SIGNATURE----- Para verificar la firma gpg --verify GSyC - 2013 ejemplo.txt.asc GPG 20 Uso de gpg Uso de gpg con criptografı́a asimétrica Gestión de la confianza Para gestionar la confianza en claves y usuarios, emplearemos la aplicación seahorse Confianza en la clave: Indicamos cómo de rigurosos hemos sido comprobando que esa clave pertenece realmente a esa persona Confianza en la persona: Indicamos en qué medida confiamos en que esa persona firma claves responsablemente Esto permite crear cadenas de confianza GSyC - 2013 GPG 21 Uso de gpg Uso de gpg con criptografı́a asimétrica Confianza en la clave Desde seahorse Otras claves | (Clic con botón derecho en la clave) | Firmar clave Podemos indicar si No hemos comprobado que la clave pertenece a la persona Lo hemos comprobado informalmente (casualmente) Lo hemos comprobado cuidadosamente (nos ha enseñado un carnet con validez legal y hemos comprobado que ese correo es suyo) GSyC - 2013 GPG 22 Uso de gpg Uso de gpg con criptografı́a asimétrica Confianza en la persona Otras claves | (Clic con el botón derecho en la clave) | propiedades | detalles | indicar confianza Desconocida No se si la persona es responsable o no Nunca Se que firma claves inadecuadamente Marginal (Valor por omisión). Confı́o en que es responsable firmando claves Completa Tengo confianza absoluta en la responsabilidad del usuario, confı́o en él como en mi mismo GSyC - 2013 GPG 23 Uso de gpg Uso de gpg con criptografı́a asimétrica Una vez indicada la confianza en la clave y la persona, esta información permanece en mi anillo local Normalmente querré exportar estos datos al servidor de claves Primero añadimos a seahorse el servidor de rediris Remota | Sincronizar y publicar claves | Servidores de claves | A~ nadir servidor de claves | Tipo de servidor de claves: personalizado Anfitrión: hkp://pgp.rediris.es Una vez añadido: Publicar claves en: hkp://pgp.rediris.es | sincronizar GSyC - 2013 GPG 24