Crear claves GnuPG y uso de clave maestra offline

En una entrada anterior ponía una infografía de la Free Software Fundation y el enlace a emailselfdefense.fsf.org donde nos indicaba la necesidad de proteger los correos electrónicos de miradas indiscretas y la forma de hacerlo. Para la gente que no esta muy familiarizada con el uso de certificados es uno de los mejores sitios donde empezar. Voy a detallar aquí como se crean las claves desde la línea de mandatos y como utilzar subkeys con el fin de tener una clave maestra offline y no tener que llevarla siempre instala, por ejemplo en el portátil.

Primero vamos a crear un par de claves GPG. De forma predeterminada GPG crea una subclave de firma y una subclave de cifrado.

Vamos a utilizar la línea de mandatos, aunque también se pude hacer con el gestor de claves de GNOME seahorse.

Como vemos no tenemos todavía ninguna clave:

david@clibre:~$ gpg --list-keys
david@clibre:~$

Creamos el par de claves

david@clibre:~$ gpg --full-generate-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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 (por defecto)
   (2) DSA y ElGamal
   (3) DSA (sólo firmar)
   (4) RSA (sólo firmar)
  (14) Existing key from card
Su elección: 1
las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (3072) 4096
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)? 5y
La clave caduca jue 01 may 2025 14:45:41 CEST
¿Es correcto? (s/n) s

GnuPG debe construir un ID de usuario para identificar su clave.

Nombre y apellidos: CLibre
Dirección de correo electrónico: Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Comentario: comunidad libre
Ha seleccionado este ID de usuario:
    "CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>"

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? v
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.
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: clave 4979879DB7D4C847 marcada como de confianza absoluta
gpg: certificado de revocación guardado como '/home/david/.gnupg/openpgp-revocs.d/D96609AAD971D6065DE81C894979879DB7D4C847.rev'
claves pública y secreta creadas y firmadas.

pub   rsa4096 2020-05-02 [SC] [caduca: 2025-05-01]
      D96609AAD971D6065DE81C894979879DB7D4C847
uid                      CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
sub   rsa4096 2020-05-02 [E] [caduca: 2025-05-01]

david@clibre:~$

En el tamaño he seleccionado 4096. Esto depende un poco del uso del certificado y del tiempo de expiración. Teniendo en cuenta que el paso del tiempo hace que las claves más pequeñas pasen a ser consideradas no seguras y pruebas de rendimiento no ofrecen mucha penalización de rendimiento en claves más grandes, es mejor seleccionar una clave del al menos 2048. Para la validez de la clave en este ejemplo he puesto 5 años (5y). ¿cual tiene que ser el periodo de validez de la clave?  Para cifrar correo, por ejemplo se pueden usar claves de 1 año. Para el cifrado de código cito una nota de Joanna Rutkowska:

"Mis claves de firma (p. Ej., Claves de firma de código de blog o Qubes) no tienen fechas de vencimiento. Esto no es pereza. Existe un problema fundamental con el uso de una fecha de vencimiento en las claves utilizadas para la firma del código, porque no está claro ¿Cuál debería ser el resultado cuando uno verifica algún código antiguo (escrito y firmado cuando la clave aún era válida) en el futuro cuando la clave ya ha expirado?

Naturalmente, nos gustaría que el código antiguo, escrito y firmado cuando la clave todavía era válida, continuara verificándose bien también en el futuro, después de que la clave caduque (y el desarrollador tal vez falleció). Sin embargo, es muy problemático evitar que el atacante cree códigos falsificados que fingen ser antiguos."

Antes de crearse la clave, el sistema nos solicita una 'frase de paso' para proteger la clave privada. Esta frase nos la pedirá cada vez que utilicemos la clave privada.

Clave GnuPG 

Esta clave es el único escollo a salvar para poder usar de forma fraudulenta nuestra clave privada si alguien se hace con ella. De cualquier forma, eso solo nos daría tiempo para poder revocarla. Una clave privada en manos ajenas es una clave comprometida con o sin clave. Cito otra nota de Joanna Rutkowska:

