Cifrado asimétrico con gpg y openssl

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?

  • Al generar las claves nos pedirá: - Nombre. - Apellidos. - Correo electrónico.

  • El comando con el que generaremos la clave es:

        gpg --gen-key
        
        gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.

**Nota**: Usa "gpg --full-generate-key" para el diálogo completo de generación de clave.

GnuPG debe construir un ID de usuario para identificar su clave.

        Nombre y apellidos: Maria Jesus Alloza
        Dirección de correo electrónico: mariajesus.alloza@outlook.es
        Ha seleccionado este ID de usuario:
            "Maria Jesus Alloza <mariajesus.alloza@outlook.es>"

        ¿Cambia (N)ombre, (D)irección o (V)ale/(S)alir? V
        Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
        alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
        la red y los discos) durante la generación de números primos. Esto da al
        generador de números aleatorios mayor oportunidad de recoger suficiente
        entropía.
        Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
        alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
        la red y los discos) durante la generación de números primos. Esto da al
        generador de números aleatorios mayor oportunidad de recoger suficiente
        entropía.
        gpg: clave 75F8A403F54FF4B4 marcada como de confianza absoluta
        gpg: creado el directorio '/home/maria/.gnupg/openpgp-revocs.d'
        gpg: certificado de revocación guardado como '/home/maria/.gnupg/openpgp-revocs.d/D7D76217F9DA9045296C1EBC75F8A403F54FF4B4.rev'
        claves pública y secreta creadas y firmadas.

        pub   rsa3072 2022-11-29 [SC] [caduca: 2024-11-28]
              D7D76217F9DA9045296C1EBC75F8A403F54FF4B4
        uid                      Maria Jesus Alloza <mariajesus.alloza@outlook.es>
        sub   rsa3072 2022-11-29 [E] [caduca: 2024-11-28]

        
  • El directorio donde se guardan las claves es:
        ~/.gnupg
        maria@maria-debian:~/.gnupg$ ls
        openpgp-revocs.d  private-keys-v1.d  pubring.kbx  pubring.kbx~  trustdb.gpg
        maria@maria-debian:~/.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 que vamos a usar para listar las claves públicas es:

        gpg --list-keys
        
        maria@maria-debian:~/.gnupg$ gpg --list-keys
        /home/maria/.gnupg/pubring.kbx
        ------------------------------
        pub   rsa3072 2022-11-29 [SC] [caduca: 2024-11-28]
        D7D76217F9DA9045296C1EBC75F8A403F54FF4B4
        uid        [  absoluta ] Maria Jesus Alloza <mariajesus.alloza@outlook.es>
        sub   rsa3072 2022-11-29 [E] [caduca: 2024-11-28]

        maria@maria-debian:~/.gnupg$ 
        
  • Los datos que nos muestra son: - pub: Indica que es una clave pública. - uid: Identificador único de la clave. - sub: Indica que es una clave pública secundaria.

  • Para genetar las claves con un mes de validez, deberíamos haber usado el comando:

        gpg --full-gen-key
        
        maria@maria-debian:~/.gnupg$ gpg --full-generate-key
        gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.

        Por favor seleccione tipo de clave deseado:
           (1) RSA y RSA (por defecto)
           (2) DSA y ElGamal
           (3) DSA (sólo firmar)
           (4) RSA (sólo firmar)
          (14) Existing key from card
        Su elección:
        las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
        ¿De qué tamaño quiere la clave? (3072) 
        El tamaño requerido es de 3072 bits
        Por favor, especifique el período de validez de la clave.
                 0 = la clave nunca caduca
              <n>  = la clave caduca en n días
              <n>w = la clave caduca en n semanas
              <n>m = la clave caduca en n meses
              <n>y = la clave caduca en n años
        ¿Validez de la clave (0)? 1m
        La clave caduca jue 29 dic 2022 10:49:56 CET
        ¿Es correcto? (s/n) s

        GnuPG debe construir un ID de usuario para identificar su clave.

        Nombre y apellidos: Maria Jesus Alloza
        Dirección de correo electrónico: mariajesus.alloza@outlook.es
        Comentario: 
        Ha seleccionado este ID de usuario:
            "Maria Jesus Alloza <mariajesus.alloza@outlook.es>"

        ¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? v
        Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
        alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
        la red y los discos) durante la generación de números primos. Esto da al
        generador de números aleatorios mayor oportunidad de recoger suficiente
        entropía.
        Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
        alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
        la red y los discos) durante la generación de números primos. Esto da al
        generador de números aleatorios mayor oportunidad de recoger suficiente
        entropía.
        gpg: clave CA1C968B84D4B041 marcada como de confianza absoluta
        gpg: certificado de revocación guardado como '/home/maria/.gnupg/openpgp-revocs.d/57F9092579AC46D5B93972F7CA1C968B84D4B041.rev'
        claves pública y secreta creadas y firmadas.

        pub   rsa3072 2022-11-29 [SC] [caduca: 2022-12-29]
              57F9092579AC46D5B93972F7CA1C968B84D4B041
        uid                      Maria Jesus Alloza <mariajesus.alloza@outlook.es>
        sub   rsa3072 2022-11-29 [E] [caduca: 2022-12-29]

        
  • Lista las claves privadas de tu almacén de claves.

  • Si listamos las claves, podremos ver la fecha de caducidad que tiene:

            maria@maria-debian:~/.gnupg$ gpg --list-key
            /home/maria/.gnupg/pubring.kbx
            ------------------------------
            pub   rsa3072 2022-11-29 [SC] [caduca: 2024-11-28]
                  D7D76217F9DA9045296C1EBC75F8A403F54FF4B4
            uid        [  absoluta ] Maria Jesus Alloza <mariajesus.alloza@outlook.es>
            sub   rsa3072 2022-11-29 [E] [caduca: 2024-11-28]

            pub   rsa3072 2022-11-29 [SC] [caduca: 2022-12-29]
                  57F9092579AC46D5B93972F7CA1C968B84D4B041
            uid        [  absoluta ] Maria Jesus Alloza <mariajesus.alloza@outlook.es>
            sub   rsa3072 2022-11-29 [E] [caduca: 2022-12-29]

            

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.
        maria@debian gpg --armor --export -a "Maria Jesus Alloza" > mjar.asc
        
  • Importa las claves públicas recibidas de vuestro compañero.
        maria@debian gpg --import juan_jesus.asc
        

