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.
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.



