Firmas Digitales con RSA en Criptografía

LinuxBeginner
Practicar Ahora

Introducción

Bienvenidos al laboratorio sobre Firmas Digitales con RSA. Una firma digital es un mecanismo criptográfico utilizado para verificar la autenticidad e integridad de mensajes o documentos digitales. Proporciona la seguridad de que el mensaje fue creado por un remitente conocido (autenticidad) y que no fue alterado durante la transmisión (integridad).

En este laboratorio, obtendrá experiencia práctica con el ciclo de vida completo de una firma digital. Utilizaremos la herramienta de línea de comandos openssl, una utilidad robusta y versátil para tareas criptográficas. Aprenderá a generar una firma utilizando una clave privada y a verificarla utilizando la clave pública correspondiente. Al finalizar, tendrá una comprensión práctica de cómo las firmas digitales aseguran nuestras comunicaciones digitales.

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 99%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Concepto de Firma Digital

En este paso, comenzaremos por entender el concepto central de una firma digital. Una firma digital es creada por el remitente utilizando su clave privada (private key). Esta clave se mantiene en secreto y solo es conocida por el remitente. La firma puede ser verificada posteriormente por cualquiera que posea la clave pública (public key) correspondiente del remitente.

Este proceso proporciona dos garantías de seguridad críticas:

  • Autenticidad: Dado que solo el remitente posee la clave privada, una firma válida demuestra que el mensaje se originó en él.
  • Integridad: La firma está matemáticamente ligada al contenido del mensaje. Si el mensaje se altera de alguna manera, la firma dejará de ser válida.

Para facilitar este laboratorio, el proceso de configuración ya ha generado un par de claves RSA para usted: private.pem (su clave secreta) y public.pem (su clave compartible). También se creó un archivo llamado message.txt. Listemos los archivos en nuestro directorio de proyecto para verlos.

Ejecute el siguiente comando en su terminal:

ls -l

Debería ver los archivos que se han preparado para usted:

-rw-rw-r-- 1 labex labex   55 Oct 20 09:20 document.txt
-rw-rw-r-- 1 labex labex   26 Oct 20 09:20 message.txt
-rw------- 1 labex labex 1704 Oct 20 09:20 private.pem
-rw-rw-r-- 1 labex labex  451 Oct 20 09:20 public.pem

Ahora que tenemos nuestras claves y un mensaje, estamos listos para crear nuestra primera firma digital.

Firmar Mensaje con Clave Privada

En este paso, creará una firma digital para el archivo message.txt. El proceso implica dos acciones principales: primero, crear un hash criptográfico (una cadena de bytes única de tamaño fijo) del mensaje, y segundo, cifrar ese hash con su clave privada. El resultado es la firma digital.

Utilizaremos el comando openssl dgst para realizar esta operación. Ejecutemos el comando para firmar message.txt.

openssl dgst -sha256 -sign private.pem -out signature.bin message.txt

Analicemos este comando:

  • openssl dgst: Invoca el comando digest (resumen) de OpenSSL.
  • -sha256: Especifica el algoritmo SHA-256 para crear el hash del mensaje.
  • -sign private.pem: Indica a OpenSSL que firme el hash utilizando la clave privada especificada, private.pem.
  • -out signature.bin: Especifica el archivo de salida donde se almacenará la firma binaria resultante.
  • message.txt: Es el archivo de entrada que estamos firmando.

Después de ejecutar el comando, se creará un nuevo archivo llamado signature.bin. Este archivo contiene la firma digital. Puede verificar su creación listando los archivos nuevamente.

ls -l

Ahora verá signature.bin en la lista de archivos:

-rw-rw-r-- 1 labex labex   55 Oct 20 09:20 document.txt
-rw-rw-r-- 1 labex labex   26 Oct 20 09:20 message.txt
-rw------- 1 labex labex 1704 Oct 20 09:20 private.pem
-rw-rw-r-- 1 labex labex  451 Oct 20 09:20 public.pem
-rw-rw-r-- 1 labex labex  256 Oct 20 09:26 signature.bin

Verificar Firma con Clave Pública

En este paso, asumiremos el rol de un destinatario que desea verificar la firma. Para hacer esto, el destinatario necesita tres elementos: el mensaje original (message.txt), la firma digital (signature.bin) y la clave pública del remitente (public.pem).

