Como proteger tus comunicaciones mediante criptografía asimétrica

Como proteger tus comunicaciones mediante criptografía asimétrica

💡
La criptografía nos permite cifrar un mensaje de forma que solo la persona autorizada podría descifrarlo. La criptografía asimétrica nos permite hacer esto mediante el uso de 2 claves: una pública y una privada.

Supongamos que Alicia quiere enviarle un mensaje a Juan. Primero, Juan generará un par de claves y le envía su clave pública a Alicia (esta clave puede viajar de forma pública y por canales inseguros, ya que no es crítica). Alicia usa la clave pública de Juan para cifrar un mensaje y enviárselo. Entonces Juan recibe el mensaje y con su clave privada puede descifrarlo y leerlo. Aunque un tercero interceptara las comunicaciones y lograra obtener el mensaje cifrado o incluso la clave pública, no podría descifrarlo sin la clave privada que solo posee Juan.

Piénsalo como que la clave pública es un candado, y la clave privada es la llave que lo abre: Juan le da el candado a Alicia, Alicia esconde el mensaje en una caja y lo cierra con el candado, luego Juan es el único que puede abrirlo.


PGP y GPG

PGP (Pretty Good Privacy) fue creado en 1991 como un programa de cifrado de clave pública para proteger comunicaciones (inicialmente correo electrónico). PGP se hizo muy popular al ser de las primeras herramientas de criptografía disponibles al público general. Posteriormente se convirtió en un producto comercial, sin embargo sentó las bases del estándar OpenGPG, una especificación abierta para garantizar interoperabilidad de sistemas de cifrado de clave pública.

GPG (GNU Privacy Guard) es la implementación libre del estándar OpenGPG. Es una reimplementación de PGP completamente de código abierto, mantenida por la comunidad del proyecto GNU. GPG ofrece la misma funcionalidad, con mejoras, soportando múltiples algoritmos de cifrado modernos (RSA, ElGamal, AES, 3DES, Twofish, SHA-1, SHA-256…).

En resumen: PGP y GPG hacen lo mismo (cifrado asimétrico y firmas digitales). La diferencia es histórica y de licencias.

Instalación y configuración

Primero lo instalamos:
$ apt install gnupg -y   # Linux (Debian/Ubuntu)
$ brew install gnupg     # macOS
Crear un par de claves:
$ gpg --full-generate-key

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
...
Your selection? 1
Elegir tamaño (recomendado: 4096 bits):
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Elegir expiración:
Key is valid for? (0) 1w
Introducir nombre y correo:
Real name: Jose Alberto
Email address: josealberto@gmail.com
Comment: comentario
Listar claves:
$ gpg --list-keys

Distribución de clave

Ahora veremos las formas de exportación y distribución de nuestras claves una vez creadas.

Ejemplo de exportación:
$ gpg --export --armor <fingerprint> > clave.asc
$ gpg --export-secret-keys <fingerprint> > privada.asc
Subir clave a un servidor:
$ gpg --keyserver keys.openpgp.org --send-keys CLAVE_ID
Recibir clave:
$ gpg --keyserver keys.openpgp.org --recv-keys CLAVE_ID
Importar clave pública de un amigo:
$ gpg --import colega.asc
Cifrar y descifrar un documento:
$ gpg --output doc.gpg --encrypt --recipient colega@ejemplo.com documento
$ gpg --decrypt doc.gpg

Firma digital

Firmar:
$ gpg --output doc.gpg --sign documento
Firma separada en ASCII:
$ gpg --output aviso.txt --clearsign aviso.txt
Verificar:
$ gpg --verify aviso.txt