Práctica: Cifrado asimétrico con gpg y openssl
Tarea 1: Generación de claves
Ejercicio 0
Instalar gpg
Ejercicio 1
Generar par de claves
En rojo, marco lo que yo he tenido que escribir.
Cuando pide una passphrase, no le pongo ninguna.
¿En qué directorio se guardan las claves de un usuario?
/home/vagrant/.gnupg
Ejercicio 2
Listar las claves públicas
/home/vagrant/.gnupg/pubring.kbx
--------------------------------
pub rsa3072 2021-11-15 [SC] [expires: 2023-11-15]
5FAB740108563CA70D25EFA770B15EFFA5837AF8
uid [ultimate] Adrián Jaramillo Rodríguez <adristudy@gmail.com>
sub rsa3072 2021-11-15 [E] [expires: 2023-11-15]
Explicar el output
/home/vagrant/.gnupg/pubring.kbx
: anillo de clavespub
: indicador de clave públicarsa3072
: tipo de clave rsa y tamaño en bits de 30722021-11-15
: fecha de creación[expires: 2023-11-15]
: fecha de expiración5FAB740108563CA70D25EFA770B15EFFA5837AF8
: fingerprint de la claveuid
: identificadores de la clavesub
: indica una "subkey". Esto es un concepto un poco avanzado de gpg que no hemos visto, porque en realidad cada par de claves que creamos a su vez crean subpares de claves por debajo.
¿Cómo deberías haber generado las claves para indicar, por ejemplo, que tengan 1 mes de validez?
En rojo he marcado cuando:
- Defino 1 mes de validez
- Aparece la fecha de expiración correcta en la clave
Ejercicio 3
Listar las claves privadas
/home/vagrant/.gnupg/pubring.kbx
--------------------------------
sec rsa3072 2021-11-15 [SC] [expires: 2023-11-15]
5FAB740108563CA70D25EFA770B15EFFA5837AF8
uid [ultimate] Adrián Jaramillo Rodríguez <adristudy@gmail.com>
ssb rsa3072 2021-11-15 [E] [expires: 2023-11-15]
Tarea 2: Importar / exportar clave pública
Ejercicio 1
Exportar tu clave pública en ASCII al fichero
adrian_jaramillo.asc
Enviar
adrian_jaramillo.asc
a Carlos
Enviado.
Ejercicio 2
Importar la clave pública recibida de Carlos
He recibido:
La importo:
gpg: key 69700115DE666C54: public key "Carlos Rivero Martín <carlosrivero1988@gmail.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
Ejercicio 3
Comprobar que la clave se ha incluido correctamente
/home/vagrant/.gnupg/pubring.kbx
--------------------------------
pub rsa3072 2021-11-15 [SC] [expires: 2023-11-15]
5FAB740108563CA70D25EFA770B15EFFA5837AF8
uid [ultimate] Adrián Jaramillo Rodríguez <adristudy@gmail.com>
sub rsa3072 2021-11-15 [E] [expires: 2023-11-15]
pub rsa3072 2021-11-15 [SC] [expires: 2023-11-15]
35AAEDB27BDF2918D11FB3B569700115DE666C54
uid [ unknown] Carlos Rivero Martín <carlosrivero1988@gmail.com>
sub rsa3072 2021-11-15 [E] [expires: 2023-11-15]
Abajo tenemos la de Carlos.
Tarea 3: Cifrado asimétrico con claves públicas
Ejercicio 1
Cifrar un fichero con la clave pública de Carlos
gpg: A226D42A5B0599A6: There is no assurance this key belongs to the named user
sub rsa3072/A226D42A5B0599A6 2021-11-15 Carlos Rivero Martín <carlosrivero1988@gmail.com>
Primary key fingerprint: 35AA EDB2 7BDF 2918 D11F B3B5 6970 0115 DE66 6C54
Subkey fingerprint: 0FC1 7DA5 8FC3 9973 A4FA 5648 A226 D42A 5B05 99A6
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
Fichero generado:
Enviar el fichero cifrado a Carlos
Enviado.
Ejercicio 2
Carlos nos enviará un fichero cifrado
Ejercicio 3
Descifrar
para_adrian.txt.gpg
gpg: encrypted with 3072-bit RSA key, ID ABA647DE60867CB5, created 2021-11-15
"Adrián Jaramillo Rodríguez <adristudy@gmail.com>"
Fichero desencriptado:
Contenido:
Ejercicio 4
Enviar
para_carlos.txt.gpg
a Daniel Parrales
Enviado.
Comprobar que Daniel no puede descifrar
para_carlos.txt.gpg
Si intenta hacer:
Le aparece:
Esto sucede porque Daniel no tiene la clave privada asociada a la pública con la que originalmente se encriptó el fichero.
Ejercicio 5
Borrar tu clave privada
Muestro que se ha borrado:
Borrar todas las claves públicas
Muestro que no queda ninguna:
Tarea 4: Exportar clave a un servidor público de claves PGP
Ejercicio 1
Generar certificado de revocación de tu clave pública
Seguimos los pasos que se nos indican (en rojo, mis respuestas):
Fichero generado:
Ejercicio 2
Exportar tu clave pública a
pgp.rediris.es
Obligatorio indicar el "key ID" después de --send-key
(no funcionaría, por ejemplo, indicando un correo).
Compruebo que se haya subido correctamente:
La número 1 es la que acabo de subir (las demás claves son de otros años).
La sé identificar por:
- ID resumido (últimos 16 caracteres del ID original)
- Fecha de creación
Ejercicio 3
Borrar la clave pública de Carlos
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.
pub rsa3072/69700115DE666C54 2021-11-15 Carlos Rivero Martín <carlosrivero1988@gmail.com>
Delete this key from the keyring? (y/N) y
Importarla desde
pgp.rediris.es
Para importar su clave pública de nuevo a mi keybox, primero, tengo que averiguar su ID.
gpg: data source: http://130.206.1.8:11371
(1) Carlos Rivero Martín <carlosrivero1988@gmail.com>
3072 bit RSA key 69700115DE666C54, created: 2021-11-15, expires: 2023-11-15
Sabiendo su ID, 69700115DE666C54
, me bajo la clave:
gpg: key 69700115DE666C54: public key "Carlos Rivero Martín <carlosrivero1988@gmail.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
Vuelvo a listar mis claves públicas, y la tengo:
vagrant@practicacifradogpg:~$ gpg --list-key
/home/vagrant/.gnupg/pubring.kbx
--------------------------------
pub rsa3072 2021-11-15 [SC] [expires: 2023-11-15]
5FAB740108563CA70D25EFA770B15EFFA5837AF8
uid [ultimate] Adrián Jaramillo Rodríguez <adristudy@gmail.com>
sub rsa3072 2021-11-15 [E] [expires: 2023-11-15]
pub rsa3072 2021-11-15 [SC] [expires: 2023-11-15]
35AAEDB27BDF2918D11FB3B569700115DE666C54
uid [ unknown] Carlos Rivero Martín <carlosrivero1988@gmail.com>
sub rsa3072 2021-11-15 [E] [expires: 2023-11-15]
Tarea 5: Cifrado asimétrico con openssl
Ejercicio 1
Generar par de claves
Generating RSA private key, 2048 bit long modulus (2 primes)
......................................................................................+++++
....................................................................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for keypair.pem:
Verifying - Enter pass phrase for keypair.pem:
Passphrase: 1234
Fichero resultante:
Ejercicio 2
Enviar tu clave pública a Carlos
Exporto mi clave pública del fichero keypair.pem
:
Nos pregunta la passphrase, y nos genera:
Este fichero, es el que envío a Carlos.
Ejercicio 3
Recibir la clave pública de Carlos
Utilizando esa clave, cifra un fichero de texto y envíaselo
openssl rsautl -encrypt -inkey public_crivero.pem -pubin -in para_carlos_openssl.txt -out para_carlos_openssl.txt.enc
Nos genera este fichero cifrado:
Se lo envío.
Ejercicio 4
Recibe un fichero cifrado de Carlos
Descifra el fichero
openssl rsautl -decrypt -inkey keypair.pem -in para_adrian_openssl.txt.enc > para_adrian_openssl.txt
Introducimos la passphrase, y obtenemos el fichero:
Con el contenido: