Firmas digitales: Por qué tu garabato en el PDF no sirve de nada

Seguro que alguna vez has «firmado» un documento PDF usando el ratón, haciendo un dibujo que se parece más al electrocardiograma de alguien sufriendo un infarto que a tu verdadera rúbrica. Pues bien, tengo una noticia para ti: eso no es una firma digital. Eso es, técnicamente hablando, un dibujo sobre un documento electrónico.

Si crees que ese garabato protege la integridad (integrity) de lo que has enviado, tienes el mismo nivel de seguridad que una caja fuerte hecha de cartón mojado.

Hoy vamos a desentrañar qué es realmente una firma digital (digital signature) y por qué es el pilar que evita que Internet colapse en un caos de suplantaciones y documentos falsificados.

Los tres pilares: ¿Para qué sirve esto realmente?

Antes de entrar en las matemáticas (tranquilo, no muerden… mucho), debemos entender qué problemas resuelve la firma digital. No se trata solo de decir «esto es mío». Se trata de cumplir tres promesas sagradas en ciberseguridad:

  1. Autenticidad (Authenticity): Confirmar que el emisor es quien dice ser. Si recibes un correo de tu jefe pidiendo que transfieras un millón de euros a una cuenta en las Islas Caimán, te gustaría saber que realmente es él y no un hacker aburrido.
  2. Integridad (Integrity): Garantizar que el mensaje no ha sido alterado desde que se firmó. Si el contrato decía «pagar 1.000€» y el receptor le añade un cero para que sean 10.000€, la firma digital saltará por los aires.
  3. No repudio (Non-repudiation): El emisor no puede negar que firmó el documento. Es el equivalente digital a «lo escrito, escrito está». No hay excusas de «me hackearon el gato» que valgan.

La receta secreta: Hashing y Cifrado Asimétrico

Para entender cómo funciona una firma digital, imagina que quieres enviar una caja con un documento. Pero no quieres enviar la caja entera bajo llave; quieres que cualquiera pueda ver el contenido, pero que nadie pueda cambiar ni una coma sin que te des cuenta.

El primer ingrediente: El Resumen (Hash)

Lo primero que hacemos es pasar el documento por una función de resumen (hash). Un hash es como el ADN de un archivo. Es un algoritmo que toma cualquier cantidad de datos y devuelve una cadena de caracteres de longitud fija.

Ejemplo cotidiano: Imagina que el hash de «Hola Mundo» es A1B2. Si cambias el mensaje a «Hola Mundo.» (con un punto final), el hash resultante sería algo totalmente distinto, como Z9Y8.

Si el documento cambia un solo bit (binary digit), el hash cambia por completo. Esto nos da la integridad.

El segundo ingrediente: Cifrado asimétrico (Asymmetric Encryption)

Con la criptografía asimétrica es donde entra la pareja de moda de la criptografía: la llave privada (private key) y la llave pública (public key).

  • Tu llave privada es solo tuya. No se la das a nadie. Ni a tu pareja, ni a tu perro.
  • Tu llave pública es para todo el mundo. Está ahí fuera, como tu perfil de LinkedIn.

Para firmar, tú coges el hash del documento y lo cifras con tu llave privada. El resultado de ese proceso es la firma digital.

¿Cómo se verifica?

Cuando alguien recibe el documento, hace dos cosas:

  1. Calcula el hash del documento que ha recibido.
  2. Descifra la firma digital usando tu llave pública.

Si el hash que calculó coincide con el hash que ha descifrado de la firma… ¡Bingo! El documento es auténtico y no ha sido modificado. Si no coinciden, es momento de empezar a sospechar hasta de tu sombra.

Como vemos en la imagen, básicamente el documento original se pasa por un algoritmo hash, que genera una huella única. Esa huella se firma con la clave privada, creando el documento firmado.

Cuando alguien lo recibe, vuelve a calcular el hash del documento y, en paralelo, usa la clave pública para obtener el hash de la firma. Si ambos hashes coinciden, la firma es válida y el documento es auténtico y no ha sido modificado.

¿Quién garantiza que tú eres tú? El papel de las CA

Todo esto suena genial, pero ¿cómo sé yo que esa llave pública que dice ser de «Hacienda» no es en realidad de un ciberdelincuente que vive en un sótano? Aquí es donde entra la infraestructura de clave pública (PKI – Public Key Infrastructure).

Para que el sistema funcione, necesitamos a alguien en quien todos confiemos: las Autoridades de Certificación (CA – Certificate Authorities). Estas entidades emiten un certificado digital (digital certificate) que vincula tu identidad con tu llave pública. Es como el DNI de Internet.