"Orgullosamente uso frases de contraseña vacías en todas mis claves privadas. Esto se debe a que si alguien pudo ejecutar código malicioso en la máquina virtual donde vive una clave privada, entonces la clave debe considerarse comprometida, no importa cuán compleja sea la frase de contraseña que usé para protegerla. Las frases de contraseña en claves privadas son, en mi opinión, un ejemplo clásico de Security Theater."

Hay que tener en cuenta que cuando habla de 'la maquina virtual donde vive una clave privada' se refiere a la forma de proteger este tipo de información que tienen el sistema operativo Qubes, desarrollado originalmente por ella. Qubes utiliza un sistema denominado Split GPG. Las claves se almacenan en una maquina virtual de alta confianza sin dispositivo de red y designada específicamente para mantener información sensible. Cuando una aplicación quiere acceder a la llave GPG para encriptar o desencriptar algún contenido no se llama directamente a GPG, sino que se utiliza un script de envoltura que incluye el sistema Qubes por defecto.

Esto nos puede dar una idea de la necesidad de mantener nuestras claves privadas a salvo en un lugar seguro. Si nuestra clave privada se ve comprometida por alguna persona o entidad, esa no solo puede descifrar los mensajes destinados a nosotros, sino que también puede hacerse pasar por nosotros firmando mensajes con nuestra clave privada. En este caso tendríamos que revocar la clave, pero eso significaría perder años de firmas en esa clave lo que puede ser un gran inconveniente.

Con este fin, el de proteger las claves privadas, se utiliza un método que consiste en mantener la clave maestra ofline, es decir, fuera del sistema. Esto lo veremos en un momento, ahora verificamos que tenemos creadas nuestro par de claves:

david@clibre:~$ gpg --list-keys
/home/david/.gnupg/pubring.kbx
------------------------------
pub   rsa4096 2020-05-02 [SC] [caduca: 2025-05-01]
      D96609AAD971D6065DE81C894979879DB7D4C847
uid        [  absoluta ] CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
sub   rsa4096 2020-05-02 [E] [caduca: 2025-05-01]

Desde seahourse podemos ver también nuestras recientes subclaves creadas:

Seahorse 

Añadir una foto a nuestra clave

Esta foto se va a almacenar dentro de nuestra clave pública que será posteriormente distribuida, por tanto debe ser de un tamaño contenido. El fichero tiene que ser en formato jpg. Voy a utilizar una imagen pinclibre2.jpg que ocupa 1,9 kB con una resolución de 120x120:

david@clibre:~$ gpg --edit-key Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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.

Clave secreta disponible.

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: absoluta      validez: absoluta
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
[  absoluta ] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>

gpg> addphoto

Escoja una imagen para usar en su ID fotográfico. La imagen debe ser un
fichero JPEG. Recuerde que la imágen se almacena en su clave pública.
Si usa una foto muy grande, ¡su clave será también muy grande!
Una imagen cercana a 240x288 tiene un tamaño adecuado.

Introduzca nombre del fichero JPEG para ID fotográfico: /home/david/pinclibre2.jpg
¿Es correcta la foto? (s/n) s

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: absoluta      validez: absoluta
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
[  absoluta ] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[desconocida] (2)  [jpeg image of size 1855]

gpg> save

Le damos la ruta de donde se encuentra el archivo con la imagen y nos solicita la clave para añadir la foto.

Desde seahourse podemos ver que tenemos nuestra foto añadida a la clave:

Usando la línea de mandatos también vemos que tenemos la foto añadida: 

david@clibre:~$ gpg --list-keys
/home/david/.gnupg/pubring.kbx
------------------------------
pub   rsa4096 2020-05-02 [SC] [caduca: 2025-05-01]
      D96609AAD971D6065DE81C894979879DB7D4C847
uid        [  absoluta ] CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
uid        [  absoluta ] [jpeg image of size 1855]
sub   rsa4096 2020-05-02 [E] [caduca: 2025-05-01]

Hasta aquí tenemos el proceso normal de crear el par de claves.

Agregar una subclave de firma adicional al par de claves

Vamos a crear una clave de firma que nos permita trabajar con cifrado sin tener que tener la clave maestra.

