Uso de GPG: Gnu Privacy Guard.
Table of contents
Creación de las claves publica y privada
Para crear las claves GPG podemos utilizar gpg –generate-key o gpg –full-generate-key el primer comando nos creará las claves sin preguntarnos otras opciones más que las necesarias. Si queremos un poco mas de control sobre algunas opciones como el tamaño o el periodo de validez usaremos gpg –full-generate-key.
El tamaño de la clave va relacionado con su seguridad pero también con el rendimiento ya que ha de procesar con números mas largos.
root@kali:~# gpg --full-generate-key
gpg (GnuPG) 2.2.17; 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.
gpg: creado el directorio '/root/.gnupg'
gpg: caja de claves '/root/.gnupg/pubring.kbx' creada
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)
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)? 0
La clave nunca caduca
¿Es correcto? (s/n) s
GnuPG debe construir un ID de usuario para identificar su clave.
Nombre y apellidos: Viel Losero
Dirección de correo electrónico: viel.losero@gmail.com
Comentario:
Ha seleccionado este ID de usuario:
"Viel Losero <viel.losero@gmail.com>"
¿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: /root/.gnupg/trustdb.gpg: se ha creado base de datos de confianza
gpg: clave F87816F5B769CD83 marcada como de confianza absoluta
gpg: creado el directorio '/root/.gnupg/openpgp-revocs.d'
sgpg: certificado de revocación guardado como '/root/.gnupg/openpgp-revocs.d/141839E8065C95F48E8DC329F87816F5B769CD83.rev'
claves pública y secreta creadas y firmadas.
pub rsa4096 2019-10-17 [SC]
141839E8065C95F48E8DC329F87816F5B769CD83
uid Viel Losero <viel.losero@gmail.com>
sub rsa4096 2019-10-17 [E]
root@kali:~#
Gestion de claves
Listar las claves nos proporciona el UID identificador Viel Losero viel.losero@gmail.com y la huella de la clave (ese numero tan largo) 141839E8065C95F48E8DC329F87816F5B769CD83.
Podemos usar el UID o la huella con los comandos gpg para definir la clave a usar en el firmado, cifrado o verificación.
Listado de claves Públicas
Podemos ver que solo tenemos nuestra clave pública, mas adelante veremos como importar mas claves publicas de otras personas para enviarles mensajes.
root@kali:~# gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub rsa4096 2019-10-17 [SC]
141839E8065C95F48E8DC329F87816F5B769CD83
uid [ absoluta ] Viel Losero <viel.losero@gmail.com>
sub rsa4096 2019-10-17 [E]
Listado de claves Privadas
El ID y la huella de la clave privada es el mismo que el de la clave púbica, evidentemente. Este listado es simplemente una forma de presentar la información de las claves al usuario. Las claves reales y los archivos de configuración están en el directorio oculto .gnupg tal como explica la configuración de archivos de gnupg.
root@kali:~# gpg --list-secret-keys
/root/.gnupg/pubring.kbx
------------------------
sec rsa4096 2019-10-17 [SC]
141839E8065C95F48E8DC329F87816F5B769CD83
uid [ absoluta ] Viel Losero <viel.losero@gmail.com>
ssb rsa4096 2019-10-17 [E]
Creación de un archivo de clave publica blindado
Si queremos enviar nuestra clave pública a otra persona podemos exportar la clave y añadir la opción armor para poder ver la información de manera legible (Human Readable), esto simplemente hace que se pase a base64 el archivo binario de la clave pública para poder verlo bien en pantalla. Si intentáramos ver un archivo binario en pantalla sin ningun editor hexadecimal solo veríamos caracteres raros.
root@kali:~# gpg --armor --output viel.losero@gmail.com-public-key.gpg --export viel.losero@gmail.com
root@kali:~# cat viel.losero@gmail.com-public-key.gpg
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=Aa5W
-----END PGP PUBLIC KEY BLOCK-----
root@kali:~#
Podemos hacer la prueba con los siguientes comandos para obtener la clave pública en binario y luego pasarla a base64.
-
gpg –output file.gpg –export ID
-
cat file.gpg
-
cat file.gpg | base64
Publicación de nuestra clave pública
La publicación de nuestra clave pública sirve para que otras personas nos puedan enviar mensajes cifrados con dicha clave pública y solo nosotros podamos descifrar el mensaje con nuestra clave privada. Nuestra clave pública se puede subir a diferentes servidores o enviarla nosotros mismos, con un fichero armado por ejemple, si disponemos de un canal de confianza seguro ya que el receptor tiene que estar seguro de que la clave que recibe pertenece realmente a la persona correcta.
Una vez publicada la clave informaremos de ella haciendo referencia a su huella como estos chicos tan majos del equipo de purism.
root@kali:~# gpg --send-keys 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: enviando clave F87816F5B769CD83 a hkps://keys.openpgp.org
root@kali:~#
Podemos usar otros servidores públicos como:
root@kali:~# gpg --send-keys --keyserver https://pgp.key-server.io/ 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: enviando clave F87816F5B769CD83 a https://pgp.key-server.io/
root@kali:~#
Consulta de nuestra clave publica
Ahora otras personas que obtengan la huella de nuestra firma podrán buscar nuestra clave, pero no la podrán descargar porque no tiene un UID asociado.
t@kali:~# gpg --search 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: data source: https://keys.openpgp.org:443
(1) 4096 bit RSA key F87816F5B769CD83
Keys 1-1 of 1 for "141839E8065C95F48E8DC329F87816F5B769CD83". Introduzca número(s), O)tro, o F)in > f
root@kali:~#
Asociación del correo electrónico a nuestra clave
Asociar nuestra firma a nuestro correo electrónico lo hace el servidor de claves enviándonos un correo electrónico a la cuenta de correo que figura en la clave.
Búsqueda de clave sin UID
Si realizamos una búsqueda de una clave (la nuestra en este caso), sin que el correo electrónico esté verificado, solo veremos la huella de la clave. Si una clave no tiene ningún UID asociado no se pude importar por otros usuarios.
root@kali:~# gpg --search 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: data source: https://keys.openpgp.org:443
(1) 4096 bit RSA key F87816F5B769CD83
Keys 1-1 of 1 for "141839E8065C95F48E8DC329F87816F5B769CD83". Introduzca número(s), O)tro, o F)in > f
Verificación del correo associado
Correo recibido de openpgp.org
Your key upload on keys.openpgp.org
keyserver@keys.openpgp.org
Hi,
this is an automated message from keys.openpgp.org. If you didn't upload your key there, please ignore this message.
OpenPGP key: 141839E8065C95F48E8DC329F87816F5B769CD83
This key was just uploaded for the first time, and is now published without identity information. If you want to allow others to find this key by e-mail address, please follow this link:
--- skipped ---
Búsqueda de clave con UID
Una vez que el servidor de claves nos haya verificado el correo electrónico lo asociará a la clave y podremos buscar la clave tambien por el correo electrónico asociado. En entornos de firma digital, a parte de que las claves las crea una entidad certificadora, se identifica al usuario presencialmente y con documento de identidad para certificar que las claves se dan al sujeto identificado.
root@kali:~# gpg --search 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: data source: https://keys.openpgp.org:443
(1) Viel Losero <viel.losero@gmail.com>
4096 bit RSA key F87816F5B769CD83, creado: 2019-10-17
Keys 1-1 of 1 for "141839E8065C95F48E8DC329F87816F5B769CD83". Introduzca número(s), O)tro, o F)in >
root@kali:~#
root@kali:~# gpg --search viel.losero@gmail.com
gpg: data source: https://keys.openpgp.org:443
(1) Viel Losero <viel.losero@gmail.com>
4096 bit RSA key F87816F5B769CD83, creado: 2019-10-17
Keys 1-1 of 1 for "viel.losero@gmail.com". Introduzca número(s), O)tro, o F)in >
Trabajando con ficheros
Una vez creadas las clave podemos cifrar archivos propios para guardarlos de manera segura, descifrar archivos que nos hayan enviado terceros o firmar archivos, como veremos a continuación.
Cifrado de archivo
La cifrado de archivos con cifrado asimétrico no es la función principal de dicho cifrado ya que para guardar archivos cifrados es una buena práctica hacelo con cifrado simétrico que es más rápido. Cuando ciframos un mensaje para nosotros mismos se usa nuestra clave pública, como si fuéramos un tercero, solo con nuestra clave privada podremos descifrarlo y leerlo.
root@kali:~# echo "mensaje de prueba" > test.txt
root@kali:~# gpg --encrypt --sign --armor -r viel.losero@gmail.com test.txt
-- prompted for passphrase
root@kali:~# cat test.txt.asc
-----BEGIN PGP MESSAGE-----
hQIMAymOXBWhtoQCAQ/+NY9q6IU0NTaLAboT3l3q9CCrKgdLw8ayWiPY9MFNSTa3
4LTV3sYK1tHlmV8R4yBxPze72nSR0veBPbb5f+CKUbZAAyjbnDZnr9PpMrCsPgPm
--- skipped for security reasons ---
eM0sta/1VdsCO5yHm694EIgihp0Alpo/MVj0JxhxH0PSxnZs5i6kau1e9b/ViGDO
y5CY55rdnFCmQb+xJbjdjoqxlC/gySk1I5n2EB6rBe+pY5WBXk1E+tNxZtFHfwMV
R9p5g9t19Vi7D0bT1M6Oj9a8gDs4g8t00R1kHpk1VEYDYZyJHnJkx9p74Qde
=AIh5
-----END PGP MESSAGE-----
root@kali:~#
Descifrado de archivo
La descifrado de archivos es una de las funciones principales del cifrado asimétrico. Terceras personas con nuestra clave pública, o nosotros mismos, podrán o podremos cifrar mensajes, estos mensajes solo se podrán descifrar y leer con nuestra clave privada.
root@kali:~# gpg --output test.txt.dec --decrypt test.txt.asc
gpg: cifrado con clave de 4096 bits RSA, ID 298E5C15A1B68402, creada el 2019-10-17
"Viel Losero <viel.losero@gmail.com>"
gpg: Firmado el jue 17 oct 2019 17:50:32 CEST
gpg: usando RSA clave 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: Firma correcta de "Viel Losero <viel.losero@gmail.com>" [absoluta]
root@kali:~# ls -la test.txt*
-rw-r--r-- 1 root root 18 oct 17 17:49 test.txt
-rw-r--r-- 1 root root 1686 oct 17 17:50 test.txt.asc
-rw-r--r-- 1 root root 18 oct 17 17:51 test.txt.dec
root@kali:~#
root@kali:~# cat test.txt.dec
mensaje de prueba
root@kali:~#
Firmado de archivo
El firmado de archivos también es una de las funciones principales del cifrado asimétrico. En entornos de firma digital, cuando las claves las crea una entidad certificadora y un usuario firma un documento, dan autenticidad integridad y no repudio al documento.
En nuestro caso, como veremos mas adelante cuando asociemos el correo electrónico a la clave publica, nuestra clave solo podrá acreditar que quien firma o descifrar archivos es el propietario de la cuenta de correo asociada.
root@kali:~# gpg --clear-sign -o test.txt.clear test.txt
root@kali:~# ls -la test.txt*
-rw-r--r-- 1 root root 18 oct 17 18:09 test.txt
-rw-r--r-- 1 root root 900 oct 17 18:10 test.txt.asc
-rw-r--r-- 1 root root 900 oct 17 18:13 test.txt.clear
-rw-r--r-- 1 root root 18 oct 17 17:51 test.txt.dec
root@kali:~#
Comprobación de firma
Verificar un mensaje firmado es relativamente simple. El mensaje viene en texto claro y con un simple cat podemos verlo.
root@kali:~# gpg --verify test.txt.clear
gpg: Firmado el jue 17 oct 2019 18:13:08 CEST
gpg: usando RSA clave 141839E8065C95F48E8DC329F87816F5B769CD83
gpg: Firma correcta de "Viel Losero <viel.losero@gmail.com>" [absoluta]
root@kali:~#
root@kali:~# cat test.txt.clear
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
mensaje de prueba
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEFBg56AZclfSOjcMp+HgW9bdpzYMFAl2q6rEACgkQ+HgW9bdp
zYPnShAAlh9MX5EZHyXZ3oxLntIthfmJ7dTMnYzNxnaMT5FTvUKjyq0joXuoKnYx
--- skipped for security reasons ---
jbcm0Iz4Vb1WicAo2ARTYKfRXroSZQlqQVZONzbYBEtypEJ6qKmk82/FUifuhTXK
mUfdrdAoRTBL6QDYHPfR3bjXYHcgwyEPxrruIsNhpHk8Uiqeoaw=
=mhz2
-----END PGP SIGNATURE-----
Terceros
Enviar correos electrónicos cifrados a terceros de manera segura es relativamente fácil con GPG. En este apartado usaremos la clave publica del CEO de purism solo para realizar una prueba de cifrado pero no le enviaremos el archivo por correo electrónico.
Importación de claves públicas de terceros
Si una clave no tiene un UID asociado no podemos importarla correctamente, por suerte podemos consultar otros servidores para ver si disponen de la clave asociada a algún correo electrónico.
root@kali:~# gpg --search B8CAACEAD94930F123C4642C23CF2E3D254514F7
gpg: data source: https://keys.openpgp.org:443
(1) 4096 bit RSA key 23CF2E3D254514F7
Keys 1-1 of 1 for "B8CAACEAD94930F123C4642C23CF2E3D254514F7". Introduzca número(s), O)tro, o F)in > f
root@kali:~#
root@kali:~# gpg --recv-keys B8CAACEAD94930F123C4642C23CF2E3D254514F7
gpg: key 23CF2E3D254514F7: new key but contains no user ID - skipped
gpg: Cantidad total procesada: 1
gpg: sin identificador: 1
root@kali:~#
root@kali:~# gpg --search --keyserver hkps://keyserver.ubuntu.com B8CAACEAD94930F123C4642C23CF2E3D254514F7
gpg: data source: https://162.213.33.8:443
(1) Todd Weaver <todd@puri.sm>
Todd Weaver <ceo@puri.sm>
4096 bit RSA key 23CF2E3D254514F7, creado: 2014-12-05
Keys 1-1 of 1 for "B8CAACEAD94930F123C4642C23CF2E3D254514F7". Introduzca número(s), O)tro, o F)in > f
root@kali:~#
root@kali:~# gpg --recv-keys --keyserver hkps://keyserver.ubuntu.com B8CAACEAD94930F123C4642C23CF2E3D254514F7
gpg: clave 23CF2E3D254514F7: clave pública "Todd Weaver <todd@puri.sm>" importada
gpg: Cantidad total procesada: 1
gpg: importadas: 1
root@kali:~#
Cifrado de mensaje para otra persona
Una vez tenemos la clave publica de la persona con la que queramos comunicarnos de manera segura, podemos cifrar un mensaje para dicha persona que solo podrá leer con su clave privada.
El mensaje de warning que sale es porque aun no hemos firmado (confiado) la clave publica del destinatario.
root@kali:~# gpg -r B8CAACEAD94930F123C4642C23CF2E3D254514F7 --encrypt test.txt
gpg: 7F609032678C8047: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra
sub rsa4096/7F609032678C8047 2014-12-05 Todd Weaver <todd@puri.sm>
Huella clave primaria: B8CA ACEA D949 30F1 23C4 642C 23CF 2E3D 2545 14F7
Huella de subclave: 4D32 522D BE68 B6B5 31B9 26A2 7F60 9032 678C 8047
No es seguro que la clave pertenezca a la persona que se nombra en el
identificador de usuario. Si *realmente* sabe lo que está haciendo,
puede contestar sí a la siguiente pregunta.
¿Usar esta clave de todas formas? (s/N) s
Testando el descifrado
Sin comentarios xd.
root@kali:~# gpg test.txt.gpg
gpg: ADVERTENCIA: no se ha proporcionado ninguna orden. Intentando adivinar lo que quieres...
gpg: cifrado con clave de 4096 bits RSA, ID 7F609032678C8047, creada el 2014-12-05
"Todd Weaver <todd@puri.sm>"
gpg: descifrado fallido: No secret key
root@kali:~#
Firmando claves de terceros
Cuando confiamos en que una clave publica pertenece realmente a la persona indicada podemos firmar esa clave para confiar el ella. Podemos ver como antes de firmar la clave publica, en el listado de claves publicas sale como deconocida.
Listado de claves
root@kali:~# gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub rsa4096 2019-10-17 [SC]
141839E8065C95F48E8DC329F87816F5B769CD83
uid [ absoluta ] Viel Losero <viel.losero@gmail.com>
sub rsa4096 2019-10-17 [E]
pub rsa4096 2014-12-05 [SC]
B8CAACEAD94930F123C4642C23CF2E3D254514F7
uid [desconocida] Todd Weaver <todd@puri.sm>
uid [desconocida] Todd Weaver <ceo@puri.sm>
uid [desconocida] [jpeg image of size 3931]
sub rsa4096 2014-12-05 [E]
Firmado de la clave pública de otra persona
Tenenos que estar seguros que la huella de la clave es correcta y pertenece a la persona indicada. Una vez estemos seguros podemos firmar su clave pública para confiar en ella y que no nos de avisos al respecto.
root@kali:~# gpg --sign-key B8CAACEAD94930F123C4642C23CF2E3D254514F7
pub rsa4096/23CF2E3D254514F7
creado: 2014-12-05 caduca: nunca uso: SC
confianza: desconocido validez: desconocido
sub rsa4096/7F609032678C8047
creado: 2014-12-05 caduca: nunca uso: E
[desconocida] (1). Todd Weaver <todd@puri.sm>
[desconocida] (2) Todd Weaver <ceo@puri.sm>
[desconocida] (3) [jpeg image of size 3931]
¿Firmar realmente todos los IDs de usuario? (s/N) s
pub rsa4096/23CF2E3D254514F7
creado: 2014-12-05 caduca: nunca uso: SC
confianza: desconocido validez: desconocido
Huella clave primaria: B8CA ACEA D949 30F1 23C4 642C 23CF 2E3D 2545 14F7
Todd Weaver <todd@puri.sm>
Todd Weaver <ceo@puri.sm>
[jpeg image of size 3931]
¿Está realmente seguro de querer firmar esta clave
con su clave: "Viel Losero <viel.losero@gmail.com>" (F87816F5B769CD83)?
¿Firmar de verdad? (s/N) s
Confianza en claves públicas de terceros
Podemos ver como una vez firmada la clave publica de otra persona y añadida a nuestro anillo se lista con confianza total.
root@kali:~# gpg --list-keys
gpg: comprobando base de datos de confianza
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: nivel: 0 validez: 1 firmada: 1 confianza: 0-, 0q, 0n, 0m, 0f, 1u
gpg: nivel: 1 validez: 1 firmada: 0 confianza: 1-, 0q, 0n, 0m, 0f, 0u
/root/.gnupg/pubring.kbx
------------------------
pub rsa4096 2019-10-17 [SC]
141839E8065C95F48E8DC329F87816F5B769CD83
uid [ absoluta ] Viel Losero <viel.losero@gmail.com>
sub rsa4096 2019-10-17 [E]
pub rsa4096 2014-12-05 [SC]
B8CAACEAD94930F123C4642C23CF2E3D254514F7
uid [ total ] Todd Weaver <todd@puri.sm>
uid [ total ] Todd Weaver <ceo@puri.sm>
uid [ total ] [jpeg image of size 3931]
sub rsa4096 2014-12-05 [E]
root@kali:~#
Firmado y cifrado de mensaje usando el UID del correo
Para trabajar mas cómodamente y no tener que estar copiando huellas de claves podemos cifrar mensajes usando cualquier UID de la clave.
También podemos firmar el mensaje que queremos enviar a la persona par que sepa que proviene de nosotros y no de otra persona.
IMPORTANTE!! Antes de enviar un mensaje o al recibirlo, tenemos que verificar que la clave del tercero no esté revocada.
root@kali:~# gpg -r ceo@puri.sm -u viel@losero@gmail.com --encrypt test.txt
El fichero 'test.txt.gpg' ya existe. ¿Sobreescribir? (s/N) s
root@kali:~# ls -la test.txt*
-rw-r--r-- 1 root root 18 oct 17 18:09 test.txt
-rw-r--r-- 1 root root 900 oct 17 18:10 test.txt.asc
-rw-r--r-- 1 root root 900 oct 19 12:51 test.txt.clear
-rw-r--r-- 1 root root 18 oct 17 17:51 test.txt.dec
-rw-r--r-- 1 root root 566 oct 17 18:16 test.txt.dtc
-rw-r--r-- 1 root root 614 oct 19 19:05 test.txt.gpg
root@kali:~#
Administración de claves
Una de las partes mas importantes de gpg es la gestión de nuestras claves privadas, los certificados de revocación y la actualización del anillo de claves.
Actualización y comprobación de claves de terceros
Antes de enviar un mensaje o comprobar la validez de la firma de un tercero es bueno actualizar regularmente nuestro anillo de claves, añadiéndolo al CRON o manualmente, para poder consultar posibles certificados revocados.
root@kali:~# gpg --refresh-keys
gpg: renovando 2 claves desde hkps://keys.openpgp.org
gpg: clave 23CF2E3D254514F7: "Todd Weaver <todd@puri.sm>" sin cambios
gpg: clave F87816F5B769CD83: "Viel Losero <viel.losero@gmail.com>" sin cambios
gpg: Cantidad total procesada: 2
gpg: sin cambios: 2
root@kali:~#
Creación del fichero de revocación
Las buenas practicas sugieren almacenar el certificado de revocación de la clave pública y una copia de seguridad de la clave privada en un dispositivo USB o medio externo protegido contra escritura y en un lugar seguro. Si nuestro certificado es comprometido o lo perdemos, podremos revocar el mismo desde un tercer dispositivo.
root@kali:~# gpg --output viel.losero@gmail.com-revocation.crt --gen-revoke viel.losero@gmail.com
sec rsa4096/F87816F5B769CD83 2019-10-17 Viel Losero <viel.losero@gmail.com>
¿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? 0
Introduzca una descripción opcional; acábela con una línea vacía:
> Initial Rebocation Backup
>
Razón para la revocación: No se dio ninguna razón
Initial Rebocation Backup
¿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!
root@kali:~#
Cifrado del certificado de revocación
Usaremos el propio gpg pero con cifrado simétrico para cifrar el certificado de revocación.
root@kali:~/data/.gnupg# gpg -c viel.losero@gmail.com-revocation.crt
root@kali:~/data/.gnupg# ls -la
total 28
drwx------ 4 root root 249 oct 19 19:49 .
drwxr-xr-x 29 root root 4096 oct 17 16:21 ..
drwx------ 2 root root 58 oct 17 16:21 openpgp-revocs.d
drwx------ 2 root root 110 oct 17 16:21 private-keys-v1.d
-rw-r--r-- 1 root root 2477 oct 17 16:21 pubring.kbx
-rw------- 1 root root 32 oct 17 16:21 pubring.kbx~
-rw------- 1 root root 1280 oct 17 16:21 trustdb.gpg
-rw-r--r-- 1 root root 3134 oct 17 16:27 viel.losero@gmail.com-public-key.gpg
-rw------- 1 root root 926 oct 19 19:39 viel.losero@gmail.com-revocation.crt
-rw-r--r-- 1 root root 829 oct 19 19:49 viel.losero@gmail.com-revocation.crt.gpg
Borrado del fichero de revocación con wipe.
root@kali:~/data/.gnupg# wipe viel.losero@gmail.com-revocation.crt
Okay to WIPE 1 regular file ? (Yes/No) yes
Wiping viel.losero@gmail.com-revocation, pass 34 (34)
Operation finished.
1 file wiped and 0 special files ignored in 0 directories, 0 symlinks removed but not followed, 0 errors occurred.
root@kali:~/data/.gnupg#
Cambio de los permisos a solo lectura
root@kali:~/data/.gnupg# chmod 400 viel.losero@gmail.com-revocation.crt.gpg
root@kali:~/data/.gnupg# ls -la
total 24
drwx------ 4 root root 205 oct 19 19:51 .
drwxr-xr-x 29 root root 4096 oct 17 16:21 ..
drwx------ 2 root root 58 oct 17 16:21 openpgp-revocs.d
drwx------ 2 root root 110 oct 17 16:21 private-keys-v1.d
-rw-r--r-- 1 root root 2477 oct 17 16:21 pubring.kbx
-rw------- 1 root root 32 oct 17 16:21 pubring.kbx~
-rw------- 1 root root 1280 oct 17 16:21 trustdb.gpg
-rw-r--r-- 1 root root 3134 oct 17 16:27 viel.losero@gmail.com-public-key.gpg
-r-------- 1 root root 829 oct 19 19:49 viel.losero@gmail.com-revocation.crt.gpg
root@kali:~/data/.gnupg#
Ahora solo queda hacer la copia en un dispositivo externo.
back
Referencias:
Licencia: CC-BY-SA