Tarea 1: Firmas electrónicas

En este primer apartado vamos a trabajar con las firmas electrónicas, para ello te pueden ayudar los siguientes enlaces:

Intercambiar clave

Validar otras claves en nuestro anillo de claves públicas

Firmado de claves (Debian)

  1. Manda un documento y la firma electrónica del mismo a un compañero. Verifica la firma que tu has recibido.

    • Creamos la firma de la clave pública de Maria Jesus Alloza:
    gpg --list-keys
    gpg --armor --export -a "Maria Jesus Alloza" > mjar.asc
    
    • Creamos el fichero de prueba y lo firmamos:
    echo "Fichero de prueba - Criptografía 2" > fichero.txt
    gpg --detach-sign fichero.txt
    
    • Enviamos el fichero y la firma a nuestro compañero.

    • Verificamos la firma:

    gpg --verify integridad.txt.sig integridad.txt
    
  2. ¿Qué significa el mensaje que aparece en el momento de verificar la firma?

    gpg: Firma correcta de "Pepe D <josedom24@gmail.com>" [desconocido]
    gpg: ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!
    gpg:          No hay indicios de que la firma pertenezca al propietario.
    Huellas dactilares de la clave primaria: E8DD 5DA9 3B88 F08A DA1D  26BF 5141 3DDB 0C99 55FC
    
    • Este mensaje nos indica que al realizar la firma de dicha clave pública, no se ha encontrado ninguna firma de confianza, por lo que no se puede asegurar que la clave pertenezca al propietario.
  3. Vamos a crear un anillo de confianza entre los miembros de nuestra clase, para ello.

    • Tu clave pública debe estar en un servidor de claves.

    • Escribe tu fingerprint en un papel y dárselo a tu compañero, para que puede descargarse tu clave pública.

    • Te debes bajar al menos tres claves públicas de compañeros. Firma estas claves.

    • Tu te debes asegurar que tu clave pública es firmada por al menos tres compañeros de la clase.

    • Una vez que firmes una clave se la tendrás que devolver a su dueño, para que otra persona se la firme.

    • Cuando tengas las tres firmas sube la clave al servidor de claves y rellena tus datos en la tabla Claves públicas PGP 2022-2023.

    • Asegurate que te vuelves a bajar las claves públicas de tus compañeros que tengan las tres firmas.

    • Subo mi clave a keyserver.ubuntu.com, dado que rediris está fuera de servicio:

      gpg --keyserver keyserver.ubuntu.com --send-keys 2614614FABC5378E657019153C7A682537DE4164
      
    • Envío mi fingerprint a mi compañero para que pueda descargar mi clave pública:

      gpg --fingerprint
      $ 2614614FABC5378E657019153C7A682537DE4164
      
    • Descargo las claves públicas de mis compañeros:

      gpg --keyserver keys.openpgp.org --recv-keys 43140D1577041C18C5830A9B195360276022F67D # Arantxa
      gpg --keyserver keyserver.ubuntu.com --recv-keys 4C6D5995F2B13373 # Antonio
      gpg --keyserver keyserver.ubuntu.com --recv-keys 212357B9A18C9EFA3531CDF994615205285D18A5 # Juan Jesús
      
    • Firmo las claves públicas de mis compañeros:

      gpg --sign-key 43140D1577041C18C5830A9B195360276022F67D # Arantxa
      gpg --sign-key 4C6D5995F2B13373 # Antonio
      gpg --sign-key 212357B9A18C9EFA3531CDF994615205285D18A5 # Juan Jesús
      
    • Envío las claves firmadas a mis compañeros para que las firmen:

      gpg --armor --export -a "Arantxa" > arantxa.asc
      gpg --armor --export -a "Antonio" > antonio.asc
      gpg --armor --export -a "Juan Jesús" > juanjesus.asc
      
    • Importo mi clave ya firmada por mis compañeros:

      gpg --import arantxa.asc
      gpg --import antonio.asc
      gpg --import juanjesus.asc
      
    • Compruebo que mis compañeros han firmado mi clave:

      gpg --list-sigs 2614614FABC5378E657019153C7A682537DE4164
      
  4. Muestra las firmas que tiene tu clave pública.

  1. Comprueba que ya puedes verificar sin “problemas” una firma recibida por una persona en la que confías.

    gpg --verify integridad.txt.sig integridad.txt
    
  2. Comprueba que puedes verificar con confianza una firma de una persona en las que no confías, pero sin embargo si confía otra persona en la que tu tienes confianza total.

    • Importo la clave de antonio con su anillo de confianza:
    gpg --import 4C6D5995F2B13373
    
    • Edito la confianza de la clave de antonio:
    gpg  --edit-key 4C6D5995F2B13373
    trust
    5
    quit
    
    • Antonio le ha mandado su clave a Roberto y este a su vez a mi, por lo que yo tengo confianza en la clave de Antonio.

    • Ahora yo, le mando a Roberto un fichero firmado por mi proia clave, y al tener la clave de Antonio, el cual previamente me ha dado confianza mutuamente y viceversa, puede verificar mi fichero sin problemas.

      gpg --verify fichero.txt.sig fichero.txt
      