david@clibre:~$ gpg --edit-key Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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.

Clave secreta disponible.

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: absoluta      validez: absoluta
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
[  absoluta ] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[  absoluta ] (2)  [jpeg image of size 1855]

gpg> addkey
Por favor seleccione tipo de clave deseado:
   (3) DSA (sólo firmar)
   (4) RSA (sólo firmar)
   (5) ElGamal (sólo cifrar)
   (6) RSA (sólo cifrar)
  (14) Existing key from card
Su elección: 4
las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (3072) 4096
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)? 5y
La clave caduca jue 01 may 2025 18:16:39 CEST
¿Es correcto? (s/n) s
¿Crear de verdad? (s/N) 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.

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: absoluta      validez: absoluta
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
ssb  rsa4096/AB67EBE674025B1B
     creado: 2020-05-02  caduca: 2025-05-01  uso: S   
[  absoluta ] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[  absoluta ] (2)  [jpeg image of size 1855]

gpg> save

Crear el certificado de revocación

Este certificado es el que se debe usar (publicándolo en un keyserver) en caso de que nuestra clave maestra se vea comprometida, es decir, la clave que vamos a dejar offline:

david@clibre:~$ gpg --output revoke-clibre.asc --gen-revoke Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

sec  rsa4096/4979879DB7D4C847 2020-05-02 CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>

¿Crear un certificado de revocación para esta clave? (s/N) s
Por favor elija una razón para la revocación:
  0 = No se dio ninguna razón
  1 = La clave ha sido comprometida
  2 = La clave ha sido reemplazada
  3 = La clave ya no está en uso
  Q = Cancelar
(Probablemente quería seleccionar 1 aquí)
¿Su decisión? 1
Introduzca una descripción opcional; acábela con una línea vacía:
>
Razón para la revocación: La clave ha sido comprometida
(No se dió descripción)
¿Es correcto? (s/N) s
se fuerza salida con armadura ASCII.
Certificado de revocación creado.

Por favor consérvelo en un medio que pueda esconder; si alguien consigue
acceso a este certificado puede usarlo para inutilizar su clave.
Es inteligente imprimir este certificado y guardarlo en otro lugar, por
si acaso su medio resulta imposible de leer. Pero precaución: ¡el sistema
de impresión de su máquina podría almacenar los datos y hacerlos accesibles
a otras personas!

Para el caso de verse comprometida la subclave que creamo en el paso anterior (el caso más probable, que para eso dejamos la clave maestra en lugar seguro) tendríamos que revocar esa subclave utilizando la clave maestra, no este certificado de revocación (al final del artículo vemos como hacerlo).

Este archivo de certificado es la única forma en que podrá decirle a las personas que ignoren la clave maestra comprometida. Como bien nos indica gpg, tenemos que mantenerlo en un lugar seguro: "Dado que el certificado es corto, es posible que el usuario desee imprimir una copia en papel del certificado para guardarla en algún sitio seguro, como por ejemplo una caja fuerte de seguridad. El certificado no debería ser guardado en lugares a los que otros puedan tener acceso, ya que cualquiera podría hacer público el certificado de revocación e inutilizar la correspondiente clave"

Tenemos nuestras subclaves creadas:

david@clibre:~$ gpg --list-keys
/home/david/.gnupg/pubring.kbx
------------------------------
pub   rsa4096 2020-05-02 [SC] [caduca: 2025-05-01]
      D96609AAD971D6065DE81C894979879DB7D4C847
uid        [  absoluta ] CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
uid        [  absoluta ] [jpeg image of size 1855]
sub   rsa4096 2020-05-02 [E] [caduca: 2025-05-01]
sub   rsa4096 2020-05-02 [S] [caduca: 2025-05-01]

Eliminar la clave privada maestra

Vamos a exportar todo como copia de seguridad y para poder usar cuando necesitemos la clave privada maestra:

david@clibre:~$ gpg --export-secret-keys --armor Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. > clibre-private-key.asc
david@clibre:~$ gpg --export --armor Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. > clibre-public-key.asc

Como podemos imaginar, estos 2 fichero se deben guardar en lugar seguro (principalmente la llave privada).

