Garantizar la Integridad y Autenticidad de los Datos con Criptografía

CompTIABeginner
Practicar Ahora

Introducción

En el mundo digital, es crucial garantizar que los datos no han sido manipulados (integridad) y que provienen de una fuente confiable (autenticidad). La criptografía proporciona las herramientas para lograr estos objetivos.

Este laboratorio te introducirá a prácticas criptográficas fundamentales en un sistema Linux. Aprenderás sobre:

  • Hashing (Resumen Criptográfico): Crear una "huella digital" única y de tamaño fijo de un archivo. Si el archivo cambia, incluso en un solo bit, el hash cambiará por completo. Utilizaremos los algoritmos MD5 y SHA256.
  • Firmas Digitales: Utilizar una clave privada para "firmar" un archivo, lo que permite a cualquiera con la clave pública correspondiente verificar que el archivo es auténtico y no ha sido modificado.
  • Cifrado (Encriptación): Codificar el contenido de un archivo de manera que solo pueda ser leído por alguien que posea la clave correcta para descifrarlo, garantizando la confidencialidad.

Utilizaremos herramientas estándar de línea de comandos de Linux, incluyendo md5sum, sha256sum y GnuPG (gpg), la implementación de GNU del estándar Pretty Good Privacy (PGP). Al final de este laboratorio, podrás realizar resúmenes criptográficos (hashing), firmar, verificar, cifrar y descifrar archivos con confianza.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 94%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Calcular Hashes de Archivos (MD5 y SHA256)

En este paso, aprenderás cómo calcular hashes criptográficos para un archivo. Una función hash toma una entrada (como un archivo) y devuelve una cadena de bytes de tamaño fijo, conocida como valor hash o digest. Este valor actúa como una huella digital.

Primero, utilizaremos el comando md5sum para calcular el hash MD5 del archivo important_data.txt que se ha precreado en tu directorio ~/project.

Ejecuta el siguiente comando en tu terminal:

md5sum important_data.txt

Verás una salida que consiste en el valor hash seguido del nombre del archivo:

d9e21981521545759153147864347199  important_data.txt

Si bien MD5 es rápido, ahora se considera inseguro para fines criptográficos debido a vulnerabilidades. Una alternativa más segura y comúnmente utilizada es la familia SHA-2, específicamente SHA256.

Ahora, calculemos el hash SHA256 utilizando el comando sha256sum:

sha256sum important_data.txt

La salida será un hash más largo y seguro:

a39b2c414f234246a2535321238863141b1a4849443b9992994b4189317e8591  important_data.txt

Si modificaras algo en important_data.txt, tanto los hashes MD5 como SHA256 cambiarían por completo, lo que te permitiría detectar fácilmente cualquier modificación no autorizada.

Instalar y Configurar GnuPG (GPG)

En este paso, instalarás GnuPG (GPG), la herramienta que utilizaremos para firmas digitales y cifrado. Si bien GPG a menudo viene preinstalado en las distribuciones modernas de Linux, es una buena práctica asegurarse de que esté presente y actualizado.

Primero, actualiza tu lista de paquetes usando apt-get update. Necesitas usar sudo porque la gestión de paquetes requiere privilegios administrativos.

sudo apt-get update

A continuación, instala el paquete gnupg. La bandera -y responde automáticamente "sí" a cualquier solicitud, haciendo que la instalación sea no interactiva.

sudo apt-get install -y gnupg

Una vez completada la instalación, puedes verificar que GPG esté instalado correctamente comprobando su versión.

gpg --version

Deberías ver una salida similar a la siguiente, confirmando la instalación. Los números de versión y los detalles pueden variar ligeramente.

gpg (GnuPG) 2.2.27
libgcrypt 1.9.4
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/labex/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Ahora que GPG está listo, podemos proceder a crear nuestras propias claves criptográficas.

Generar un Par de Claves GPG para Firmas Digitales

En este paso, generarás tu propio par de claves GPG, que consta de una clave privada y una clave pública.

  • Clave Privada: Debe mantenerse en secreto. Se utiliza para descifrar mensajes y crear firmas digitales.
  • Clave Pública: Se puede compartir libremente. Se utiliza para cifrar mensajes destinados a ti y para verificar tus firmas digitales.

Normalmente, gpg --full-generate-key ejecuta una configuración interactiva. Para hacer este proceso más simple y no interactivo para el laboratorio, utilizaremos el modo batch (por lotes) de GPG. Primero, crea un archivo de parámetros que especifique los detalles de nuestra clave.

Utiliza el siguiente comando cat con un "here document" para crear el archivo gen-key-params instantáneamente:

cat << EOF > gen-key-params
%echo Generating a basic key
Key-Type: RSA
Key-Length: 2048
Subkey-Type: RSA
Subkey-Length: 2048
Name-Real: LabEx User
Name-Email: user@labex.io
Expire-Date: 0
%no-protection
%commit
%echo done
EOF