1

  • Comprueba que las claves se han incluido correctamente en vuestro keyring.
        maria@debian gpg --list-key
        

2

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.

  • Creamos el fichero que vamos a cifrar:

        maria@debian nano cifrar-mjar.txt
        maria@debian cat cifrar-mjar.txt
        

3

  • Ciframos el fichero:
        maria@debian gpg --encrypt --recipient githubemail1asir@gmail.com cifrar-mjar.txt
        

4

  • Nuestro compañero, a su vez, nos remitirá un archivo cifrado para que nosotros lo descifremos.

  • Nos descargamos el fichero ya cifrado de nuestro compañero y procedemos a descifrarlo:

        maria@maria-debian:~/Descargas$ gpg --output descifrado.txt -d criptoarchivo.txt.gpg
        gpg: cifrado con clave de 3072 bits RSA, ID AB63968A54C787E9, creada el 2022-11-29
            "Maria Jesus Alloza <mariajesus.alloza@outlook.es>"
        maria@maria-debian:~/Descargas$ 
        
  • Tanto nosotros como nuestro compañero comprobaremos que hemos podido descifrar los mensajes recibidos respectivamente.
        maria@debian cat descifrado-ipc.txt
        

5

  • 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.
    maria@debian gpg --encrypt --recipient <correo jjas> cifrar.txt
    maria@debian gpg --output descifrado.txt -d cifrar-mjar.gpg
    
  • Para terminar, indica los comandos necesarios para borrar las claves públicas y privadas que posees.
    maria@debian gpg --delete-key "maria"
    Se ha eliminado la clave pública *****************
    

6

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.
        maria@debian gpg --gen-revoke 57F9092579AC46D5B93972F7CA1C968B84D4B041
        

7

  • Exporta tu clave pública al servidor pgp.rediris.es
 
    gpg --keyserver pgp.rediris.es --send-key 57F9092579AC46D5B93972F7CA1C968B84D4B041
    

8

  • Borra la clave pública de alguno de tus compañeros de clase e impórtala ahora del servidor público de rediris.

    • gpg –delete-key “Ivan”
    • gpg –keyserver pgp.rediris.es –recv-keys 278C14EB1CE76FEF397C83058A550974B7DF5CB8

9

Tarea 5: Cifrado asimétrico con openssl

  • Genera un par de claves (pública y privada).
    openssl genrsa -aes128 -out maria_jesus_ssl_key.pem 2048
    openssl rsa -in maria-ssl.pem -outform PEM -pubout -out public-maria-ssl.pem
    

10

  • Envía tu clave pública a un compañero.

  • Utilizando la clave pública cifra un fichero de texto y envíalo a tu compañero.

    echo "Hola, soy María Jesús, esto es mi archivo cifrado ssl" > maria_jesus_criptoarchivossl.txt
    openssl rsautl -encrypt -inkey juanje-ssl.pub.pem -pubin -in maria_jesus_criptoarchivossl.txt -out maria_jesus_criptoarchivossl.txt.enc
    

11

  • Tu compañero te ha mandado un fichero cifrado, muestra el proceso para el descifrado.
    openssl rsautl -decrypt -inkey maria-ssl.pem -in criptoarchivossl-juanje.txt.enc -out prueba.txt
    cat prueba.txt
    

12