El proceso de verificación revierte el proceso de firma. OpenSSL utilizará la clave pública para descifrar la firma, revelando el hash original. Luego, calculará independientemente un nuevo hash del mensaje que recibió. Si los dos hashes coinciden, la firma es válida.

Usemos openssl dgst de nuevo, pero esta vez con la opción -verify.

openssl dgst -sha256 -verify public.pem -signature signature.bin message.txt

Aquí está el desglose del comando de verificación:

  • -verify public.pem: Indica a OpenSSL que verifique una firma utilizando la clave pública especificada, public.pem.
  • -signature signature.bin: Especifica el archivo de firma que se va a verificar.
  • message.txt: Es el archivo de mensaje original al que se supone que corresponde la firma.

Si la firma es válida, OpenSSL mostrará el siguiente mensaje:

Verified OK

Esta confirmación significa dos cosas: el mensaje fue firmado definitivamente por el propietario de la clave private.pem, y el contenido de message.txt no ha sido modificado desde que fue firmado.

Firmar Archivo con Clave Privada

En este paso, reforzaremos el proceso de firma aplicándolo a un archivo diferente. Esto ayudará a solidificar su comprensión de cómo se crea y utiliza un hash firmado. Tenemos otro archivo en nuestro directorio llamado document.txt. Ahora crearemos una firma digital para este documento.

El procedimiento es idéntico a lo que hicimos en el Paso 2. Generaremos un hash SHA-256 de document.txt y luego firmaremos ese hash con nuestra clave private.pem.

Creemos la firma y guardémosla en un archivo llamado document.sig.

openssl dgst -sha256 -sign private.pem -out document.sig document.txt

Este comando crea un nuevo archivo de firma, document.sig, que es específico para el contenido actual de document.txt. Cualquier cambio en el documento requeriría la generación de una nueva firma.

Listemos los archivos para confirmar que se ha creado document.sig.

ls

Debería ver el nuevo archivo de firma en la salida:

document.sig  document.txt  message.txt  private.pem  public.pem  signature.bin

Ahora tenemos un documento firmado, que utilizaremos en el siguiente paso para demostrar el poder de verificación de integridad de las firmas digitales.

Probar Manipulación de Firma

En este paso final, demostraremos la característica más crítica de una firma digital: la protección de la integridad. Manipularemos intencionalmente el archivo document.txt después de que haya sido firmado e intentaremos verificarlo con la firma original. Esto mostrará cómo las firmas digitales previenen modificaciones no autorizadas.

Primero, agreguemos algo de texto al archivo document.txt. Esto simula a un atacante alterando el documento.

echo "This is an unauthorized change." >> document.txt

El contenido de document.txt ha cambiado ahora. La firma original, document.sig, se creó basándose en el contenido anterior del archivo.

Ahora, intentemos verificar el archivo document.txt modificado utilizando la firma original document.sig y la clave pública.

openssl dgst -sha256 -verify public.pem -signature document.sig document.txt

Esta vez, la verificación no tendrá éxito. En su lugar, verá un mensaje de error similar a:

Verification failure
805BA484597F0000:error:02000068:rsa routines:ossl_rsa_verify:bad signature:../crypto/rsa/rsa_sign.c:430:
805BA484597F0000:error:1C880004:Provider routines:rsa_verify:RSA lib:../providers/implementations/signature/rsa_sig.c:774:

Este fallo es el resultado esperado. Ocurre porque el hash del document.txt modificado ya no coincide con el hash que fue cifrado dentro de document.sig. Esto prueba instantáneamente que el archivo ha sido manipulado desde que fue firmado. Este mecanismo es fundamental para confiar en documentos y comunicaciones digitales.

Resumen

En este laboratorio, ha aprendido con éxito la aplicación práctica de las firmas digitales utilizando RSA y OpenSSL.

Ha recorrido todo el proceso:

  • Ha comprendido los conceptos centrales de autenticidad e integridad proporcionados por las firmas digitales.
  • Ha utilizado una clave privada (private.pem) para firmar un mensaje y crear un archivo de firma.
  • Ha utilizado la clave pública correspondiente (public.pem) para verificar la firma y confirmar la autenticidad del mensaje.
  • Ha presenciado un Verification failure (Fallo de verificación) después de manipular intencionalmente un archivo firmado, demostrando cómo las firmas digitales protegen la integridad de los datos.

Esta experiencia práctica proporciona una base sólida para comprender cómo se establece la confianza en el mundo digital, un concepto crucial en la ciberseguridad y la informática moderna.