PGP/GPG – Comunicaciones privadas usando criptografía asimétrica

PGP (Pretty Good Privacy) es un sistema de cifrado asimétrico usado para proteger la seguridad y privacidad de los datos. Su funcionamiento se basa en el uso de pares de llaves de cifrado: una llave pública y una privada. La llave pública es compartida con otros usuarios para que puedan cifrar los mensajes, mientras que la llave privada se mantiene en secreto y se usa para descifrar los datos. Esto asegura que solo los interlocutores son capaces de leer el contenido de sus conversaciones.

PGP también se usa para verificar la autenticidad e integridad de los datos mediante firmas digitales creadas a partir de la llave privada del remitente.

La implementación de software libre del estándar PGP más usada es GPG (GNU Privacy Guard).

Creación de llaves

Ejecuta la siguiente orden para generar un par de llaves:

$ gpg --full-generate-key

Cuando se te pregunte por el tipo de llave, selecciona la primera opción.

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)
(14) Existing key from card
Your selection? 1

Elige el tamaño que quieras para tu llave:

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

Especifica la el tiempo de expiración de la llave:

Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 1d

Finalmente especifica los detalles de identidad para la llave:

Real name: <nombre>
Email address: <email>
Comment: <comentario>
You selected this USER-ID:
"<nombre>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

A continuación se solicitará la contraseña que usarás para descifrar los mensajes cifrados con tu llave pública.

Gestión del llavero

El llavero de PGP es la base de datos que almacena las llaves públicas y privadas de un usuario.

Disponiendo de la huella digital de una llave pública, puedes obtener la llave de forma remota siempre que esté almacenada en un servidor de llaves:

$ gpg --keyserver <servidor> --recv-keys <huella-digital>

Teniendo una llave pública o privada en forma de archivo, puedes importarla a tu llavero usando -‐import:

$ gpg --import <archivo>

Puedes exportar tus llaves públicas y privadas usando -‐export y -‐export-secret-keys:

$ gpg --export --armor <huella-digital> > <archivo>
$ gpg --export-secret-keys <huella-digital> > <archivo>

La opción -‐armor muestra la llave en formato ASCII.

Usa -‐delete-keys y -‐delete-secret-keys para eliminar llaves públicas y privadas de tu llavero:

$ gpg --delete-keys <huella-digital>
$ gpg --delete-secret-keys <huella-digital>

Cifrado y descifrado de mensajes

Para cifrar un mensaje con una llave pública debes especificar un destinatario, un archivo de entrada (en texto plano) y el que será el archivo de salida (cifrado).

$ gpg --recipient <huella-digital-destinatario> --encrypt --output <archivo-salida> <archivo-entrada>

Para descifrar un mensaje, usa -‐decrypt:

$ gpg --decrypt <archivo>

Verificación y firmas digitales

Usa -‐sign para firmar un mensaje:

$ gpg --sign --output <archivo-salida> <archivo-entrada>

Usa -‐verify para verificar una firma:

$ gpg --verify <mensaje-firmado>

También puedes combinar ambos comandos con -‐encrypt y -‐decrypt respectivamente.

Aprende más sobre GPG en gnupg.org.