Si intentas usar una firma digital cuyo certificado ha caducado o ha sido emitido por una CA desconocida, tu ordenador empezará a gritar con avisos rojos. Ignorar esos avisos es como entrar en un callejón oscuro porque hay un cartel que dice «Caramelos Gratis»: una idea pésima.

Diferencias que te harán quedar como un experto

En las cenas de Navidad (o en las auditorías de seguridad), es vital no confundir términos. Aquí tienes una tabla rápida para que no te pillen en un renuncio:

Concepto¿Qué es?Nivel de seguridad
Firma Electrónica SimpleUn escaneo de tu firma o un check en una web.Nivel «puerta con un post-it».
Firma DigitalProceso criptográfico basado en hashing y PKI.Nivel «bóveda de banco suizo».
Cifrado de datosOcultar el contenido para que nadie lo lea.Confidencialidad pura.

Nota ácida: Firmar digitalmente no es lo mismo que cifrar. En una firma digital, el documento puede ser legible para todo el mundo (no hay confidencialidad), pero es inalterable. Porque claro, ¿qué podría salir mal dejando que cualquiera lea tu contrato pero nadie pueda modificarlo? Exacto: nada, si la firma está bien hecha.

Casos de uso: No solo para abogados

Las firmas digitales están en todas partes, aunque no las veas:

Actualizaciones de software

¿Alguna vez has intentado instalar un programa y te ha saltado un aviso rojo sangre diciendo «Editor desconocido»? Eso es tu sistema operativo gritando porque alguien no ha pasado por el proceso de firma de código (code signing).

Cuando un desarrollador (como Microsoft, Adobe o ese programador de confianza de GitHub) termina su aplicación, no la lanza a la red y ya está. Antes, genera una firma digital para el archivo ejecutable (.exe, .dmg, .apk).

  • ¿Cómo funciona? El desarrollador cifra el hash del binario con su clave privada.
  • ¿Qué evita? Evita los ataques de inyección de código (code injection). Si un atacante intercepta el instalador de Chrome y le añade un «regalito» en forma de software malicioso (malware), el hash del archivo cambiará. Cuando tu Windows intente verificar la firma con la clave pública de Google, las piezas no encajarán y la instalación se detendrá.

Si ignoras el aviso de «Editor desconocido» y pulsas «Instalar de todos modos», básicamente le estás abriendo la puerta de tu casa a un desconocido con pasamontañas solo porque dice que viene a arreglar el Wi-Fi.

Correo electrónico (S/MIME)

El correo electrónico es, por definición, un protocolo inseguro y más viejo que la mayoría de sus usuarios. El phishing funciona porque cualquiera puede enviar un mail fingiendo ser otra persona. Aquí entra S/MIME (Secure/Multipurpose Internet Mail Extensions).

Al usar S/MIME, cada correo que envías lleva pegada una firma digital.

  • Autenticidad: El receptor ve un pequeño icono de un sello o candado. Si el correo dice venir de «Contabilidad» pero no está firmado por el certificado de la empresa, es motivo de sospecha inmediata.
  • Integridad: Garantiza que el contenido del mensaje (el payload) no ha sido alterado por un ataque de hombre en el medio (Man-in-the-Middle o MitM).

Si intentas falsificar un correo firmado, el cliente de correo del destinatario mostrará un aviso de «Firma no válida». Es el equivalente digital a recibir una carta con el sello de cera roto y manchado de sangre. Mal asunto.

Facturación electrónica

En muchos países, la factura electrónica (e-invoicing) no es una opción, es una imposición legal para evitar que las empresas «ajusten» sus cuentas de forma creativa.

Cuando una empresa emite una factura en formato XML o PDF, la firma digitalmente con un certificado de sello electrónico.

No repudio (Non-repudiation): Una vez que envías esa factura firmada, no puedes decir «ay, es que yo nunca emití ese cobro». La evidencia matemática es vinculante en un juicio.

El fisco te observa: Las autoridades tributarias pueden verificar instantáneamente que esa factura es original y que no ha sido modificada para evadir impuestos.

Blockchain y Criptomonedas: Firmas en cada paso

Si te va el mundo cripto, debes saber que toda la tecnología blockchain se sostiene sobre firmas digitales. Cada vez que envías 0.0001 Bitcoin para comprar un café, estás haciendo una firma digital.

  • Tu wallet es tu clave privada: Cuando autorizas una transacción, estás firmando los datos de la transferencia con la clave privada de tu monedero (wallet).
  • La red verifica: Los nodos de la red usan tu clave pública (tu dirección de wallet) para comprobar que tú, y solo tú, tienes el derecho de mover ese dinero.

Sin firmas digitales, el blockchain sería solo una base de datos donde cualquiera podría gastar el dinero de los demás. Un caos total, básicamente como el Monopoly pero con dinero real.

Buenas prácticas generales relacionadas con firmas digitales