Este archivo instruye a GPG a crear una clave RSA de 2048 bits para un usuario llamado "LabEx User" con el correo electrónico "user@labex.io". La clave nunca caducará, y usamos %no-protection para crear la clave sin una frase de contraseña (passphrase) por simplicidad (en un escenario del mundo real, siempre deberías usar una frase de contraseña segura).

Ahora, genera la clave usando el archivo de parámetros:

gpg --batch --gen-key gen-key-params

GPG utilizará los parámetros para generar el par de claves. Esto puede tardar unos momentos. Una vez que termine, puedes listar tus claves para confirmar que el par de claves se creó correctamente.

gpg --list-keys

La salida debería mostrar tu clave pública recién creada, similar a esto:

/home/labex/.gnupg/pubring.kbx
-------------------------------
pub   rsa2048 2023-10-27 [SC]
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid           [ultimate] LabEx User <user@labex.io>
sub   rsa2048 2023-10-27 [E]

Ahora tienes un par de claves GPG listo para firmar y cifrar archivos.

Firmar Digitalmente y Verificar un Archivo con GPG

En este paso, utilizarás tu clave privada para crear una firma digital para un archivo. Esta firma demuestra que el archivo se originó contigo y no ha sido alterado desde que lo firmaste.

Crearemos una firma "separada" (detached), que se almacena en un archivo aparte. Esto es útil porque el archivo original permanece intacto.

Para firmar important_data.txt, ejecuta el siguiente comando. GPG utilizará automáticamente la clave privada predeterminada que acabas de generar.

gpg --detach-sign important_data.txt

Dado que creamos la clave sin una frase de contraseña (passphrase), no se te pedirá ninguna. Ahora, lista los archivos en tu directorio para ver el nuevo archivo de firma.

ls

Verás el archivo original y su firma:

gen-key-params  important_data.txt  important_data.txt.sig

Ahora, imagina que eres un destinatario que ha recibido tanto important_data.txt como important_data.txt.sig, junto con tu clave pública. Para verificar la autenticidad e integridad del archivo, ejecutarían el comando gpg --verify.

Realicemos la verificación tú mismo:

gpg --verify important_data.txt.sig important_data.txt

La salida confirmará que la firma es válida:

gpg: Signature made Mon Aug  4 16:39:30 2025 CST
gpg:                using RSA key 8765265B14E42532B9CBAE6DE2120C9784C69814
gpg: Good signature from "LabEx User <user@labex.io>" [ultimate]

El mensaje "Good signature" confirma que el archivo es auténtico y no ha sido modificado.

Cifrar y Descifrar un Archivo con GPG

En este paso, aprenderás cómo cifrar un archivo para garantizar su confidencialidad. A diferencia de la firma (que utiliza tu clave privada), cifrar un archivo para alguien requiere su clave pública. El destinatario luego usa su clave privada para descifrarlo.

Aquí, cifraremos important_data.txt para nosotros mismos, por lo que usaremos nuestra propia clave pública como la clave del destinatario.

Utiliza el siguiente comando para cifrar el archivo. La opción --recipient especifica qué clave pública se utilizará para el cifrado, y --output define el nombre del archivo cifrado.

gpg --encrypt --recipient "user@labex.io" --output important_data.txt.gpg important_data.txt

Si intentas ver el contenido del nuevo archivo cifrado, important_data.txt.gpg, verás datos binarios ilegibles.

cat important_data.txt.gpg

Ahora, descifremos el archivo. Esta acción requiere la clave privada correspondiente. Dado que tienes la clave privada, puedes descifrar el mensaje. Guardaremos el contenido descifrado en un nuevo archivo llamado decrypted_data.txt.

gpg --decrypt --output decrypted_data.txt important_data.txt.gpg

GPG utilizará tu clave privada para descifrar el archivo. Verás información de GPG en tu terminal, incluida una confirmación de que el archivo fue cifrado con tu clave.

Finalmente, visualiza el contenido del archivo descifrado para confirmar que el proceso fue exitoso.

cat decrypted_data.txt

La salida debería ser el mensaje original y legible:

This is a secret message that needs to be protected.

Has cifrado exitosamente un archivo para proteger su contenido y luego lo has descifrado para recuperar la información original.

Resumen

En este laboratorio, has adquirido experiencia práctica con herramientas y conceptos criptográficos esenciales en un sistema Linux. Has realizado con éxito las siguientes tareas:

  • Calculado hashes de archivos utilizando md5sum y sha256sum para garantizar la integridad de los datos.
  • Instalado y configurado GnuPG (gpg), la herramienta estándar para criptografía de código abierto.
  • Generado un par de claves GPG personal (claves pública y privada).
  • Creado una firma digital con gpg --detach-sign para proporcionar autenticidad e integridad.
  • Verificado una firma digital con gpg --verify.
  • Cifrado un archivo para confidencialidad utilizando gpg --encrypt.
  • Descifrado el archivo para acceder a su contenido original utilizando gpg --decrypt.

Estas habilidades son fundamentales para asegurar datos, verificar descargas de software y proteger comunicaciones en una amplia variedad de contextos profesionales y personales.