Tenemos ahora que dejar la clave maestra ofline, es decir, fuera del sistema. Existen varias formas de hacerlo, en versiones actuales de GnuPG solo tenemos que buscar el keygrip de nuestra clave maestra y borrarla. Sacamos el keygrip:

david@clibre:~$ gpg --list-secret-keys --with-keygrip
/home/david/.gnupg/pubring.kbx
------------------------------
sec   rsa4096 2020-05-02 [SC] [caduca: 2025-05-01]
      D96609AAD971D6065DE81C894979879DB7D4C847
      Keygrip = 9615D8DF276BC0D5EA54FC2DA9EEA71AA15A1268
uid        [  absoluta ] CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
uid        [  absoluta ] [jpeg image of size 1855]
ssb   rsa4096 2020-05-02 [E] [caduca: 2025-05-01]
      Keygrip = 5E51A8001D806785558C93EBEE4BB0283B036C5F
ssb   rsa4096 2020-05-02 [S] [caduca: 2025-05-01]
      Keygrip = 86E3C5AF46705F6A047F86F5F21B73DA0B151634
 

Y eliminamos la clave:

david@clibre:~$ gpg-connect-agent "DELETE_KEY 9615D8DF276BC0D5EA54FC2DA9EEA71AA15A1268" /bye
OK

Podemos verificar que la clave a sido eliminada:

david@clibre:~$ gpg --list-secret-keys 
/home/david/.gnupg/pubring.kbx
------------------------------
sec#  rsa4096 2020-05-02 [SC] [caduca: 2025-05-01]
      D96609AAD971D6065DE81C894979879DB7D4C847
uid        [  absoluta ] CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
uid        [  absoluta ] [jpeg image of size 1855]
ssb   rsa4096 2020-05-02 [E] [caduca: 2025-05-01]
ssb   rsa4096 2020-05-02 [S] [caduca: 2025-05-01]

El simbolo # despues de sec nos indica que la clave maestra no se encuentra el par de claves ubicado en el llavero.

Otra forma de borrar la clave es borrarla directamente del directorio donde se encuentra guardada. Por defecto las claves se encuentran en ~/.gnupg/private-keys-v1.d/. Si miramos el direcctorio antes de borrar la clave encontramos el fichero que la contiene:

david@clibre:~$ ls .gnupg/private-keys-v1.d/9615D8DF276BC0D5EA54FC2DA9EEA71AA15A1268.key
.gnupg/private-keys-v1.d/9615D8DF276BC0D5EA54FC2DA9EEA71AA15A1268.key

De esta forma copiamos este archivo a un dispositivo seguro y lo eliminamos del equipo. Cuando lo necesitamos podemos montar un dispositivo de almacenamiento extraíble donde tenemos almacenada la clave y podemos crear un enlace simbólico desde ~/.gnupg/private-keys-v1.d/ que apunte al fichero.

Tenemos que tener en cuenta que aunque este método de usar el archivo de clave directamente es muy sencillo, es un sistema que depende de que las futuras implementaciones de GnuPG mantengan esa estructura de directorios. 

Probamos que no tenemos la clave maestra

Vamos a realizar una operación en la que necesitamos usar la clave maestra, como editar el llavero y añadir un ID de usuario. 

david@clibre:~$ gpg --edit-key Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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.

Subclaves secretas disponibles.

pub  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: absoluta      validez: absoluta
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
ssb  rsa4096/AB67EBE674025B1B
     creado: 2020-05-02  caduca: 2025-05-01  uso: S   
[  absoluta ] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[  absoluta ] (2)  [jpeg image of size 1855]

gpg> adduid
Se necesita la clave secreta para hacer esto.

gpg> 

Cuando intentamos añadir el userID nos reporta que es necesaria la clave secreta y aborta la operación. 

Importar clave maestra para su uso

En los casos que necesitamos usar la clave maestra, que pongamos tenemos en una memoria USB, tenemos que importarla a nuestro llavero de claves.

Creamos una carpeta temporal donde vamos a importar la clave. Usamos una carpeta RAM (en memoria) con el fin de que las claves no se almacenen en un medio permanente (utilizando ramfs evitamos que se escriba en swap):

