Variádico

Crear llaves GPG

7 de agosto de 2016

Si eres programador, tarde o temprano vas a tener que lidiar con GPG, para verificar algo que descargaste, para firmar una confirmación en Git, o para cifrar contraseñas o secretos. Para los que no son programadores, GPG también puede ser útil si quieren darle seguridad y privacidad a algunos datos.

Aquí está un guía para generar llaves criptográficas con gpg. No es la configuración más segura del mundo, pero debería ser suficiente para empezar.

Después de crear llaves, puedes leer el segundo artículo para usarlas.

Instalar GPG

En macOS, puedes usar Homebrew.

brew install gpg

Quizá también deberías de saber, que GPG viene en 3 diferentes sabores.

Las llaves que hagas con una versión deberían de funcionar con cualquier otra versión de GPG. GPG v2 usa algo llamado gpg-agent, mientras GPG v1 solo usa gpg. GPG v2 requiere muchas más dependencias para compilar.

Modificar ajustes por defecto

Antes de crear llaves, deberíamos de cambiar algunos ajustes para incrementar la seguridad de este proceso. Añade esto a ~/.gnupg/gpg.conf.

charset utf-8
keyid-format 0xlong
with-fingerprint
personal-digest-preferences SHA512
cert-digest-algo SHA512
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed

Crear llaves

Este comando te va ir guiando para crear tu par de llaves.

gpg --gen-key

Tipo

¡Fácil! DSA ya no se considera seguro. Mejor, elige RSA.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 4

Longitud

Entre más larga, más segura.

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096

Caducidad

No tengas miedo de establecer una caducidad. Al cabo, si tienes la llave secreta, siempre puedes extender la fecha límite—aún después de que las llaves se caduquen. Una vez caducadas, no podrás cifrar archivos, pero todavía podrás descifrar y verificar firmas.

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at Tue Aug  7 00:06:43 2018 PDT
Is this correct? (y/N) y

Información de usuario

La información que introduzcas aquí será incluida con tu llaves. No se requiere escribir comentario. Aquí lo hago nada más para dar el ejemplo.

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

	Real name: Jaime Piña
	Email address: micorreo@inter.net
	Comment: Hola mundo
	You are using the `utf-8' character set.
	You selected this USER-ID:
	    "Jaime Piña (Hola mundo) <micorreo@inter.net>"

		Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

Contraseña

Requires una contraseña para proteger tu llave privada. Escoge una buena.

Enter passphrase:
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++
+++++
gpg: key 237B3753 marked as ultimately trusted
public and secret key created and signed.

Resumen de llave

Este es el resumen de la llave que acabamos de crear.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
pub   4096R/0xEF171D3DEE10905B 2016-08-07 [expires: 2018-08-07]
      Key fingerprint = 3F22 40B9 BFD3 2DF1 AA29  21A4 CAF1 0B9E 237B 3753
	  uid                  Jaime Piña (Hola mundo) <micorreo@inter.net>
	  sub   4096R/0xE49DB83697210C1B 2016-08-07 [expires: 2018-08-07]

Aquí podemos ver la información que guardó GPG.

En el futuro es posible que veas otras abreviaciones. Aquí los significados.

¿Qué es una sub-llave?

Por defecto, GPG 1.4.20 crea una llave primaria, o maestra, y también una llave secundaria, o sub-llave. El propósito de esto es que guardes la llave primaria en un lugar seguro y uses la llave secundaria para casi todo. Así si te roban tu compu, no perdiste tu llave maestra. Solo una sub-llave, y puedes generar otra.

Cada llave tiene ciertos usos, o permisos. Estos son.

Por defecto, --gen-key crea una llave primaria y una llave secundaria.

Podemos ver estos permisos con la opción --edit-key.

$ gpg --edit-key 0xD6CA816DAF18D86C
pub  2048R/0xD6CA816DAF18D86C  created: 2016-08-09  expires: never       usage: SC
                               trust: ultimate      validity: ultimate
sub  2048R/0x1A88578EA462E60C  created: 2016-08-09  expires: never       usage: E
gpg> quit

Esto muestra lo siguiente.

Editar detalles de la llave

Si quieres cambiar o ver la información de una llave, puedes explorar más con este comando.

gpg --edit-key 0xD6CA816DAF18D86C

Allí podrás añadir usuarios, cambiar tu contraseña, y más. Para más información usa el comando help. Después de hacer tus cambios, los puedes guardar con el comando save. Para salir introduce quit.

Ver llavero

Si quieres ver todas las llaves públicas en tu llavero, usa este comando.

gpg --list-keys

Para ver las llaves privadas, usa esto.

gpg --list-secret-keys

Exportar llaves

Para poder compartir tu llave pública, puedes exportarla con este comando. Esto crea un archivo binario.

gpg --export micorreo@inter.net > llave_pub.gpg

Si prefieres el archivo en formato ASCII (.asc), usa esto.

gpg --armor --export micorreo@inter.net > llave_pub.asc

Exportar llave secreta

Si quieres exportar la llave privada, puedes usar este comando.

gpg --export-secret-keys micorreo@inter.net > llave_sec.gpg

O en ASCII, así.

gpg --armor --export-secret-keys micorreo@inter.net > llave_sec.asc

⚠️ ¡PRECAUCIÓN! Protege tu llave secreta muy bien. Si la pierdes, todo se va al carajo. ⚠️

Importar llaves

Si la persona subió su llave pública a un servidor y sabes el identificador de la llave, puedes usar este comando.

gpg --recv-keys 0xEF171D3DEE10905B

Si tienes un archivo con la llave pública o privada, puedes importarla así.

gpg --import llave_pub.gpg

Para establecer una llave por defecto, edita la opción default-key en ~/.gnupg/gpg.conf.

Eliminar llaves

Puedes eliminar una llave privada así.

gpg --delete-secret-keys 0xEF171D3DEE10905B

O si nada más quieres borrar la parte pública, lo haces así.

gpg --delete-keys 0xEF171D3DEE10905B

Muy largo; no leí

Copia y pega esto en ~/.gnupg/gpg.conf.

charset utf-8
keyid-format 0xlong
with-fingerprint
personal-digest-preferences SHA512
cert-digest-algo SHA512
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed

Crea un par de llaves 4096-bit RSA, que se caduquen en 2 años, con gpg --gen-key.