Cifrado asimétrico con gpg y openssl.
En esta práctica vamos a cifrar ficheros utilizando cifrado asimétrico utilizando el programa gpg. Puedes encontrar el resumen de comando en esta chuleta o buscar información en internet.
Creado en December 2, 2022.
Tabla de Contenido.
Tarea 1: Generación de claves
Genera un par de claves (pública y privada). ¿En que directorio se guarda las claves de un usuario?
Para generar un par de claves, usaremos el siguiente comando.
$ gpg --gen-key
Las claves públicas y privadas se guardan en ~/.gnupg
Lista las claves públicas que tienes en tu almacén de claves. Explica los distintos datos que nos muestra. ¿Cómo deberías haber generado las claves para indicar, por ejemplo, que tenga un 1 mes de validez?
El comando usado para listar las claves es:
$ gpg --list-keys
Para indicar el tiempo de validez al crear el par de claves, usamos el comando:
$ gpg --full-gen-key
Lista las claves privadas de tu almacén de claves.
El comando usado para listar las claves privadas es:
$ gpg --list-secret-keys
Tarea 2: Importar / exportar clave pública
Exporta tu clave pública en formato ASCII y guardalo en un archivo nombre_apellido.asc y envíalo al compañero con el que vas a hacer esta práctica.
El comando para generar el archivo con la clave pública en formato ASCII es el siguiente:
$ gpg --armor --output alejandro_montes.asc --export aaleemd11@gmail.com
Le he enviado mi clave pública a mi compañero Juan Jesús.
Importa las claves públicas recibidas de vuestro compañero.
El comando para importar la clave pública de Juan Jesús es el siguiente:
Comprueba que las claves se han incluido correctamente en vuestro keyring.
Muestro mi anillo de claves y se ve que la clave de Juan Jesús está importada correctamente:
Tarea 3: Cifrado asimétrico con claves públicas
Cifraremos un archivo cualquiera y lo remitiremos por email a uno de nuestros compañeros que nos proporcionó su clave pública.
Ciframos un archivo de ejemplo y se lo envío a Iván.
gpg --encrypt --recipient githubemail1asir@gmail.com para_juanjesus.txt
Nuestro compañero, a su vez, nos remitirá un archivo cifrado para que nosotros lo descifremos.
El comando usado para desifrar el archivo que nos ha enviado nuestro compañero es el siguiente:
gpg --decrypt criptoarchivo.txt.gpg
Tanto nosotros como nuestro compañero comprobaremos que hemos podido descifrar los mensajes recibidos respectivamente.
Nuestro compañero también ha descifrado el archivo correctamente.
Por último, enviaremos el documento cifrado a alguien que no estaba en la lista de destinatarios y comprobaremos que este usuario no podrá descifrar este archivo.
No tengo captura pero lo he probado y mi compañero no podía visualizar el contenido ni desencriptarlo.
Para terminar, indica los comandos necesarios para borrar las claves públicas y privadas que posees.
gpg --delete-secret-key "Alejandro Montes Delgado"
Tarea 4: Exportar clave a un servidor público de claves PGP
Genera la clave de revocación de tu clave pública para utilizarla en caso de que haya problemas.
Para crear una clave de rovación usamos el siguiente comando:
gpg --gen-revoke 0549F57086A3E680F1DD7F7DB99701ED0FAD4CEF
Exporta tu clave pública al servidor pgp.rediris.es
He usado otro servidor de claves públicas debido a que rediris está caido.
gpg --keyserver pgp.mit.edu --send-keys 0549F57086A3E680F1DD7F7DB99701ED0FAD4CEF
Como podemos ver se ha subido correctamente.
Borra la clave pública de alguno de tus compañeros de clase e impórtala ahora del servidor público de rediris.
Borro la clave pública de mi compañero:
gpg --delete-key "Juan Jesus"
Para importar la clave de Juan Jesús usamos el siguiente comando:
gpg --keyserver pgp.rediris.es --recv-keys 63DE4D1C7A7D69E8BB02F2F60D9A9FF1B5EE9093
Da error pero porque no funciona correctamente rediris.
Tarea 5: Cifrado asimétrico con openssl
Genera un par de claves (pública y privada).
Para generar el par de claves, uso el siguiente comando:
Extraemos la clave pública y la insertamos en un fichero con el siguiente comando:
openssl rsa -in alejandro-montes-ssl.pem -pubout > alejandro-montes-ssl.pub.pem
Envía tu clave pública a un compañero.
Le he enviado mi clave a Juanje y él me ha enviado la suya.
Utilizando la clave pública cifra un fichero de texto y envíalo a tu compañero.
Este es el fichero que yo he cifrado:
Este es el fichero que ha encriptado Juanje
Tu compañero te ha mandado un fichero cifrado, muestra el proceso para el descifrado.
Para descifrarlo usamos el siguiente comando:
openssl rsautl -decrypt -inkey alejandro-montes-ssl.pem -in criptoarchivossl.txt.enc -out criptoarchivossl.txt
Mi compañero Juanje también ha descifrado el mío correctamente.
Documento realizado por:
✒️ Alejandro Montes Delgado - 2º ASIR
Siguiente post
Post anterior.