Introducción

Buenas, en esta práctica vamos a hacer una serie de ejercicios para cifrar ficheros utilizando cifrado asimétrico utilizando el programa gpg y openssl.

TAREA 1: Generación de claves

Los algoritmos de cifrado asimétrico utilizan dos claves para el cifrado y descifrado de mensajes. Cada persona involucrada (receptor y emisor) debe disponer, por tanto, de una pareja de claves pública y privada. Para generar nuestra pareja de claves con gpg utilizamos la opción –gen-key:

Para esta práctica no es necesario que indiquemos frase de paso en la generación de las claves (al menos para la clave pública).

Generar claves pública y privada

Para generar un par de claves pública y privada:

gpg --gen-key

Para poder generarlas modificando su fecha de validez:

gpg --full-generate-key

Listamos las claves que tenemos en nuestra máquina

Para poder listar las claves públicas que tenemos en nuestra máquina:

gpg -k

Listamos las claves privadas

Para poder listar las claves privadas que tenemos en nuestra máquina:

gpg --list-secret-keys

TAREA 2: Importar/exportar clave pública

Para enviar archivos cifrados a otras personas, necesitamos disponer de sus claves públicas. De la misma manera, si queremos que cierta persona pueda enviarnos datos cifrados, ésta necesita conocer nuestra clave pública. Para ello, podemos hacérsela llegar por email por ejemplo. Cuando recibamos una clave pública de otra persona, ésta deberemos incluirla en nuestro keyring o anillo de claves, que es el lugar donde se almacenan todas las claves públicas de las que disponemos.

Exportar clave pública

Exportamos la clave pública en formato ASCII:

gpg --export -a "Alejandro Cabezas Barea" > AlejandroCB.asc

Importamos clave pública

Importamos una clave pública de un compañero:

gpg --import juanluis_millan.asc

Comprobamos que se han incluido correctamente

gpg -k
      /home/arya/.gnupg/pubring.kbx
      -----------------------------
      pub   rsa3072 2019-10-07 [SC] [expires: 2021-10-06]
            9CB2265F6EE2F2148BA2D4E96536BA4F91A44CBF
      uid           [ unknown] Juan Luis Millan Hidalgo <juanluismillanhidalgo@gmail.com>
      sub   rsa3072 2019-10-07 [E] [expires: 2021-10-06]

      pub   rsa1024 2019-10-14 [SC] [expires: 2021-10-13]
            D58A310B0E6085C2BE92E7E360D33503FECA5387
      uid           [ultimate] Alejandro Cabezas Barea <alejandrocabezab@gmail.com>
      sub   rsa1024 2019-10-14 [E] [expires: 2021-10-13]

TAREA 3: Cifrado asimétrico con claves públicas

Tras realizar el ejercicio anterior, podemos enviar ya documentos cifrados utilizando la clave pública de los destinatarios del mensaje.

Ciframos un fichero

Vamos a cifrar un fichero para que lo pueda descifrar únicamente nuestro compañero:

gpg -e -u "Alejandro Cabezas Barea" -r "Juan Luis Millan Hidalgo" ficheroAC.txt

Descifrando un fichero

Desciframos un fichero el cual nuestro compañero ha cifrado para nosotros:

gpg -d fichero.txt.gpg 
    
gpg: encrypted with 1024-bit RSA key, ID 9ED9A1A8EA4FB791, created 2019-10-14
          "Alejandro Cabezas Barea <alejandrocabezab@gmail.com>" 
Este es un mensaje de Juan Luis Millan Hidalgo

Eliminar claves

Para eliminar una clave pública:

gpg --delete-key "Nombre de Usuario o identificador de la clave"

Para eliminar una clave privada:

gpg --delete-secret-keys "Nombre de Usuario o identificador de la clave"

TAREA 4: Exportar clave a un servidor público de claves PGP

Para distribuir las claves públicas es mucho más habitual utilizar un servidor específico para distribuirlas, que permite a los clientes añadir las claves públicas a sus anillos de forma mucho más sencilla.

Generamos clave de revocación

En el caso que haya algún problema y queramos revocar la clave, haremos una clave de revocación, para ello:

gpg --gen-revoke "Alejandro Cabezas Barea"

Exportar clave pública a servidor

Nosotros la vamos a exportar al servidor de gnupg, para ello:

gpg --keyserver keys.gnupg.net --send-key D58A310B0E6085C2BE92E7E360D33503FECA5387

Añadir clave desde servidor

Para añadir una clave pública desde el servidor haremos lo siguiente:

gpg --recv-keys --keyserver pgp.rediris.es 9CB2265F6EE2F2148BA2D4E96536BA4F91A44CBF

TAREA 5: Cifrado asimétrico con openssl

En esta ocasión vamos a cifrar nuestros ficheros de forma asimétrica utilizando la herramienta openssl.

Generamos un par de claves

Para generar un par de claves ejecutamos la siguiente instrucción:

openssl genrsa -aes128 -out key.pem 2048

Enviar clave a un compañero

Para poder enviar la clave pública a un compañero tendremos que crearla de la siguiente forma para que cada clave esté en un archivo:

openssl rsa -in key.pem -out key.pub.pem -outform PEM -pubout

Cifrando un fichero

Para cifrar un fichero:

openssl rsautl -pubin -encrypt -in pruebassl.txt -out pruebassl.enc -inkey juanlu.pub.pem

Para descifrar un fichero

Suponiendo que nuestro compañero nos ha enviado un fichero cifrado:

openssl rsautl -decrypt -inkey ale.pri.pem -in holaopenssl.enc -out holaopenssldes.dec