Skip to content

4.6. Firma digital y certificados

Objetivo de la práctica

En esta práctica aprenderás a utilizar la firma digital de forma similar a como se hace en entornos reales, comprendiendo qué ocurre en cada paso.

Al finalizar, serás capaz de:

  • Generar y gestionar claves criptográficas.
  • Firmar digitalmente documentos.
  • Verificar firmas de terceros.
  • Detectar modificaciones en documentos firmados.
  • Reconocer los elementos principales de un certificado digital real.

1. Recordatorio conceptual mínimo

Ten en cuenta estas ideas antes de empezar:

  • La firma digital no cifra el documento.
  • La firma garantiza:
    • Identidad del firmante
    • Integridad del contenido
    • No repudio
  • La confianza en una firma depende de la clave pública y de quién la valida.

2. Preparación del entorno

Requisitos:

  • Sistema operativo: Ubuntu 24.04 LTS
  • Herramientas: GPG y OpenSSL

Trabajarás en una máquina con Ubuntu 24.04, como todo el curso. Asegúrate de tener instaladas las herramientas necesarias.

2.1 Comprobación de herramientas

  1. Abre una terminal.
  2. Comprueba que están disponibles:
gpg --version
openssl version

Si alguna no está instalada, la instalas.

3. Generación de claves con GPG

3.1 Creación del par de claves

  1. Ejecuta el siguiente comando:
gpg --full-generate-key
  1. Selecciona:

    • Tipo de clave: RSA
    • Tamaño: 3072 o 4096 bits
    • Caducidad: 1 año
  2. Introduce:

    • Nombre
    • Correo electrónico
    • Contraseña segura

Anota:

  • Tipo de clave
  • Tamaño
  • Fecha de caducidad

3.2 Listado de claves

  1. Muestra tus claves:
gpg --list-keys
gpg --list-secret-keys

Identifica cuál es tu ID de clave.

4. Creación y firma de un documento

4.1 Creación del documento

  1. Crea un archivo llamado contrato.txt, puedes utilizar otro documento si lo prefieres.
  2. Incluye:

    • Identificación del firmante
    • Compromiso claro (pago, aceptación, acuerdo)
    • Fecha

4.2 Firma digital

  1. Firma el documento con tu clave privada:
gpg --detach-sign contrato.txt
  1. Observa que se genera un archivo de firma independiente.

Reflexiona:

  • ¿Por qué es útil separar documento y firma?

5. Verificación de firmas

5.1 Verificación propia

  1. Verifica tu firma:
gpg --verify contrato.txt.sig contrato.txt

Comprueba el resultado.

5.2 Intercambio con un compañero

  1. Exporta tu clave pública:
gpg --export -a "TU NOMBRE" > clave_publica.asc
  1. Intercambia con un compañero:

    • Clave pública
    • Documento (contrato.txt)
    • Firma (contrato.txt.sig)

5.3 Importación y verificación

  1. Importa la clave pública del compañero:
gpg --import clave_companero.asc
  1. Verifica su firma:
gpg --verify contrato_companero.txt.sig contrato_companero.txt

Anota el resultado.

6. Prueba de integridad

  1. Modifica una línea del documento del compañero.
  2. Guarda los cambios.
  3. Intenta verificar la firma otra vez.

Responde:

  • ¿Qué error aparece?
  • ¿Qué propiedad de seguridad se demuestra?

7. Introducción a certificados con OpenSSL

7.1 Creación de un certificado autofirmado

  1. Genera una clave privada:
openssl genrsa -out clave_privada.pem 2048
  1. Crea un certificado autofirmado:
openssl req -new -x509 -key clave_privada.pem -out certificado.pem -days 365

Anota los datos que introduces.

7.2 Inspección del certificado

  1. Visualiza el contenido del certificado:
openssl x509 -in certificado.pem -text -noout

Identifica:

  • Emisor
  • Sujeto
  • Periodo de validez
  • Algoritmo de firma

8. Certificados digitales en el navegador

  1. Accede a una web segura (https).
  2. Visualiza su certificado desde el navegador.
  3. Compara:

  4. Certificado real vs. certificado autofirmado

9. Entrega de la práctica

Entrega un documento con:

  • Capturas de los pasos clave.
  • Respuestas a las reflexiones.
  • Comparación breve entre firma GPG y certificados SSL/TLS.