Criptografía

Ejercicio 4.1

Genera un par de claves asimétricas de un empleado que tendrá tu nombre, apellidos y tu correo electrónico de gmail. Captura la pantalla el comando utilizado y el resultado obtenido.

Note

Se utilizará el correo pablo@carpet4you.site en vez de mi dirección personal de Gmail.

Para generar un par de claves asimétricas debemos seguir las siguientes instrucciones:

pablo@carpet:~$ gpg --gen-key
gpg (GnuPG) 2.2.12; Copyright (C) 2018 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.

gpg: keybox '/home/pablo/.gnupg/pubring.kbx' created
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

GnuPG needs to construct a user ID to identify your key.

Real name: Pablo González
Email address: [email protected]
You are using the 'utf-8' character set.
You selected this USER-ID:
    "Pablo González <[email protected]>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /home/pablo/.gnupg/trustdb.gpg: trustdb created
gpg: key 48CF9B50966CC9B7 marked as ultimately trusted
gpg: directory '/home/pablo/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/pablo/.gnupg/openpgp-revocs.d/D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7.rev'
public and secret key created and signed.

pub   rsa3072 2021-10-23 [SC] [expires: 2023-10-23]
    D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7
uid                      Pablo González <[email protected]>
sub   rsa3072 2021-10-23 [E] [expires: 2023-10-23]

Para ver las clave generada podemos utilzar el siguiente comando:

pablo@carpet:~$ gpg -k
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2023-10-23
/home/pablogontroya/.gnupg/pubring.kbx
--------------------------------------
pub   rsa3072 2021-10-23 [SC] [expires: 2023-10-23]
    D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7
uid           [ultimate] Pablo González <[email protected]>
sub   rsa3072 2021-10-23 [E] [expires: 2023-10-23]

Ejercicio 4.2

Genera un par de claves asimétricas que servirán para tu empresa que tendrá como datos el nombre de tu empresa y el correo electrónico del administrador de tu empresa. Captura la pantalla el comando utilizado y el resultado obtenido.

Para generar un par de claves asimétricas ejecutar el comando siguiente. El comando nos pedirá el nombre y el correo electrónico que queremos utilizar para la generación. También la clave simétrica que protegerá la clave privada.

gpg gen-key
[...]
public and secret key created and signed.

pub   rsa3072 2021-10-23 [SC] [expires: 2022-01-21]
    0171E7FC0657E4CCFAEC3C23164857A2CDB61EEC
uid                      Carpet4You Management (Las mejores alfombras del universo) <[email protected]>
sub   rsa3072 2021-10-23 [E] [expires: 2022-01-21]

Ejercicio 4.3

Muestra las claves privadas de tu empleado y de tu empresa. Captura la pantalla el comando utilizado y el resultado obtenido.

Para ver las claves privadas que tenemos en nuestro keyring debemos ejecutar el siguiente comando:

pablo@carpet:~$ gpg -k
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2022-01-21
/home/pablogontroya/.gnupg/pubring.kbx
--------------------------------------
pub   rsa3072 2021-10-23 [SC] [expires: 2023-10-23]
    D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7
uid           [ultimate] Pablo González <[email protected]>
sub   rsa3072 2021-10-23 [E] [expires: 2023-10-23]

pub   rsa3072 2021-10-23 [SC] [expires: 2022-01-21]
    0171E7FC0657E4CCFAEC3C23164857A2CDB61EEC
uid           [ultimate] Carpet4You Management (Las mejores alfombras del universo) <[email protected]>
sub   rsa3072 2021-10-23 [E] [expires: 2022-01-21]

Ejercicios 4.4 y 4.5

Exporta las claves privadas/públicas de tu empleado y de tu empresa a archivos que se entregaran con el proyecto. Por cada uno de ellos se tendrán los archivos ClavePublicaNombreApellidos.key que contendrá la clave pública y ClavePrivadaNombreApellidos.key que contendrá la clave privada del usuario y ClavePublicaNombreEmpresa.key y ClavePrivadaNombreEmpresa.key de las empresas.

Para exportar las claves públicas:

pablo@carpet:~$ gpg --armor --output ClavePublicaPabloGonzalez.key --export D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7

