===== Claves gpg ===== gpg gnupg claves generar exportar importar borrar crear Para operar con las claves, instalar gunpg: sudo aptitude install gnupg ==== Generar claves ==== 1. Lanzar el comando: gpg --gen-key gpg (GnuPG) 1.4.9; Copyright (C) 2008 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. gpg: directorio `/home/usuario/.gnupg' creado gpg: creado un nuevo fichero de configuración `/home/usuario/.gnupg/gpg.conf' gpg: AVISO: las opciones en `/home/usuario/.gnupg/gpg.conf' no están aún activas en esta ejecución gpg: anillo `/home/usuario/.gnupg/secring.gpg' creado gpg: anillo `/home/usuario/.gnupg/pubring.gpg' creado Por favor seleccione tipo de clave deseado: (1) DSA y ElGamal (por defecto) (2) DSA (sólo firmar) (5) RSA (sólo firmar) 2. Teclear '1' y pulsar 'enter' Su elección: 1 El par de claves DSA tendrá 1024 bits. las claves ELG-E pueden tener entre 1024 y 4096 bits de longitud. ¿De qué tamaño quiere la clave? (2048) 3. 2048 está bien. Si se quiere otra longitud teclearla y pulsar 'enter' El tamaño requerido es de 4096 bits Por favor, especifique el período de validez de la clave. 0 = la clave nunca caduca = la clave caduca en n días w = la clave caduca en n semanas m = la clave caduca en n meses y = la clave caduca en n años ¿Validez de la clave (0)? 4. Teclear '0' y pulsar 'enter' La clave nunca caduca ¿Es correcto? (s/n) 5. Teclear 's' y pulsar 'enter' Necesita un identificador de usuario para identificar su clave. El programa construye el identificador a partir del Nombre Real, Comentario y Dirección de Correo Electrónico de esta forma: "Heinrich Heine (Der Dichter) " Nombre y apellidos: 6. Teclear nombre y apellidos (yo pongo primero may. y tildes) y pulsar 'enter' Dirección de correo electrónico: 7. Teclear correo electrónico (yo pongo primero el 'familiar') y pulsar 'enter' Comentario: 8. Pulsar 'enter' Está usando el juego de caracteres `utf-8'. Ha seleccionado este ID de usuario: "Nombre Apellido_1 Apellido_2 " ¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? 9. Teclear 'v' y pulsar 'enter' Necesita una frase contraseña para proteger su clave secreta. Introduzca frase contraseña: 10. Teclear contraseña y pulsar 'enter' Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía. +++++++++++++++.+++++..+++++..+++++..+++++.++++++++++.++++++++++++++++++++++++++++++.+++++..+++++.+++++.++++++++++++++++++++.+++++.+++++++++++++++>++++++++++.....>+++++......................................................................................................................................+++++ No hay suficientes bytes aleatorios disponibles. Por favor, haga algún otro trabajo para que el sistema pueda recolectar más entropía (se necesitan 284 bytes más). Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía. ++++++++++......+++++++++++++++.++++++++++..+++++..++++++++++++++++++++.++++++++++.+++++...++++++++++.+++++..+++++..+++++.++++++++++++++++++++..+++++.+++++++++++++++..++++++++++.+++++..+++++..+++++>...+++++.+++++...++++++++++++++++++++.+++++..+++++.++++++++++>+++++>+++++>...+++++>+++++.>+++++...............<+++++.....................................>+++++<.+++++............................................>..+++++....<+++++....+++++^^^ gpg: /home/usuario/.gnupg/trustdb.gpg: se ha creado base de datos de confianza gpg: clave 12345678 marcada como de confianza absoluta claves pública y secreta creadas y firmadas. gpg: comprobando base de datos de confianza gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias, modelo de confianza PGP gpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1u pub 1024D/12345678 2009-04-20 Huella de clave = Mi_huella uid Nombre Apellido_1 Apellido_2 sub 4096g/abcdefgh 2009-04-20 Como dice el texto, es necesario generar actividad en el pc (mover el ratón, navegar por internet...). Puede tardar varios minutos. *Truco* sudo aptitude install rng-tools sudo vim /etc/default/rng-tools Dejar la siguiente linea: HRNGDEVICE=/dev/urandom sudo /etc/init.d/rng-tools start Al crear nuestra clave, se ha creado el siguiente directorio: /home/mi_usuario/.gnupg Con la siguiente estructura: rw------- 1 mi_usuario mi_usuario 9154 abr 21 14:07 gpg.conf -rw------- 1 mi_usuario mi_usuario 1173 abr 22 12:57 pubring.gpg -rw------- 1 mi_usuario mi_usuario 2344 abr 22 12:57 pubring.gpg~ -rw------- 1 mi_usuario mi_usuario 600 abr 22 12:44 random_seed -rw------- 1 mi_usuario mi_usuario 1322 abr 22 12:44 secring.gpg -rw------- 1 mi_usuario mi_usuario 1280 abr 22 12:55 trustdb.gpg ==== Listar claves instaladas ==== Para ver las claves que tenemos instaladas: gpg --list-keys /home/mi_usuario/.gnupg/pubring.gpg ----------------------------- pub 1024D/12345678 2009-04-22 uid Nombre Apellido_1 Apellido_2 sub 2048g/abcdefgh 2009-04-22 El id a retener es '12345678' Para listar las claves privadas (en vez de pub pone sec) gpg --list-secret-keys sec 1024D/12345678 2008-03-20 uid Nombre Apellisdo ssb 2048g/12345678 2008-03-20 ==== Subir claves a servidor de claves ==== **NOTA** El puerto que se usa es el 11371 y superiores (de forma aleatoria) Obtenemos el id de la clave a subir, para subir solo la que queramos: gpg --list-keys /home/mi_usuario/.gnupg/pubring.gpg ----------------------------- pub 1024D/12345678 2009-04-22 uid Nombre Apellido_1 Apellido_2 sub 2048g/87954321 2009-04-22 En este caso el id es '12345678'. Para subir la clave al repositorio (por defecto keys.gnupg.net): gpg --send-keys 12345678 ==== Revocar Clave del Servidor ==== Si una clave vamos a dejar de usarla, hay que revocarla. Para revocarla, tenemos que crear un certificado de revocación y luego subirlo al servidor. Para crear el certificado de revocación, necesitamos la clave privada. Es aconsejable crear siempre el certificado de revocación. Vamos a revocar la antigua clave de 1024DSA porque hemos generado una nueva de 4096RSA # gpg --list-keys ----------------------------- pub 4096R/F4AD9A55 2014-09-15 uid Jose Legido sub 4096R/BAB57DE6 2014-09-15 pub 1024D/5A988F96 2008-03-20 uid Jose Legido sub 2048g/9BC56CC9 2008-03-20 # gpg --output revoke1024.asc --gen-revoke 5A988F96 sec 1024D/5A988F96 2008-03-20 Jose Legido Create a revocation certificate for this key? (y/N) y Please select the reason for the revocation: 0 = No reason specified 1 = Key has been compromised 2 = Key is superseded 3 = Key is no longer used Q = Cancel (Probably you want to select 1 here) Your decision? 3 Enter an optional description; end it with an empty line: > New Key F4AD9A55 > Reason for revocation: Key is no longer used New Key F4AD9A55 Is this okay? (y/N) y You need a passphrase to unlock the secret key for user: "Jose Legido " 1024-bit DSA key, ID 5A988F96, created 2008-03-20 ASCII armored output forced. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Ahora subimos el certificado de revocación para revocar la clave: # gpg --import revoke1024.asc gpg: key 5A988F96: "Jose Legido " revocation certificate imported gpg: Total number processed: 1 gpg: new key revocations: 1 gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u Al cabo de un rato, la clave aparece como revocada: # gpg --search-keys jose@legido.com gpg: searching for "jose@legido.com" from hkp server keys.gnupg.net (1) Jose Legido 4096 bit RSA key F4AD9A55, created: 2014-09-15 (2) Jose Legido 1024 bit DSA key 5A988F96, created: 2008-03-20 (revoked) ==== Descargar claves a servidor de claves ==== Por defecto keys.gnupg.net. Si conocemos el correo, podemos buscar: gpg --search-keys cuenta_otro_usuario@dominio.com gpg: buscando "cuenta_otro_usuario@dominio.com" de hkp servidor keys.gnupg.net (1) Nombre Apellido_1 1024 bit DSA key 23456789, creado: 2008-03-20 Keys 1-1 of 1 for "cuenta_otro_usuario@dominio.com". Introduzca número(s), O)tro, o F)in > Seleccionar, si vemos que es la que buscamos, la clave tecleando el número y pulsando 'enter'. En este caso: Teclear '1' y pulsar 'enter' pg: solicitando clave 23456789 de hkp servidor keys.gnupg.net gpg: clave 23456789: clave pública "Nombre Apellido_1 " importada gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias, modelo de confianza PGP gpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1u gpg: Cantidad total procesada: 1 gpg: importadas: 1 Para comprobar que la clave se ha importado correctamente: gpg --list-keys pub 1024D/23456789 2008-03-20 uid Nombre Apellido_1 sub 2048g/bcdefghi 2008-03-20 ==== Buscar claves ==== No sé porqué, si buscas claves sin indicar servidor, da error: # gpg --search-keys 5A988F96 gpg: searching for "5A988F96" from hkp server subkeys.pgp.net gpg: keyserver timed out gpg: keyserver search failed: keyserver error Indicando otro servidor funciona, pero a veces también falla. Servidores: keyserver.ubuntu.com subkeys.pgp.net pgp.mit.edu # gpg --keyserver keyserver.ubuntu.com --search-keys 5A988F96 gpg: searching for "5A988F96" from hkp server subkeys.pgp.net (1) Jose Legido 1024 bit DSA key 5A988F96, created: 2008-03-20 Keys 1-1 of 1 for "5A988F96". Enter number(s), N)ext, or Q)uit > Enter number(s), N)ext, or Q)uit > 1 gpg: requesting key 5A988F96 from hkp server subkeys.pgp.net gpg: key 5A988F96: "Jose Legido " not changed gpg: Total number processed: 1 gpg: unchanged: 1 Esto puede ser porque el puerto que usa es el 11371 y puede estar cerrado por algún proxy o firewall. Para probar si tenemos acceso hacemos: # telnet pool.sks-keyservers.net 11371 Para poder tener acceso al puerto, hacemos un tunneling con algún servidor que sepamos que si tiene acceso, por ejemplo, el pc de casa: # ssh -L 11371:pool.sks-keyservers.net:11371 lobo99.mine.nu Y una vez hecho el tunneling, nos conectamos al puerto local (de la L mayúsucula) que nos reenviará al servidor de casa y este al pool.sks-keyservers.net: # gpg --keyserver localhost --search-keys 5A988F96 ==== Importar claves desde un fichero ==== Previamente nos han pasado un fichero, generalmente con extensión .asc, que contiene la clave pública que queremos añadir a nuestro anillo. Para hacerlo: 1. Obtener, por el medio que sea (correo,scp...), el fichero con la clave pública a añadir, en el ejemplo 'clave_publica_gpg.asc' 2. Importarla: gpg --import clave_publica_gpg.asc gpg: keyring `/home/usuario/.gnupg/secring.gpg' created gpg: key 12345678: public key "Nombre Apellido1 Apellido2 " imported gpg: Total number processed: 1 gpg: imported: 1 3. Para comprobar que se importó correctamente: gpg --list-keys /home/usuario/.gnupg/pubring.gpg ----------------------------- pub 1024D/12345678 2009-04-22 uid Nombre Apellido1 Apellido2 sub 2048g/23456789 2009-04-22 ==== Exportar la clave pública a un fichero ==== Primero obtengo el id de la clave pública a exportar: Obtenemos el id de la clave a subir, para subir solo la que queramos: gpg --list-keys /home/mi_usuario/.gnupg/pubring.gpg ----------------------------- pub 1024D/12345678 2009-04-22 uid Nombre Apellido_1 Apellido_2 sub 2048g/abcdefgh 2009-04-22 En este caso el id es '12345678' Para hacerlo en formato ASCII ('armored'): gpg -a -o nombre_fichero.asc --export 12345678 Ahora podemos copiar 'nombre_fichero' (mediante scp...) y posteriormente importarlo al anillo de claves de otro usuario en otra máquina. ==== Borrar claves ==== **AVISO** NO es recomendable borrar ninguna clave privada a no ser que la tengamos en otro lado, pues si lo hacemos perderemos esa clave para siempre y no será posible recuperarla. Las claves públicas si se pueden borrar, porque teóricamente podremos recuperarla. Si queremos borrar alguna clave (privada, pública o ambas) de nuestro anillo de claves primero listamos las que tenemos: /home/usuario/.gnupg/pubring.gpg ----------------------------- pub 1024D/12345678 2009-04-22 uid Nombre Apellido_1 Apellido_2 sub 2048g/abcdefgh 2009-04-22 pub 1024D/87654321 2008-03-20 uid Nombre Apellido_1 sub 2048g/hgfedcba 2008-03-20 Vamos a borrar la clave con id '87654321': gpg --delete-key 87654321 gpg (GnuPG) 1.4.9; Copyright (C) 2008 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. pub 1024D/87654321 2008-03-20 Nombre Apellido_1 ¿Eliminar esta clave del anillo? (s/N) Tecleamos 's' y pulsamos 'enter' Para verificar que se ha borrado, se puede volver a listar las claves: gpg --list-keys ==== Firmar claves ==== Para ver firmas: gpg --list-sigs Para firmar una clave en concreto: gpg --edit-key 23456789 Really sign? (y/N) Teclear 'y' y pulsar 'enter' Command> quit Save changes? (y/N) Teclear 'y' y pulsar 'enter' ==== Desencriptar Fichero ==== Por si no tenemos instalado el gestor de claves en el correo, podemos copiar el mensaje en un fichero de texto y desencriptarlo. Copiamos el mensaje en el fichero encriptado.txt con las cabeceras: ----BEGIN PGP MESSAGE----- Charset: UTF-8 Version: GnuPG v1.4.9 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ hQIOA2aOFuybxWzJEAf9FP/CaiYrTRFXiRZ8joqAQnPMWHqoApF7igRjlyN/WxdT v705+IeOLFMzup17lETNXmZslykaVy984UN1BYWcYHs0Ebh3ZvIcV2vEZ97n5KC4 L+akTYm9yUPml+VlqsMQFv4rQD245MHCoxl599Ci5Z03jQu9TACHEWODbiIubMBN leqyoh6+KHA7jSp8dFNgKKFncvIRKMpeuT7NVVNuQazmNEBz3IQy =tDU9 ----END PGP MESSAGE----- Y con el siguiente comando lo desencripta en el fichero desencriptado.txt # gpg --output desencriptado.txt --decrypt encriptado.txt ==== Encriptar Fichero ==== 1. Listar las claves instaladas para tenerlas a mano gpg --list-keys 2. Encriptar el archivo: gpg --encrypt archivo.txt 3. Introducir el identificador de la clave y pulsar 'enter' 4. Teclear 'y' y pulsar 'enter' Se habra generado el archivo 'archivo.txt.gpg' que solo podra desencriptar la persona con la clave privada asociada a la clave publica (paso 3) contra la que se ha encriptado el archivo. 1 ==== Programas adicionales ==== **firegpg** Una extensión de firefox/iceweasel muy interesante para firmar, encriptar y desencriptar (requiere gnupg instalado y las claves privadas y públicas implicadas en el mensaje) compatible con gmail: [[http://es.getfiregpg.org/install.html|Enlace a firegpg]] Instalamos el complemento, reiniciamos el navegador y con aparecen nuevas funcionalides: * En la propia interfaz web de gmail * Al pulsar el botón derecho Cliente gráfico para gestionar claves: **gpa** aptitude install gpa ==== Subir la clave gpg a dokuwiki ==== 0. **OPCIONAL** Dependiendo de la configuración de dokuwiki, puede ser necesario introducir usuario y contraseña para poder editar contenido. 1. Pulsar el botón 'Editar esta página' en la parte inferior izquierda (o el botón 'Editar' en la parte derecha, dentro del contenido, si lo hubiese) 2. Situar el cursor en el punto exacto que queramos introducir el enlace al fichero, por ejemplo una celda de una tabla 3. Pulsar el segundo botón empezando por la derecha de la botonera que aparece en la parte superior:'Añadir imágines u otros ficheros' 4. Pulsar el botón 'Examinar' en la ventana que se nos ha a bierto, y navegar en el disco duro local hasta encontrar el fichero .asc que contiene nuestra clave públic. Pulsar dos veces sobre el fichero para seleccionarlo 5. Pulsar sobre el botón 'Cargar'. Nos aparecerá en el centro de la ventana, ordenado cronológicamente, un enlace que apunta a nuestro fichero 6. Pulsar sobre el enlace indicado en el punto 5. La ventana se cerrará y aparecerá un código similar a: {{:global:mi_fichero.asc}} 7. Aunque creo que no es necesario, dejarlo así: {{:global:mi_fichero.asc|asc}} 8. Pulsar sobre el botón 'Guardar' en la parte inferior. 9. Para probarlo pulsar sobre el enlace creado. Se abrirá una ventana indicando las siguientes opciones: Clave pública PGP Mostrar original | Importar Si pulsamos sobre 'Importar': Clave pública PGP Se importó con éxito. Mostrar original | Importar Como siempre para comprobar que se ha importado correctamente la clave: gpg --list-keys ==== Exportar / importar clave privada ==== **OJO** la clave privada no debe ser accesible por nadie más que su propietario * Exportar gpg --export-secret-key -a > clave_privada.key * Importar gpg --import clave_privada.key ==== Otros ==== Quizá no tenga nada que ver, pero a raíz de lanzar este comando: gpg --update-trustdb Al consultar el repositorio keys.gnupg.net apareció mi clave nueva