david@clibre:~$ mkdir /tmp/gpg
david@clibre:~$ sudo mount -t ramfs -o size=1M ramfs /tmp/gpg
david@clibre:~$ sudo chown $(logname):$(logname) /tmp/gpg
david@clibre:~$ sudo chmod 0700 /tmp/gpg/

Importamos las claves desde nuestra memoria USB:

david@clibre:~$ gpg --homedir /tmp/gpg/ --import /media/david/myusb/clibre-private-key.asc
gpg: caja de claves '/tmp/gpg/pubring.kbx' creada
gpg: /tmp/gpg/trustdb.gpg: se ha creado base de datos de confianza
gpg: clave 4979879DB7D4C847: clave pública "CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>" importada
gpg: clave 4979879DB7D4C847: clave secreta importada
gpg: Cantidad total procesada: 1
gpg:               importadas: 1
gpg:       claves secretas leídas: 1
gpg:   claves secretas importadas: 1

Ahora podemos desmontar el disco USB y guardarlo de nuevo en lugar seguro.

Para usar la clave indicamos a gpg que use el directorio temporal como inicio de GnuPG, y agregue el llavero público desde el directorio de inicio normal de GnuPG, por ejemplo para firmar una clave:

david@clibre:~$ gpg --homedir /tmp/gpg/ --keyring ~/.gnupg/pubring.kbx --edit-key Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. 

De esta forma podemos firmar sin problemas con la clave privada maestra. Cuando no necesitamos más la clave maestra finalizamos el agente que hemos creado en la carpeta temporal, desmontamos el disco RAM y borramos la carpeta temporal:

david@clibre:~$ gpg-connect-agent --homedir /tmp/gpg/ KILLAGENT /bye
OK closing connection
david@clibre:~$ sudo umount /tmp/gpg
david@clibre:~$ rmdir /tmp/gpg

Para revocar las subclaves

En caso de que las subclaves se vean comprometidas, no así la clave maestra que se encuentra en lugar seguro, montamos la clave maestra de la misma manera y revocamos las subclaves:

david@clibre:~$ mkdir /tmp/gpg
david@clibre:~$ sudo mount -t ramfs -o size=1M ramfs /tmp/gpg
[sudo] contraseña para david:
david@clibre:~$ sudo chown $(logname):$(logname) /tmp/gpg
david@clibre:~$ sudo chmod 0700 /tmp/gpg/
david@clibre:~$ gpg --homedir /tmp/gpg/ --import /media/david/myusb/clibre-private-key.asc
gpg: caja de claves '/tmp/gpg/pubring.kbx' creada
gpg: /tmp/gpg/trustdb.gpg: se ha creado base de datos de confianza
gpg: clave 4979879DB7D4C847: clave pública "CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>" importada
gpg: clave 4979879DB7D4C847: clave secreta importada
gpg: Cantidad total procesada: 1
gpg:               importadas: 1
gpg:       claves secretas leídas: 1
gpg:   claves secretas importadas: 1
david@clibre:~$ gpg --homedir /tmp/gpg/ --keyring ~/.gnupg/pubring.kbx --edit-key Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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.

Clave secreta disponible.

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: desconocido   validez: desconocido
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
ssb  rsa4096/AB67EBE674025B1B
     creado: 2020-05-02  caduca: 2025-05-01  uso: S   
[desconocida] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[desconocida] (2)  [jpeg image of size 1855]

gpg> key 1

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: desconocido   validez: desconocido
ssb* rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
ssb  rsa4096/AB67EBE674025B1B
     creado: 2020-05-02  caduca: 2025-05-01  uso: S   
[desconocida] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[desconocida] (2)  [jpeg image of size 1855]

gpg> key 2

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: desconocido   validez: desconocido
ssb* rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  caduca: 2025-05-01  uso: E   
ssb* rsa4096/AB67EBE674025B1B
     creado: 2020-05-02  caduca: 2025-05-01  uso: S   
[desconocida] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[desconocida] (2)  [jpeg image of size 1855]