pablo@carpet:~$ gpg --armor --output ClavePublicaCarpet4You.key --export 0171E7FC0657E4CCFAEC3C23164857A2CDB61EEC

Para exportar las claves privadas (nos pedirá la clave simétrica):

pablo@carpet:~$ gpg --armor --output ClavePrivadaPabloGonzalez.key --export-secret-keys D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7

pablo@carpet:~$ gpg --armor --output ClavePrivadaCarpet4You.key --export-secret-keys 0171E7FC0657E4CCFAEC3C23164857A2CDB61EEC

Ejercicio 4.6

En el moodle del instituto en el apartado del proyecto estarán las claves públicas y privadas de un tercer empleado genérico que tienes que importar al anillo de tu servidor de usuarios. Captura la pantalla el comando utilizado y el resultado obtenido.

Una vez descargadas desde el Aula Virtual las claves, debemos extraer los .key del archivo comprimido tar.gz:

pablo@carpet:~$ tar -xf 'ClavesPublicayPrivada Empleado genérico .tar.gz'

Warning

Se ha producido un error al importar la clave pública. Parece que ocupa 0 bytes:

pablo@carpet:~$ ls -lah
-rwxr-xr-x 1 pablo pablo 5241 Nov 11  2019 PrivateKeyEmpleadoGenerico.key
-rwxr-xr-x 1 pablo pablo    0 Nov 11  2019 PublicKeyEmpleadoGenerico.key

Importaremos la clave privada:

gpg --import PrivateKeyEmpleadoGenerico.key

Aunque no sepamos la contraseña simétrica, la clave pública será importada.

Para ver la clave pública importada:

user@server-carpet:~$ gpg --list-keys
/home/user/.gnupg/pubring.kbx
-----------------------------
pub   rsa3072 2019-11-07 [SC] [expires: 2021-11-06]
    2F537C9D14C7E613DE5C0EEDA540561B0E2FED4D
uid           [ unknown] Empleado Generico Empresa <[email protected]>
sub   rsa3072 2019-11-07 [E] [expires: 2021-11-06]

Ejercicio 4.7

Cifra un fichero con el texto “Hola Mundo” y encriptarlo con el empleado genérico. Captura la pantalla el comando utilizado y el resultado obtenido. Entrega el fichero encriptado.

pablo@carpet:~$ echo "Hola Mundo" > Empleado-PabloGonzález.txt
pablo@carpet:~$ gpg -a -r [email protected] --encrypt Empleado-PabloGonzález.txt

pablo@carpet:~$ ll E*
    -rw-r--r-- 1 pablogontroya pablogontroya  11 Oct 23 23:03 Empleado-PabloGonzález.txt
    -rw-r--r-- 1 pablogontroya pablogontroya 736 Oct 23 23:04 Empleado-PabloGonzález.txt.asc

Ejercicio 4.8

Desencripta el fichero. Captura la pantalla el comando utilizado y el resultado obtenido.

Para desencriptar el fichero debemos utilizar el comando que podemos ver a continuación. Nos pedirá la clave simétrica de la clave privada.

pablo@carpet:~$ gpg --decrypt Empleado-PabloGonzález.txt.asc
gpg: encrypted with 3072-bit RSA key, ID 8D27C3D26858C7E2, created 2021-10-23
    "Pablo González <[email protected]>"
Hola Mundo

Ejercicio 4.9

Firma digitalmente con la clave asimétrica de tu empresa el fichero que has subido a la web en el anterior ejercicio creando una firma separada del archivo. Sube la firma y la clave pública a tu web junto a los hash para que un usuario pueda comprobar la autoría del fichero. Captura la pantalla el comando utilizado y el resultado obtenido.

pablo@carpet:~$ gpg --output plano_CPD.pdf.sign --sign plano_CPD.pdf

Para verificar la firma del archivo podemos ejecutar:

pablo@carpet:~$ gpg --verify plano_CPD.pdf.sign
gpg: Signature made Sat 23 Oct 2021 11:19:36 PM CEST
gpg:                using RSA key D5AA1DFFB6A4557305CECF4148CF9B50966CC9B7
gpg: Good signature from "Pablo González <[email protected]>" [ultimate]
gpg: WARNING: not a detached signature; file 'plano_CPD.pdf' was NOT verified!