deustux

Qué es PGP, por qué importa y cómo usarlo

gnupg.png

PGP (Pretty Good Privacy) es una herramienta de cifrado y firma digital que protege la seguridad y autenticidad de los datos. Permite que solo el destinatario pueda leer un mensaje y verificar que proviene del remitente legítimo.

No se limita a correos: PGP también se usa para firmar scripts, binarios y paquetes (gestores como apt, pacman o pkg lo usan para validar autenticidad), verificar descargas y demostrar autoría de archivos.

Además, permite cifrar y descifrar mensajes o archivos, garantizando confidencialidad, integridad y autenticidad en todo el sistema.

En esta guía veremos cómo generar claves desde la terminal, cifrar y firmar mensajes y archivos, y cómo integrarlo en Thunderbird.


Claves asimétricas y cómo funciona PGP

PGP se basa en criptografía de clave pública (asimétrica), que utiliza dos claves relacionadas:

pgpuso.jpeg

Funcionamiento práctico

  1. Cifrado: el remitente usa la clave pública del destinatario; solo la clave privada del destinatario puede descifrarlo.
  2. Firma digital: el remitente usa su clave privada; cualquiera con la clave pública correspondiente puede verificar la autoría y que no se ha alterado el contenido.

Este sistema garantiza confidencialidad, integridad y autenticidad, y es la base de todos los usos de PGP: correos, archivos, paquetes y descargas.


GNUPG

GnuPG es el agente de PGP que se utiliza en Linux para gestionar cifrado y firmas digitales. Incluye gpg-agent, que mantiene tus claves privadas en memoria y las pone a disposición del sistema, de modo que otras aplicaciones o APIs puedan utilizarlas sin solicitar la contraseña cada vez.

Cuando el agente necesita acceder a una clave privada, utiliza Pinentry para pedir la contraseña de forma segura. Existen varias versiones de Pinentry: para terminal, para entornos GTK o integradas en distintos escritorios, según el entorno en el que trabajes. Con esto listo, ya puedes empezar a crear y gestionar tus claves PGP de forma segura en Linux.

GnuPG suele venir preinstalado en la mayoría de distribuciones Linux, y en los casos en que no lo esté, se puede instalar fácilmente desde los repositorios oficiales con gestores como apt, pacman, dnf o pkg.


Crear un par de claves PGP

Una vez teniendo el paquete GnuPG instalado contaremos de gpg(1) que es el propio programa que usaremos para gestionar todo lo que tenga que ver con PGP.

Para crear las claves será tan sencillo como el proceso que van a ver a continuacion:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
~ [void] % gpg --full-gen-key --expert
gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH
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 and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (sólo firmar)
  (11) ECC (set your own capabilities)
  (13) Existing key
  (14) Existing key from card
Su elección: 9
Seleccione el tipo de curva elíptica deseado:
   (1) Curve 25519 *default*
   (2) Curve 448
   (3) NIST P-256
   (4) NIST P-384
   (5) NIST P-521
   (6) Brainpool P-256
   (7) Brainpool P-384
   (8) Brainpool P-512
   (9) secp256k1
Su elección: 1
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: Prueba
Dirección de correo electrónico: prueba@correo.com
Comentario:                                         
Ha seleccionado este ID de usuario:
    "Prueba <prueba@correo.com>"

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V

gpg: certificado de revocación guardado como '/home/anon/.gnupg/openpgp-revocs.d/9CAB288DF.rev'
claves pública y secreta creadas y firmadas.

pub   ed25519 2025-12-24 [SC]
      9CAB288DF126E2410B07A6473D5D08389C01DF6A
uid                      Prueba <prueba@correo.com>
sub   cv25519 2025-12-24 [E]

Luego te pedirá la contraseña por pinentry:

Capturadepantalla_2025-12-24_20-17-15.png

Hemos usado ECC con Curve25519 como tipo de clave porque es compatible con la mayoría de sistemas y clientes PGP. Aunque Curve448 ofrece mayor seguridad teórica, aún no tiene tanta compatibilidad y puede dar problemas en algunas herramientas, por eso Curve25519 suele ser la elección práctica para usuarios normales y avanzados.

Hemos elegido que la clave nunca caduque porque, en la práctica, esto facilita mucho la gestión y evita tener que renovar constantemente tus claves, siempre que la protejas bien y no la pierdas.

Con esto ya tienes tu par de claves PGP listo: la clave privada se queda segura bajo tu contraseña y la pública se puede compartir para que otros te envíen mensajes cifrados o verifiquen tus firmas.


Listar claves PGP

Antes de cifrar o firmar, conviene ver qué claves tenemos en el llavero:

1
gpg --list-keys

stdout:

1
2
3
4
pub   ed25519 2025-12-24 [SC]
      9CAB288DF126E2410B07A6473D5D08389C01DF6A
uid        [  absoluta ] Prueba <prueba@correo.com>
sub   cv25519 2025-12-24 [E]

Aquí vemos clave pública (pub), ID, usuario y subclave de cifrado (sub).


Importar clave pública

Para cifrar mensajes necesitamos la clave pública del destinatario. Si no la tenemos, la importamos:

1
gpg --import clave_publica.asc

