Manual de creación y mantenimiento de clave GPG
Tener una clave no te garantiza recordar la contraseña
Vistos distintos manuales y blogs, recopilo aquí la experiencia con gnupg en Debian GNU/Linux.
Previo: modifica tu configuración a SHA2
Lo primero, vamos a cambiar la configuración de gpg para que utilice SHA2 en vez de SHA1. Por ello, añadimos estas líneas al final del archivo .gnupg/gpg.conf
:
|
|
Manual y ayuda
Recuerda que siempre puedes acceder al manual desde la terminal con man gpg
, y también puedes ver una ayuda rápida con gpg --help.
Crear una nueva clave GPG
Creamos la clave con la opción --gen-key
o si queremos que salgan todas las opciones con la opción --full-generate-key
|
|
Tras un mensaje de gpg, saldrá este diálogo:
|
|
RSA o DSA… elige lo que prefieras o bien la opción por defecto. Si quieres investigar más, puedes empezar por aquí: https://lists.gnupg.org/pipermail/gnupg-users/2004-June/022764.html
Una vez elegida esto, nos pedirá la longitud de la clave:
|
|
Saldrán varias opciones, recomendamos preferiblemente de 4096 bit
También te pedirá si quieres que expire algún día o que no expire:
|
|
Entonces pasará a pedir unos datos:
- Nombre y Apellidos
- Dirección de correo electrónico
- Comentario
Estos datos aparecerán tal que así:
|
|
Si nos equivocamos o queremos cambiarlo, podremos hacerlo luego.
Nos pedirá que confirmemos:
|
|
Y pasaremos a la contraseña. En el diálogo, nos sale un aviso:
|
|
Una vez repitamos correctamente la contraseña, ya habremos creado la clave GPG.
Generar subclave
Parece una buena ida crear una subclave de la clave creada porque así utilizaremos esta en vez de la principal.
Dado que lo hacemos sobre nuestra clave, veamos si tenemos solo la nuestra o más claves, incluso nuestras antiguas, y editamos la que acabamos de crear:
|
|
Con el hash (sucesión de letras en mayúsculas y números) que salga después de pub
se identifica la clave y se selecciona:
|
|
El prompt de la consola cambiara al de gpg, y añadimos clave:
|
|
Hay que seleccionar el tipo de clave deseado, entre las siguientes opciones:
|
|
Seleccionamos la opción 6, ya que solo queremos cifrar con esta subclave.
La siguiente pregunta es qué longitud de bits queremos… cuanto más, mejor:
|
|
A continuación, nos pregunta la caducidad de la clave:
|
|
Nos pedirá la contraseña que antes hemos introducido y lo creara.
Ahora solo queda guardar con save
|
|
Añadir otra identidad
Para añadir otra identidad, tenemos que editar la clave con la opción --edit-key
y el identificador de la clave:
|
|
Así entramos en el prompt de gpg
para editar esa clave.
Una vez en la consola de gpg
, añadiremos la identidad con el comando adduid
|
|
Nos pedirá nombre, dirección de correo electrónico, un comentario (opcional) y validarlo o no. Entonces, pide la contraseña y se crea con la misma expiración que la identidad maestra.
Para finalizar, guardamos con save
:
|
|
Establecer la identidad primaria
Si queremos cambiar la identidad primaria, editamos la clave con su hash y entramos en el prompt de gpg:
|
|
Una vez ahí, seleccionamos la clave:
|
|
Y la convertimos en primaria con primary
:
|
|
Por último, guardamos:
|
|
Listar las claves disponibles
Para saber qué claves tienes, tanto propias como ajenas, puedes listarlas con gpg --list-keys
También puede añadir patrones a acontinuación, como por ejemplo el nombre el correo electrónico o el dominio:
|
|
Exportar clave pública
Para enviar una clave púbica a la otra persona antes hay que exportarla con la opción --export
y creando un archivo con la salida con la opción --output
, más el identificador de la clave:
|
|
De esta forma crearíamos la clave en formato binario, lo cual puede dar problemas cuando la enviamos por correo electrónico o la mostramos en una página web, por lo que añadiremos la opción --armor
que fuerza que la salida sea en formato armadura ASCII:
|
|
Enviar la llave al servidor
Para enviar una clave al servidor, especificamos el servidor con la opción keyserver
y la clave con la opción send-key
:
|
|
Puedes enviarlo a uno, dos o varios servidores:
- GNUPG, hkp://keys.gnupg.net
- RedIris, hkp://pgp.rediris.es
- MIT, hkp://pgp.mit.edu
- PGP, hkp://subkeys.pgp.net
Importar clave pública gpg
Se pueden añadir claves públicas al anillo de claves públicas mediante la opción --import
De archivo local
|
|
Lo podemos comprobar con la opción --list-keys
o con la opción más concreta --list-public-keys
De servidor de claves
También lo podemos importar de un servidor de claves con la opción --keyserver
, donde incluimos el servidor en cuestión, y --search-keys
, donde ponemos el parámetro de búsqueda, algún dato que identifique esa clave, como puede ser el nombre, el correo electrónico o más concretamente su identificador de clave ID_CLAVE:
|
|
De URL con wget
|
|
De esta forma descargamos la clave y lo pasamos a STDOUT
, para luego importarlo con gpg --import
Validez y firma de claves públicas
GnuPG utiliza un modelo de confianza que no requiere que quien la posee dé validez personalmente a cada clave que importe, pero algunas claves pueden necesitar esta validación personal.
La verificación se realiza comprobando la huella digital de la clave y firmando dicha clave, certificando su validez.
La huella digital se puede ver con la opción --fingerprint
|
|
Para certificarla hemos de editarla con la opción --edit-key
|
|
Ahí entraremos en una consola de GnuPG desde donde podemos lanzar fpr
para ver el fingerprint o huella dactilar de la clave.
|
|
La huella digital se verifica con quien posee la clave, en persona o por un medio feacientemente seguro.
Si la huella que ofrece es la misma que la clave, podemos estar seguro de la misma y se puede firmar para validarla con el comando sign
|
|
Una vez firmada, podemos comprobar el listado de firmas que lleva la clave con el comando check
|
|
Revocación de claves
Para revocar la clave, hay que tener un certificado de revocación de claves por si se nos olvida la contraseña. De esta manera, publicaremos rápidamente que está revocada.
El certificado de revocación se crea con la opción --gen-revoke
seguido del identificador de la clave.
A no ser que queramos copiar y pegar el texto de la terminal, podemos utilizar la opción --output
para crear dar un nombre y crear el archivo con el certificado:
|
|
En los motivos por los que solicitas el certificado puedes dar alguno o simplemente no especificar razón alguna.
Nos pedirá la contraseña.
Si queremos efectivamente revocar esa clave, usaremos el certificado importándolo a nuestro gpg con la opción --import
y enviando la clave de nuevo al servidor público donde lo hayamos subido:
|
|
Este certificado, al igual que todos sus datos, es importante mantenerlo a buen seguro. En este caso más porque podría comprometer su clave. Reproduzco el mensaje de aviso de gpg al crear el certificado:
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!
Servidores de claves
Algunos de los servidores de claves más utilizados:
- GNUPG, hkp://keys.gnupg.net
- RedIris, hkp://pgp.rediris.es
- MIT, hkp://pgp.mit.edu
- PGP, hkp://subkeys.pgp.net
Aquí podremos enviar la clave, consultarlas por línea de comandos y también por su web, vía https.
Encriptar y desencriptar datos o cifrar y descifrar documentos
Es importante que entendamos cómo funciona el sistema de clave pública y privada, para ello utilizaremos la metáfora de la caja fuerte.
La clave pública es como una caja fuerte. Cuando la persona remitente cifra un documento usando una clave pública, ese documento se pone en la caja fuerte, la caja se cierra y se bloquea. Solo la persona que posee la clave privada de esa clave pública puede recuperar el documento cifrado con esa clave pública.
Cuidado con esto: si quieres enviar un texto a una persona, lo encriptas con su clave pública y borras el documento original, pierdes el documento ya que solo la otra persona será capaz de desencriptar tu documento encriptado.
Por tanto, si quieres mantener también una copia encriptada, encríptalo contra tu clave pública también.
Cifrar
Para cifrar un documento usamos la opción --encrypt
, le damos una salida con la opción --output
y elegimos la clave con la opción --recipient
Ojo, --recipient
se usa una vez para cada clave destinataria:
|
|
Descifrar
Para descifrar usamos la opción --decrypt
y una salida con --output
|
|
Después de dar tu contraseña de la clave gpg, podrás descifrar el documento.
Cifrar con clave de cifrado simétrico
También es posible cifrar documentos sin la criptografía de clave pública con una clave de cifrado simétrico que cifre el documento con la opción –symmetric
|
|
La clave deriva de la contraseña dada en el momento de cifrar el documento y NUNCA debe ser igual que la que protege la clave privada.
También puedes utilizar los atajos de las opciones, como por ejemplo para encriptar un archivo:
|
|
Donde cada letra se corresponde con un atajo:
-e:
:--encrypt
-s
:--sign
-a
:--armor
Firmar documentos y verificar firmas
Se firman documentos para certificar su autenticidad o añadir una marca de tiempo. Se utiliza el mismo par público y privado de claves pero en una operación diferente a la de cifrado y descifrado:
- Se genera una firma con la clave privada de quien firma.
- La firma se verifica por medio de la clave pública correspondiente.
Con la opción --sign
se elige qué documento se quiere firmar y con la opción --output
la salida del documento firmado.
|
|
El documento se comprime antes de ser firmado y la salida se produce en formato binario.
Para comprobar la firma, utilizamos la opción --verify
y --decrypt
para verificar la firma y recuperar el documento original al mismo tiempo. Con la opción --output
damos salida a la opción verificación o descifrado:
|
|
Enlaces
- https://gnupg.org/
- http://ekaia.org/blog/2009/05/10/creating-new-gpgkey/
- http://keyring.debian.org/creating-key.html
- http://www.linuxveda.com/2015/03/21/tutorial-gpg-on-linux-encrypt-data/
- https://fedoraproject.org/wiki/Creating%5FGPG%5FKeys
- https://archive.fosdem.org/2018/schedule/event/easy%5Fgnupg/