gpg> revkey
¿De verdad quiere revocar las subclaves seleccionadas? (s/N) s
Por favor elija una razón para la revocación:
  0 = No se dio ninguna razón
  1 = La clave ha sido comprometida
  2 = La clave ha sido reemplazada
  3 = La clave ya no está en uso
  Q = Cancelar
¿Su decisión? 1
Introduzca una descripción opcional; acábela con una línea vacía:
>
Razón para la revocación: La clave ha sido comprometida
(No se dió descripción)
¿Es correcto? (s/N) s

sec  rsa4096/4979879DB7D4C847
     creado: 2020-05-02  caduca: 2025-05-01  uso: SC  
     confianza: desconocido   validez: desconocido
La siguiente clave fue revocada en 2020-05-02 por RSA clave 4979879DB7D4C847 CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
ssb  rsa4096/EBAB153A038F0A70
     creado: 2020-05-02  revocada: 2020-05-02  uso: E   
La siguiente clave fue revocada en 2020-05-02 por RSA clave 4979879DB7D4C847 CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
ssb  rsa4096/AB67EBE674025B1B
     creado: 2020-05-02  revocada: 2020-05-02  uso: S   
[desconocida] (1). CLibre (comunidad libre) <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>
[desconocida] (2)  [jpeg image of size 1855]

gpg>save

Información de referencia

Modificado por última vez enJueves, 18 Marzo 2021 10:33
(2 votos)
Etiquetado como :

3 comentarios

  • Boina
    Boina Martes, 24 Agosto 2021 18:19 Enlace al Comentario

    Uso el cifrado de correo con amigos y algunos familiares, pero entiendo que el grado de confidencialidad debería ser el mismo para todo tipo de intercambios. Probaré todos estos pasos con un un ordenador que tengo para hacer experimentos.
    Por otra parte veo que usando un navegador con el complemento Mailvelope, no parece posible llevar a cabo este procedimiento, tampoco veo que sea posible con las últimas versiones de Thunderbird.

  • David Quiroga
    David Quiroga Sábado, 31 Julio 2021 16:36 Enlace al Comentario

    Que tal Boina,

    Efectivamente las personas que ya tienen tu llave pública es lo único que necesitan.

    Sobre tener la clave privada en el equipo, existe el riesgo de robo físico, pero también de que algún tipo de malware se ejecute en el sistema. Aunque tengas el equipo cifrado, lo normal es que cuando te has logado el sistemas sea accesible y por tanto vulnerable.

    Si se trata de un equipo portátil cifrado, ciertamente mientras no esta activo los datos están cifrados. Ahora bien, esto solo es tiempo para poder revocar certificados pues esos certificados no se podrían considerar seguros. Un equipo físico, en determinadas manos, sin límite de tiempo y protegido únicamente por una contraseña se considera comprometido (tarde o temprano).

    Es cierto que lo normal es que roben el dispositivo móvil, lo borren y ya está, pero eso no se sabe y los certificados cuyas claves privadas estuvieran en el dispositivo se tienen que revocar, que es justo lo que pretendemos evitar con este sistema.

    Todo depende del grado de confidencialidad y también del trastorno que pueda derivarse de revocar un certificado.

  • Boina
    Boina Sábado, 24 Julio 2021 19:41 Enlace al Comentario

    Hola.

    Muchas gracias por el post, con él me queda más claro el tema de las subclaves.
    Llevo usando gpg desde hace varios años de la forma "tradicional": copiando todo el keyring de un dispositivo a otro. Me está interesando esto de las subclaves, pero me surgen dudas: si yo hago una subclave de firma para un dispositivo, ¿tengo que comunicar algo a mis interlocutores?, entiendo que no, ellos ya tienen mi clave pública. Por otra parte, me interesaría usar este mecanismo en dispositivos portátiles como laptops o teléfonos, pero de momento lo de quitar la parte secreta en el PC no lo veo urgente ya que tengo todo el disco cifrado de modo que si me lo robaran, no tendrían acceso al contenido; ¿como de factible o aconsejable sería dejar la parte secreta en el PC?

    Muchas gracias de nuevo

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.