Tarea 2: Correo seguro con evolution/thunderbird

  1. Configura el cliente de correo evolution/thunderbird con tu cuenta de correo habitual.

    • Instalamos thunderbird:
    sudo apt install thunderbird-l10n-es-es
    
    • Configuramos nuestra cuenta habitual de correo.
  2. Añade a la cuenta las opciones de seguridad para poder enviar correos firmados con tu clave privada o cifrar los mensajes para otros destinatarios.

    gpg --export-secret-keys --armor 2614614FABC5378E657019153C7A682537DE4164 > clave-correo.asc
    
  3. Envía y recibe varios mensajes con tus compañeros y comprueba el funcionamiento adecuado de GPG.

    .

EXTRA Añadid a la tarea 2 un último punto consistente en enviarle un correo electrónico al profesor un mensaje firmado por vosotros y que solo pueda descifrar yo.

Para realizar esta actividad extra, vamos a importar la clave pública del profesor a nuestro sistema, y la exportamos en formato ASCII para poder enviarla por correo electrónico.

```bash
gpg --keyserver keyserver.ubuntu.com --recv-keys 8DEB2BE5
---
gpg --export --armor 8DEB2BE5 > clave-profesor.asc
```

Tarea 3: Integridad de ficheros

  1. Para validar el contenido de la imagen CD, solo asegúrese de usar la herramienta apropiada para sumas de verificación. Para cada versión publicada existen archivos de suma de comprobación con algoritmos fuertes (SHA256 y SHA512); debería usar las herramientas sha256sum o sha512sum para trabajar con ellos.

    • Descargamos la imagen de debian 11.0.0:
    wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.6.0-amd64-netinst.iso
    
    • Descargamos el fichero de sumas de comprobación:
    wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS
    
    • Comprobamos la integridad de la imagen:
    sha512sum --check --ignore-missing SHA512SUMS
    
  1. Verifica que el contenido del hash que has utilizado no ha sido manipulado, usando la firma digital que encontrarás en el repositorio. Puedes encontrar una guía para realizarlo en este artículo: How to verify an authenticity of downloaded Debian ISO images.

    • Descargamos la firma digital del repositorio:
    wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS.sign
    
    • Verificamos la firma:
    gpg --verify SHA512SUMS.sign SHA512SUMS
    

Vemos que nos ha saltado el error de que es impossible verificar la firma, esto es debido a que no tenemos la clave publica de la persona que ha firmado el fichero. Para solucionarlo, importamos la clave publica de la persona que ha firmado el fichero:

gpg --keyserver keyserver.ubuntu.com --recv-keys DF9B9C49EAA9298432589D76DA87E80D6294BE9B

Y verificamos la firma de nuevo:

gpg --verify SHA512SUMS.sign SHA512SUMS

Vemos que ahora si que nos ha verificado la firma correctamente.

Tarea 4: Integridad y autenticidad (apt secure)

Busca información sobre apt secure y responde las siguientes preguntas:

  1. ¿Qué software utiliza apt secure para realizar la criptografía asimétrica?

    • gpg.
  2. ¿Para que sirve el comando apt-key? ¿Qué muestra el comando apt-key list?

    • apt-key permite administrar las claves de los repositorios de paquetes.
    • Muestra las claves que tenemos en el sistema.
  3. En que fichero se guarda el anillo de claves que guarda la herramienta apt-key?

    • /etc/apt/trusted.gpg.d/
  4. ¿Qué contiene el archivo Release de un repositorio de paquetes?. ¿Y el archivo Release.gpg?. Puedes ver estos archivos en el repositorio http://ftp.debian.org/debian/dists/Debian10.1/. Estos archivos se descargan cuando hacemos un apt update.

    • Contiene información sobre los paquetes que contiene el repositorio, como la versión, la arquitectura, etc.
    • La firma digital del fichero Release.
  5. Explica el proceso por el cual el sistema nos asegura que los ficheros que estamos descargando son legítimos.

    • El sistema descarga el fichero Release, fichero Release.gpg y el fichero packages.
    • Comprueba que el fichero Release.gpg es una firma válida del fichero Release.
    • Se compara el checksum del fichero packages con el que se encuentra en el fichero Release. En caso de que no coincidan, se descarga el fichero packages y se comprueba su integridad.
    • Se descarga el fichero Packages.gz y se comprueba su integridad. En caso de que coincida, se descomprime y se comprueba que el fichero Packages es una firma válida del fichero Packages.gz.
  6. Añade de forma correcta el repositorio de virtualbox añadiendo la clave pública de virtualbox como se indica en la documentación.

    • Añadimos las claves públicas de virtualbox a nuestro sistema.
    wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
    wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
    
    • Añadimos el repositorio de virtualbox a nuestro sistema.
    echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian buster contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
    
    • Actualizamos el sistema.
    sudo apt update
    

