Cifrado asimétrico con GPG en Linux – Tutorial con ejemplos

En un post anterior vimos cómo usar gpg en Linux para cifrar datos, pero utilizamos un cifrado simétrico.

Hoy, en cambio, vamos a cifrar de manera asimétrica usando GPG. Veremos cómo:

  • Generar un par de claves públicas y privadas
  • Exportar la clave pública para que otras personas puedan cifrar archivos con nuestra clave y solo nosotros podamos descifrarlos
  • Importar clave pública de otra persona y cifrar datos con la misma
  • Desencriptar un archivo con nuestra clave privada

Nota: voy a usar la palabra encriptar y cifrar como sinónimos, así como desencriptar y descifrar.

Generar clave pública y privada

Para generar un par de claves ejecuta el siguiente comando en una terminal:

gpg --full-generate-key

Como en la imagen:

1 – Generar claves con GPG

Al ejecutar el comando aparecerá un asistente. Puedes ver mis elecciones resaltadas.

En el primer caso selecciono 1, RSA y RSA

Quiero que la longitud de mi clave sea de 4096 bits

La validez de la clave es de 20 años (20y); si no se desea que caduque se escribe un 0. También son válidos los valores como 50 (50 días), 53w (53 semanas) 15m (15 meses), etcétera

En el apartado del identificador hay que poner datos reales o que vayamos a recordar. Lo más importante es el correo electrónico, pues así nos van a identificar los demás usuarios cuando importen nuestra clave.

Después pregunta si todo está bien, en caso de que sí, escribimos V. Si queremos cambiar el nombre escribimos N, y así por cada opción.

En uno de estos paso nos pedirá la frase de paso o passphrase. Esa es la contraseña que vas a usar para desencriptar, asegúrate de que sea totalmente segura, no la olvides y no la compartas con nadie.

Entropía

Como la generación de la clave debe ser totalmente aleatoria, gpg va a obtener datos realmente aleatorios como la temperatura del CPU o la velocidad del disco; es decir, que no provengan del tiempo o de algo que pueda ser calculado más tarde.

Por eso es que se nos pide hacer acciones mientras se genera la clave, así que debemos abrir otra terminal, navegar en la web un poco, eliminar algunos archivos, etcétera.

Cuando haya suficiente entropía para la longitud de la clave que seleccionamos, las clave serán generadas:

2 – Terminando de generar clave y entropía

No te preocupes, las claves se guardaron automáticamente.

Nota: recuerda que tu clave privada, como su nombre lo dice, es privada, y no debes compartirla con nadie ni exportarla, al menos que vayas a mudarte a otra computadora.

Exportar la clave pública

Ya tenemos nuestro par de claves y ahora queremos que nuestros amigos nos envíen archivos y datos cifrados con la misma, así que, ¿cómo la exportamos?

Muy fácil. Ejecuta el siguiente comando:

gpg -a --export contacto@parzibyte.me > parzibyte.gpg.asc

Obviamente cambiando tus datos y tu correo. Te explico el comando…

La opción -a es para que la salida sea ASCII, no en formato binario. La opción --export es para exportar, y le indicamos el correo o identificador del dueño de la clave pública.

Después redireccionamos la salida a un archivo llamado parzibyte.gpg.asc cuyo contenido podemos ver y compartir libremente.

3 – Exportar clave pública en formato ascii

Aquí dejo mi clave pública por si quieres importarla (recuerda usarla antes del 2039):

Con esta clave, cualquier persona puede cifrar un documento o archivo (abajo veremos cómo) y enviarnos el resultado, el cual solo nosotros (poseedores de la clave privada) podemos desencriptar.

Importar clave de otro usuario

Si otro usuario nos envía su clave pública (o si queremos mostrarle a alguien cómo se importa nuestra clave que acabamos de exportar) la manera de importarla es fácil.

gpg --import nombreDeArchivo

En mi caso:

gpg --import aldair.gpg.key.asc

Si tú vas a importar la clave que acabo de exportar:

gpg --import parzibyte.gpg.asc

Se debe mostrar una confirmación:

4 – Importar clave de otro usuario

Ahora podemos cifrar mensajes con la clave pública de ese usuario, y solo él podrá descifrarlos.

Cifrar archivo de manera asimétrica

Ya sea que otro usuario va a cifrar un archivo con nuestra clave, o nosotros con la que acabamos de exportar, el comando es:

gpg -a -r correo.del.destinatario@asd.com --encrypt nombreDelArchivo

En mi caso es:

gpg -a -r alda@hotmail.com --encrypt secreto.txt

De nuevo, si lo estás haciendo con mi clave, sería:

gpg -a -r contacto@parzibyte.me --encrypt tuArchivo

GPG va a pedir confirmación por la identidad del usuario.

Te explico el comando. La opción -a es para que la salida sea en ascii, si quieres puedes omitir ese parámetro. Y la -r es del destinatario, que en este caso es el que tiene su correo en alda@hotmail.com

Finalmente --encrypt es para encriptar un archivo.

5 – Encriptar archivo con clave pública externa

Por cierto, se creará un archivo encriptado con el mismo nombre pero distinta extensión. Ese archivo se lo puedes enviar al dueño de la clave pública y solo él podrá descifrarlo.

Cifrar archivo con nuestra propia clave

Esto tiene poco sentido, pero si no tenemos con quién probar viene de maravilla. Podemos cifrar con nuestra propia clave así:

gpg -a -r tu_correo@dominio.com --encrypt nombreDeArchivo

Es decir, cifras con tu propia clave que registraste.

6 – Encriptar mensaje con nuestra clave pública

En la imagen puedes ver una demostración. Primero creo un archivo de texto y luego lo cifro (en realidad se pueden cifrar todo tipo de archivos, no solo los de texto)

Eso va a crear un archivo con el mismo nombre pero con extensión asc. Y al mostrarlo vemos los datos cifrados que solamente el poseedor de la clave privada podrá ver.

Descifrar archivos

Para terminar, veamos cómo se descifran los archivos. Recuerda que solo podemos descifrar aquellos archivos que fueron cifrados por nuestra clave pública.

El comando es:

gpg -a --decrypt archivoEncriptado > archivoDesencriptado

En mi caso voy a descifrar el mismo que cifré con mi clave:

gpg -a --decrypt secreto.txt.asc > desencriptado.txt

En un paso de estos el programa va a solicitar la frase de paso que pusimos cuando generamos el par de claves.

La explicación del comando es casi la misma. La opción -a es por si se cifró con ascii. Después hacemos un redireccionamiento.

7 – Desencriptar archivo con nuestra clave privada

En la imagen se observa que pude desencriptar el archivo exitosamente.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

3 comentarios en “Cifrado asimétrico con GPG en Linux – Tutorial con ejemplos”

  1. Hola genial el tutorial pero una consulta hay foma de evitar la frase de paso? tanto en generarla como en descriptar entiendo que le da el plus de seguridad pero no le veo sentido.
    si en caso deseo encriptar y desencriptar sin esa frase de paso? que recomendación sugiere?
    Gracias saludos!

  2. Pingback: Un ransomware para Linux usando GPG - Parzibyte's blog

Dejar un comentario