User Tools

Site Tools


informatica:linux:claves_gpg

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
      <n>  = la clave caduca en n días
      <n>w = la clave caduca en n semanas
      <n>m = la clave caduca en n meses
      <n>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) <heinrichh@duesseldorf.de>"

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 <buzon@dominio.com>"

¿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 <buzon@dominio.com>
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 <cuenta@correo.com>
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 <cuenta@correo.com>
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 <cuenta@correo.com>
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 <jose@legido.com>
sub   4096R/BAB57DE6 2014-09-15

pub   1024D/5A988F96 2008-03-20
uid                  Jose Legido <jose@legido.com>
sub   2048g/9BC56CC9 2008-03-20
# gpg --output revoke1024.asc --gen-revoke 5A988F96

sec  1024D/5A988F96 2008-03-20 Jose Legido <jose@legido.com>
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 <jose@legido.com>"
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 <jose@legido.com>" 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 <jose@legido.com>
	  4096 bit RSA key F4AD9A55, created: 2014-09-15
(2)	Jose Legido <jose@legido.com>
	  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 <cuenta_otro_usuario@dominio.com>
	  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 <cuenta_otro_usuario@dominio.com>" 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 <cuenta_otro_usuario@dominio.com>
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 <jose@legido.com>
	  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 <jose@legido.com>" 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
<buzon@dominio.com>" 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 <buzon@dominio.com>
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 <cuenta@correo.com>
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 <usuario@dominio.com>
sub   2048g/abcdefgh 2009-04-22

pub   1024D/87654321 2008-03-20
uid                  Nombre Apellido_1 <otro_usuario@dominio.com>
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 <otro_usuario@dominio.com>

¿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:

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

informatica/linux/claves_gpg.txt · Last modified: 2023/11/30 14:04 by jose