Por defecto la salida la toma STDIN asi que podriamos jugar con tuberias y hacer algo como

1
curl https://pub.deustux.xyz/contacto.asc | gpg --import

Tras importar, conviene verificar la huella para asegurarnos de que pertenece a quien dice:

1
gpg --fingerprint sergio@noxmail.dev

stdout:

1
2
3
4
pub   ed25519 2025-05-06 [SC]
      F3E3 4856 2327 505A 39E3  C180 718B 523A 768F 4F13
uid        [  absoluta ] Sergio <sergio@noxmail.dev>
sub   cv25519 2025-05-06 [E]

Esto evita que cifremos para un impostor.


Exportar claves

Si quieres compartir tu clave pública:

1
gpg --export -a prueba@correo.com > mi_clave_publica.asc

También se puede por nombre o ID:

1
2
gpg --export -a "Prueba" > mi_clave_publica.asc
gpg --export -a 9CAB288DF126E2410B07A6473D5D08389C01DF6A > mi_clave_publica.asc

Para exportar la clave privada (solo para backup o mover a otra máquina, nunca compartirla):

1
gpg --export-secret-keys -a "prueba@correo.com" > mi_clave_privada.asc

⚠️ La clave privada nunca se comparte. Solo la pública.
✅ Flujo natural: generar → listar → importar/verificar → exportar → usar para cifrar o firmar.


Cifrar archivos con PGP

Para cifrar un archivo necesitamos la clave pública del destinatario. Supongamos que queremos mandar documento.txt a prueba@correo.com:

1
gpg --encrypt --recipient prueba@correo.com documento.txt

Esto generará un archivo llamado documento.txt.gpg que solo el usuario “prueba@correo” podrá descifrar con su clave privada.

También puedes poner varios destinatarios de la siguiente manera:

1
gpg --encrypt --recipient prueba@correo.com --recipient prueba@correo.com documento.txt

Esto genera un solo archivo cifrado, pero cualquiera que tenga su clave privada correspondiente podrá descifrarlo.

Puedes añadir tantos destinatarios como quieras, cada uno con su --recipient.

Lógicamente, nada te impide cifrar el archivo para ti mismo usando tu propia clave pública.


Desencriptar archivos

Para leer un archivo cifrado necesitas tu clave privada. GnuPG es inteligente y detecta automáticamente qué clave privada usar para descifrarlo. Por ejemplo, con documento.txt.gpg:

Con documento.txt.gpg sería:

1
gpg --decrypt documento.txt.gpg

Esto mostrará el contenido por terminal. Si quieres guardarlo en un archivo:

1
gpg --output documento.txt --decrypt documento.txt.gpg

Firmar archivos y mensajes con PGP

Firmar un archivo permite demostrar que tú eres el autor y que el contenido no ha sido modificado. Se usan tus claves privadas para esto, y cualquiera con tu clave pública puede verificar la firma.

Firmar un archivo

Para crear una firma separada del archivo:

1
2

gpg --sign documento.txt

Esto genera un archivo documento.txt.gpg que contiene el archivo y la firma, o si quieres solo la firma por separado:

1
2

gpg --detach-sign documento.txt

Esto crea documento.txt.sig, que se puede enviar junto con el archivo original.

Verificar una firma

Para verificar que un archivo fue firmado por alguien y no fue modificado:

1
2

gpg --verify documento.txt.sig documento.txt

Si todo está correcto, GnuPG te dirá que la firma es válida y a quién pertenece la clave que la firmó.

Firmar y cifrar al mismo tiempo

También puedes hacer ambas cosas en un solo paso: cifrar el archivo y firmarlo:

1
2

gpg --encrypt --sign --recipient prueba@correo.com documento.txt

Esto genera un archivo que solo el destinatario podrá descifrar y verifica que tú lo firmaste.


Instalación en Thunderbird

PGP es un estándar muy extendido, así que muchísimos clientes de correo lo soportan, tanto de escritorio como basados en web o incluso apps tipo Electron. Esto significa que, en general, puedes enviar y recibir correos cifrados y firmados en casi cualquier plataforma que uses.

En el caso de Thunderbird, hace unos años necesitabas Enigmail para manejar GPG, pero desde Thunderbird 78 ya está integrado por defecto. Esto quiere decir que no hace falta instalar nada adicional: con GnuPG instalado en tu sistema, Thunderbird detecta tus claves y permite cifrar y firmar correos directamente.

Para activarlo y configurarlo, solo tendrás que seguir las imágenes a continuación, que muestran paso a paso cómo habilitar la funcionalidad y usar tus claves dentro del cliente.

Capturadepantalla_2025-12-24_21-46-40.png Capturadepantalla_2025-12-24_21-48-23.png Capturadepantalla_2025-12-24_21-48-46.png

Cuando vayas a redactar un correo en Thunderbird, verás que ahora aparece la opción de PGP en la ventana de redacción. Podrás:

Todo esto se hace de manera transparente: Thunderbird usa GnuPG detrás de escena, así que solo tienes que marcar las casillas de cifrado o firma y enviar.

Básicamente, tu correo ahora es seguro y verificable sin pasos extra complicados.

#linux #pgp #freebsd