Tarea 5: Autentificación: ejemplo SSH

  1. Explica los pasos que se producen entre el cliente y el servidor para que el protocolo cifre la información que se transmite. ¿Para qué se utiliza la criptografía simétrica? ¿Y la asimétrica?

    • La criptografía simétrica proporciona un grado de autentificación porque los datos se cifran y descifran con la misma clave. Siempre que ambas partes mantengan la clave en secreto, nadie más podrá descifrar los datos. Su uso es principalmente para cifrar conexiones.

    • La criptografía asimétrica utiliza un par de claves, una pública y otra privada. La clave pública se utiliza para cifrar la información, mientras que la clave privada se utiliza para descifrarla. Se utiliza para autentificar a los usuarios, ya que solo el usuario con la clave privada puede descifrar la información cifrada con la clave pública.

  2. Explica los dos métodos principales de autentificación: por contraseña y utilizando un par de claves públicas y privadas.

    • Por contraseña: el usuario introduce la contraseña en el cliente y el servidor la compara con la que tiene almacenada. Si coinciden, el usuario se autentifica.
    • Con par de claves:
    1. El cliente genera un par de claves pública y privada.
    2. El cliente envía la clave pública al servidor y la almacena en el fichero ~/.ssh/authorized_keys.
    3. Ya almacenada la clave pública, en la primera conexión, el servidor solicitará al cliente que se autentifique mediante la clave privada. Si la clave privada es correcta, el servidor autentifica al cliente.
  3. En el cliente para que sirve el contenido que se guarda en el fichero ~/.ssh/know_hosts?

    • Se utiliza para autenticar a los servidores a los que nos conectamos.En este fichero nos encontraremos todas las claves públicas de los servidores a los que nos hemos conectado. De esta forma, cuando nos conectemos a un servidor, el cliente comprobará que la clave pública del servidor coincide con la que tiene almacenada en el fichero.
  4. ¿Qué significa este mensaje que aparece la primera vez que nos conectamos a un servidor?

    $ ssh debian@172.22.200.74
    The authenticity of host 172.22.200.74 (172.22.200.74) can t be established.
    ECDSA key fingerprint is SHA256:7ZoNZPCbQTnDso1meVSNoKszn38ZwUI4i6saebbfL4M.
    Are you sure you want to continue connecting (yes/no)?
    
    • El cliente no tiene almacenada la clave pública del servidor, por lo que no puede autentificarlo. Por ello, nos pregunta si queremos continuar la conexión.
  5. En ocasiones cuando estamos trabajando en el cloud, y reutilizamos una ip flotante nos aparece este mensaje:

    $ ssh debian@172.22.200.74
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the ECDSA key sent by the remote host is
    SHA256:W05RrybmcnJxD3fbwJOgSNNWATkVftsQl7EzfeKJgNc.
    Please contact your system administrator.
    Add correct host key in /home/jose/.ssh/known_hosts to get rid of this message.
    Offending ECDSA key in /home/jose/.ssh/known_hosts:103
      remove with:
      ssh-keygen -f "/home/jose/.ssh/known_hosts" -R "172.22.200.74"
    ECDSA host key for 172.22.200.74 has changed and you have requested strict checking.
    
    • Cuando nos sale en pantalla este mensaje, es porque el servidor ha cambiado su clave pública pero la dirección IP del host no ha cambiando. Nos da un aviso de que alguien podría estar haciendo un ataque de man-in-the-middle. Para solucionarlo, debemos eliminar la clave pública del servidor del fichero ~/.ssh/known_hosts.
      ssh-keygen -f "/home/jose/.ssh/known_hosts" -R "ip"
      
  6. ¿Qué guardamos y para qué sirve el fichero en el servidor ~/.ssh/authorized_keys?

    • En este fichero es único para cada usuario y en él se encuentran las claves públicas de los clientes que se han conectado al servidor. De esta manera, el servidor tiene almacenadas las claves públicas de los clientes que se han conectado a él y puede autentificarlos.