Cifrado de archivos con OpenSSL

LinuxBeginner
Practicar Ahora

Introducción

En esta práctica, aprenderás a utilizar OpenSSL para el cifrado y descifrado de archivos, una habilidad fundamental en el ámbito de la ciberseguridad. Practicarás la generación de una clave simétrica y la aplicación del cifrado AES para proteger datos sensibles mediante ejercicios prácticos.

Esta sesión te guiará a través de la instalación de OpenSSL, la creación de un archivo de prueba y la ejecución de un ciclo completo de cifrado y descifrado. Esta experiencia práctica te ayudará a comprender las técnicas básicas de protección de datos utilizadas en aplicaciones del mundo real.

Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada etapa y obtener experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel principiante con una tasa de finalización del 96%. Ha recibido una tasa de valoraciones positivas del 98% por parte de los alumnos.

Instalar y verificar OpenSSL

En este paso, instalarás OpenSSL, un potente conjunto de herramientas para implementar comunicaciones seguras. Aunque OpenSSL suele estar incluido en las distribuciones de Linux, este paso garantiza que esté correctamente instalado y listo para su uso.

Primero, verifica que OpenSSL esté instalado comprobando la versión instalada.

openssl version

Deberías ver una salida similar a la siguiente, indicando la versión de OpenSSL en tu sistema.

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

Finalmente, puedes mostrar el menú de ayuda para ver una lista de los comandos disponibles y confirmar que OpenSSL funciona correctamente.

openssl help

Este comando enumerará las diversas operaciones criptográficas que OpenSSL puede realizar, las cuales exploraremos en los siguientes pasos.

Crear un archivo de muestra para el cifrado

En este paso, crearás un archivo de texto sencillo para utilizarlo en nuestros ejercicios de cifrado y descifrado. El uso de un archivo conocido nos permite verificar fácilmente que el proceso funciona correctamente comparando el contenido original con el descifrado.

Tu terminal ya debería estar en el directorio /home/labex/project. Crearemos el archivo aquí.

Primero, utiliza el editor de texto nano para crear un nuevo archivo llamado sample.txt.

nano sample.txt

Una vez que se abra nano, escribe el siguiente texto en el editor:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

Ahora, guarda el archivo y sal de nano:

  1. Presiona Ctrl + O para escribir los cambios en el archivo.
  2. Presiona Enter para confirmar el nombre del archivo (sample.txt).
  3. Presiona Ctrl + X para salir del editor.

Para confirmar que el archivo se creó correctamente, muestra su contenido utilizando el comando cat.

cat sample.txt

La salida debería mostrar exactamente el texto que ingresaste:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

Este archivo de muestra ya está listo para el proceso de cifrado en los próximos pasos.

Generar una clave de cifrado simétrica

En este paso, generarás una clave simétrica, que es una clave secreta utilizada tanto para cifrar como para descifrar datos. Utilizaremos OpenSSL para crear una clave aleatoria robusta adecuada para el cifrado AES-256, un estándar altamente seguro y ampliamente adoptado.

Asegúrate de estar en tu directorio de proyecto, /home/labex/project.

cd ~/project

Utiliza el comando openssl rand para generar 32 bytes (256 bits) de datos aleatorios y guárdalos en formato hexadecimal en un archivo llamado symmetric_key.hex.

openssl rand -hex 32 > symmetric_key.hex

Visualiza la clave generada para ver su aspecto.

cat symmetric_key.hex

La salida será una cadena hexadecimal de 64 caracteres, que representa tu clave de 256 bits. Se verá algo parecido a esto (tu clave será diferente):

2f8b5e9a1c3d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f

Dado que esta clave puede desbloquear tus datos, es fundamental protegerla. Utiliza el comando chmod para establecer los permisos del archivo de modo que solo el propietario del archivo (tú) pueda leerlo y escribir en él.

chmod 600 symmetric_key.hex

Finalmente, verifica los permisos del archivo con ls -l.

ls -l symmetric_key.hex

La salida debería mostrar los permisos como -rw-------, confirmando que el archivo está protegido.

-rw------- 1 labex labex 65 Nov 15 10:30 symmetric_key.hex

Con la clave generada y asegurada, ya estás listo para cifrar el archivo de muestra.

Cifrar el archivo con AES

Ahora utilizarás la clave simétrica para cifrar sample.txt. Utilizaremos el cifrado AES-256-CBC. AES (Advanced Encryption Standard) con una clave de 256 bits es un algoritmo de cifrado sólido, y CBC (Cipher Block Chaining) es un modo de operación que mejora la seguridad al hacer que cada bloque cifrado dependa del anterior.

El comando openssl enc se encarga del cifrado. Especificaremos el cifrado, el archivo de entrada, el archivo de salida y el archivo de la clave.

Ejecuta el siguiente comando para cifrar sample.txt y guardar el resultado en sample.enc.

openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  • -aes-256-cbc: Especifica el algoritmo de cifrado.
  • -in sample.txt: El archivo de entrada que se va a cifrar.
  • -out sample.enc: El nombre del archivo de salida (cifrado).
  • -pass file:symmetric_key.hex: Indica a OpenSSL que utilice el contenido de symmetric_key.hex como contraseña (clave).

Después de ejecutar el comando, enumera los archivos para ver el nuevo archivo cifrado, sample.enc.

ls -l

Notarás que sample.enc es ligeramente más grande que sample.txt debido a la sobrecarga del cifrado, como el relleno (padding) y los metadatos.

total 12
-rw-r--r-- 1 labex labex   96 Nov 15 10:35 sample.enc
-rw-r--r-- 1 labex labex   89 Nov 15 10:20 sample.txt
-rw------- 1 labex labex   65 Nov 15 10:30 symmetric_key.hex

Si intentas ver el contenido del archivo cifrado, verás datos binarios ilegibles.

cat sample.enc

La salida ininteligible confirma que el archivo se ha cifrado correctamente.

Descifrar el archivo y verificar la integridad

En este paso final, descifrarás sample.enc para recuperar el texto original. Esto confirmará que tu clave funciona y que todo el ciclo de cifrado y descifrado ha sido exitoso.

Para descifrar el archivo, utilizarás de nuevo el comando openssl enc, pero esta vez con la opción -d para especificar el descifrado.

Ejecuta el siguiente comando para descifrar sample.enc y guardar el resultado en un nuevo archivo, sample.dec.

openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex

Ahora, verifiquemos que el descifrado ha funcionado. La mejor manera de comprobarlo es comparar el archivo descifrado (sample.dec) con el archivo original (sample.txt). El comando diff es perfecto para esto.

diff sample.txt sample.dec

Si los archivos son idénticos, este comando no producirá ninguna salida, lo que significa que el descifrado fue exitoso.

Para una confirmación visual final, muestra el contenido del archivo descifrado.

cat sample.dec

La salida debería ser exactamente la misma que la de tu archivo sample.txt original:

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

Has cifrado con éxito un archivo y lo has descifrado a su forma original utilizando OpenSSL.

Resumen

En esta práctica de laboratorio, has adquirido experiencia práctica en el cifrado y descifrado de archivos utilizando OpenSSL. Has aprendido a generar una clave simétrica robusta, a utilizarla para cifrar un archivo con el algoritmo AES-256 y, a continuación, a descifrar el archivo para restaurar los datos originales. Este proceso es una habilidad fundamental para proteger la información sensible en el ámbito de la ciberseguridad.