Si vas a manejar firmas digitales profesionalmente, no seas un amateur. Sigue estos pasos:

  • Protege tu llave privada: Usa un módulo de seguridad de hardware (HSM) o un token USB seguro. Dejar tu llave privada en una carpeta llamada «Mis cosas» en el escritorio es pedir problemas a gritos.
  • Usa algoritmos fuertes: Olvida MD5 o SHA-1 para el hashing; ya están más rotos que las promesas de año nuevo. Ve directo a SHA-256 o superior.
  • Revisa la revocación: Antes de confiar en una firma, comprueba la lista de revocación de certificados (CRL). A veces las llaves se roban y el certificado deja de ser válido antes de tiempo.
  • Contraseñas largas para tu almacén de llaves: Si la contraseña para acceder a tu certificado es «123456», te mereces lo que te pase.

El Laboratorio: Jugando con OpenSSL

En este ejercicio vamos a simular que eres un desarrollador que envía un archivo confidencial y quiere asegurar que nadie lo toque por el camino.

Paso 1: Generar tu par de llaves

Lo primero es crear tu identidad digital. Vamos a generar un par de llaves usando el algoritmo RSA.

Abre tu terminal y escribe:

openssl genrsa -out mi_llave_privada.pem 2048
Bash

Nota técnica: Acabas de crear tu llave privada (private key) de 2048 bits. Guárdala como si fuera el último trozo de pizza de la fiesta.

Ahora, extraemos la llave pública (public key) de esa llave privada para que el mundo pueda verificar quién eres:

openssl rsa -in mi_llave_privada.pem -pubout -out mi_llave_publica.pem
Bash

Paso 2: Crear el «Contrato Millonario»

Vamos a crear un archivo de texto simple que represente el documento que queremos proteger.

echo "Pagar a la cuenta de Cybernotes la cantidad de 1.000.000€" > contrato.txt
Bash

Paso 3: Firmar el documento

Aquí ocurre la magia. Vamos a generar un resumen (hash) del archivo y cifrarlo con tu llave privada. El resultado será nuestra firma digital (digital signature).

openssl dgst -sha256 -sign mi_llave_privada.pem -out firma.bin contrato.txt
Bash

Ahora tienes tres archivos: el contrato original, tu llave pública y un archivo binario llamado firma.bin. Este último es el «sello de lacre» digital.

Paso 4: La Verificación (El momento de la verdad)

Imagina que eres el receptor. Tienes el contrato, la firma y la llave pública del emisor. Ejecutas esto para ver si todo está en orden:

openssl dgst -sha256 -verify mi_llave_publica.pem -signature firma.bin contrato.txt
Bash

Si todo ha ido bien, la terminal te responderá con un satisfactorio: Verified OK.

El momento «Hacker»: ¿Qué pasa si alteramos el documento?

Aquí es donde el sarcasmo se encuentra con la realidad. Digamos que un atacante intercepta el archivo y, muy sutilmente, añade un cero extra al contrato.

Modifica el archivo:

echo "Pagar a la cuenta de Cybernotes la cantidad de 10.000.000€" > contrato.txt
Bash

Intenta verificar de nuevo:

openssl dgst -sha256 -verify mi_llave_publica.pem -signature firma.bin contrato.txt
Bash

Resultado: Verification Failure. Las matemáticas han detectado que alguien ha metido la mano donde no debía. Aunque solo sea un bit de diferencia, el hash resultante ya no coincide con el que estaba cifrado en la firma.

Resumen de comandos para tu «cheat sheet»

#Generar Privada
openssl genrsa -out privada.pem 2048

#Extraer Pública
openssl rsa -in privada.pem -pubout -out publica.pem

#Firmar 
openssl dgst -sha256 -sign privada.pem -out firma.bin archivo.txt

#Verificar 
openssl dgst -sha256 -verify publica.pem -signature firma.bin archivo.txt
Bash

Conclusión

La firma digital es la única barrera real entre un mundo digital ordenado y el salvaje oeste. Es la combinación perfecta de identidad y matemáticas. Así que la próxima vez que te pidan «firmar» algo, asegúrate de que haya criptografía de por medio y no solo un pincel virtual.

Porque, recuerda: un atacante con acceso a tu llave privada es como dejarle las llaves de tu casa a tu peor enemigo mientras te vas de vacaciones un mes. Sabes que algo va a pasar, y definitivamente no va a ser que te riegue las plantas.

Carlos del Río
Especialista en tecnología y ciberseguridad con más de 18 años de experiencia en entornos educativos y corporativos. Certificado en CC de ISC2. Cybernotes nace con el objetivo de aportar mi granito para conseguir un mundo más ciberseguro.

Últimos artículos

También te puede interesar...