Firma digital, sello de tiempo y cifrado de documentos

Continuando con nuestra campaña de prescriptores de ciberseguridad de REALSEC, hoy queremos compartir este interesante artículo sobre firma digital, cifrado de documentos y sello de tiempo del experto en ciberseguridad Luis Martin, de quien ya publicamos su artículo sobre el cifrado de comunicaciones.

Firma digital

La firma digital se define como el conjunto de datos electrónicos que acompañan o que están asociados a un documento electrónico y se basa en la Ley 59/2003, de 19 de Diciembre sobre la Firma Electrónica, donde se indica que la  “firma electrónica” reconocida debe cumplir las siguientes propiedades o requisitos:

  • Identificar al firmante.
  • Verificar la integridad del documento firmado.
  • Garantizar el no repudio en el origen.
  • Contar con la participación de un tercero de confianza.
  • Estar basada en un certificado electrónico reconocido.
  • Debe de ser generada con un dispositivo seguro de creación de firma.

La unión del cifrado (del que ya se habló en un artículo anterior que puede leer AQUÍ) y la firma digital aportan las tres características de la comunicación por Internet: identificación inequívoca del firmante, integridad de los datos y no repudio y que son parte tres de los requisitos que pide la ley.
La integridad de los datos significa que podemos estar seguros de que lo que enviamos es lo que recibe el receptor y viceversa, que lo que recibimos es lo que envió el emisor.
El no repudio significa que el emisor, con posterioridad a haber enviado el mensaje (o el fichero o el correo electrónico, lo que se envíe firmado) no puede decir que no lo envió, y que la firma no es suya. En otras palabras, mediante la firma digital no hay forma de decir que nos han “falsificado la firma”.
La identificación inequívoca del firmante se consigue con el certificado digital y la infraestructura de clave pública, de las que ya se habló en el anterior artículo. Esta infraestructura de clave pública incluye las llamadas Autoridades de Certificación (CA), que son los “terceros de confianza” a los que alude la ley.
Con respecto a la utilización de dispositivos seguros, se refiere a la utilización de un documento de identificación segura como un DNI electrónico o una tarjeta criptográfica de la FNMT. Son necesarios para la entrega de documentos firmados a la administración, pero no tiene por qué ser necesarios de cara al intercambio de documentos firmados entre empresas o particulares.
El documento de firma digital en sí, como ya veremos, sólo proporciona el principio de integridad. El resto se consiguen mediante el resto tecnologías que acompañan a la firma: el cifrado, la infraestructura de clave pública o las tarjetas criptográficas.
Las aplicaciones prácticas de la firma digital son muchas y están orientadas a realizar operaciones por Internet que en la vida cotidiana requieren de una firma para validarlas, por ejemplo:

  • Realización de la Declaración de la Renta a través de Internet.
  • Solicitudes en los registros electrónicos administrativos
  • Petición de la vida laboral.
  • Recepción de notificaciones electrónicas.
  • Firma de correos electrónicos.
  • Firma de facturas electrónicas.

Proceso de firma digital

Una firma digital se consigue calculando un valor “hash”, que es un valor único que cambia cada vez que se modifica lo más mínimo un documento (un espacio en blanco más o menos, implica un valor hash completamente diferente). Ese valor hash se adjunta al final del documento y se cifra para que nadie pueda leerlo más que el receptor.
De esta manera que el receptor del mensaje o documento, lo primero que hace es descifrar el hash, calcular el “hash” del mensaje o documento y comprobar si son iguales. Si son diferentes, advertirá al usuario de que podría haber habido una modificación del mensaje durante el tránsito.
Se pueden firmar todo tipo de documentos (PDFs, TXTs, DOCs, JPGs, etc) y también se pueden firmar correos electrónicos y cualquier cosa que se quiera enviar por internet.
En resumen, el proceso de firma es el siguiente:
1.- Creamos el documento que queramos firmar, ya sea un documento PDF, o lo que deseemos. En este ejemplo vamos a usar un documento PDF.
2.- Se obtiene el valor hash, único de ese documento. Hay distintas funciones Hash (MD5, SHA1, SHA-256, etc.). El más utilizado actualmente es el SHA-256. SHA-256 genera un valor de 256 bits (que en hexadecimal puede tener este aspecto: c6b6b0c4147befff952eabfdb9bdc0a0c25bc8204378aadf8e9c52f2b30cc3c1) y que es único para dicho documento. Para hacernos una idea, al documento anterior le añadí un espacio en blanco y el hash SHA-256 que obtuve fue 20dc443a2071c615d6e90594043af06357de8fa8f53eb39f03e11516508f8dd5. Como vemos no se parecen en nada.
A partir de este valor es imposible obtener ninguna información del documento original, pero siempre que lo calculemos (si no hemos modificado el documento), nos sacará el mismo valor hash.
3.- Se cifra, con nuestra clave privada, este hash SHA-256 que hemos obtenido del PDF. El texto obtenido que puede ser similar a:
lzODK0TwL2AUkdcJ7abiee3tc93jrMxqTxu7V0xJoNImKA105TzEHAOzeSUW1N/uudGwTLFZgQt4ejbpLCNwWzG6X8KwVaPPZW/zAwzB4DcnScn6zcz/uRnYs8iBBIabuRN7M1vRHoM77szsxA+hyQxwek/i702lyshkArtQ5Q4=
Es la firma digital del documento PDF. Esto generalmente se guarda en un pequeño archivo.
Si además queremos cifrar el documento para garantizar la confidencialidad y el no repudio, se continuaría con los siguientes pasos:
4.- Se cifra el documento PDF original usando la clave privada del emisor.
5.- Se cifra otra vez este documento PDF ya cifrado, pero esta vez usando la clave pública del destinatario.
Si sólo se quiere firmar el documento (por ejemplo queremos que el documento sea público pero que vea que lo hemos firmado nosotros) bien en el correo electrónico o por el medio que sea, se enviará el documento PDF en claro y el fichero de la firma digital.
Si por el contrario, se desea confidencialidad y no repudio, los siguientes tres documentos se unirán en un documento único y se envían por correo electrónico o el método que sea:
– El documento PDF doblemente cifrado.
– El fichero con la firma del documento original.
– La clave pública del emisor (este último no es necesario puesto que las claves públicas son eso, publicas, y están disponibles en los servidores de claves).
Este proceso esta descrito en el siguiente esquema:
proceso firma digital
¿Y por qué es necesario este proceso tan largo? Bien, veamos los pasos seguidos:

  • La firma digital (pasos 1-3) es un hash que varía con la menor modificación del documento y ese hash ha sido firmado con la clave privada del emisor. Con esto el receptor se asegura de que ese documento no ha sido modificado desde que el emisor lo firmó. A esto se le llama integridad.
  • El primer cifrado del PDF (paso 4), hecho con la clave privada del emisor, sólo puede ser descifrado con la clave pública del emisor. Con esto, el receptor puede estar seguro que ese documento fue cifrado por la persona que le manda el documento. A esto se le llama no repudio.
  • El segundo cifrado del PDF (paso 5), hecho con la clave pública del receptor, sólo puede ser descifrado con la clave privada del receptor. Con esto el emisor se asegura que sólo el receptor puede leer el documento A esto se le conoce como confidencialidad.

Aunque el proceso es muy largo, un ordenador lo hace en cuestión de milisegundos. Quizás el cifrado, si el documento original es muy grande, pueda llevar unos segundos, pero no más.
El proceso de descifrado y comprobación de firma por tanto es el siguiente:
proceso cifrado correo
En resumen, el documento se descifra dos veces, usando primero la clave privada del receptor y luego la clave pública del emisor. Con eso nos aseguramos la confidencialidad y el no repudio. Si queremos comprobar la integridad del envío, deberemos realizar el mismo proceso que se realizó en el momento de la creación de la firma digital y comparar la firma obtenida con la recibida por correo electrónico. Si son iguales, aseguramos la integridad del envío.
Lo mismo que se ha realizado con un documento PDF, se pueden firmar correos electrónicos o mensajes de mensajería instantánea. En el fondo, tanto los correos electrónicos como los mensajes son pequeños ficheros que puede ser cifrado firmados igualmente.

Multifirma

Puede ocurrir que un documento tenga varios autores y se desee que todos firmen. El proceso en ese caso depende de si el documento va cifrado o no.
Si el documento no va cifrado, el proceso consiste en calcular el hash del documento original y firmarlo por separado todos los firmantes con sus respectivas claves privadas. Es decir, todos los firmantes cifran el hash original del documento y en el documento finalmente generado, no hay una firma, sino tantas como firmantes haya.
Puede ocurrir que se desee por ejemplo firmar un documento por dos directores y luego por un interventor que dé fe de que ese documento es real y ha sido firmado por los dos directores.
En ese caso, el hash del documento será firmado por ambos directores, obteniéndose dos firmas. Esas dos firmas se unirían en un único documento que sería a su vez firmado por el interventor. Es decir, se recibiría el documento, sin cifrar, y otro documento de firma que habría que descifrar usando la clave pública del interventor para obtener las dos firmas digitales de ambos directores.
Si además hablamos de cifrado de documentos (o mensajes) multifirmados, en este caso el orden es importante. Así, se debe descifrar primero con la clave pública del último que cifró (y firmó) el documento. ¿Y cómo sabemos cuál es el último? En estos casos junto al documento “multicifrado” sólo se recibe una firma digital, de la que podemos obtener quién es el firmante.  El firmante será también el cifrador. Es esa clave pública de ese cifrador la que debemos utilizar.
Al descifrar el documento con esa clave pública, se genera otro documento (cifrado) y otra firma digital, correspondiente otro firmante. Usaremos pues la clave pública de este segundo firmante para descifrar tanto el documento como la firma digital. Así se continúa con todos los firmantes.

Sello de tiempo

El proceso de verificación de una firma electrónica debe poder repetirse en cualquier momento en el futuro, incluso años después de su generación.
A lo largo del tiempo los algoritmos de cifrado pueden llegar a ser vulnerables siendo posible obtener las claves privadas si el algoritmo es vulnerable.
La solución (a grandes rasgos) de estos problemas consiste en incluir un sello de tiempo en la firma de manera que esta fecha no sea incluida por el propio firmante sino por una entidad de certificación de sello de tiempo (TSA).
Por otra parte, es necesario que en el proceso de firma se compruebe que el certificado del firmante no haya caducado. Esto se consigue realizando una petición OCSP a un servidor de claves que nos asegure que el certificado es válido.
Por esta razón el proceso de firma se complica un poquito más, incluyendo dos pasos anteriores a la firma que son:
0.1.- Petición de validez de certificado OCSP a un servidor de claves
0.2.- Solicitud de una sello de tiempo a una TSA

Formato de firma digital

Una de las preocupaciones que apareció posteriormente a la implantación de la firma digital  fue que, por ejemplo en Europa, un documento firmado digitalmente en un país miembro de Europa, debía ser válido en cualquier otro país miembro.
El nivel de interoperabilidad debía ser establecido utilizando estándares abiertos y debían existir diferentes niveles de seguridad y confidencialidad según la importancia del documento. Todo ello se recogió en la Directiva Europea 1999/93/CE.
Esto se solucionó desde un punto de vista técnico estableciendo un formato de firma muy abierto.
Como hemos visto, una firma digital no deja de ser un fichero (o varios) que contiene(n) información sobre el documento original, el firmante, la fecha de la firma, algoritmos utilizados y posible caducidad de la firma.
En ocasiones ese fichero de firma va incrustado en el documento original y en otras se trata de ficheros separados.
La forma en que se estructura esta información dentro del archivo de firma (el orden de esa información dentro del fichero, las etiquetas que indican cuando empieza un campo y cuando termina, la opcionalidad de esos campos, etc.) viene determinado por el formato en que es enviada la firma. Existen distintos formatos actualmente como son CMS, CAdES, PAdES, XAdES, etc.
CMS (Criptographic Message Syntax) fue el primer estándar de mensajes protegidos criptográficamente y se basó en PKCS#7, que es el estándar para el cifrado y firmado de mensajes en una infraestructura PKI.
CMS es un marco general para la firma de documentos digitalmente, tales como E-Mail (S / MIME), PDF o cualquier otro tipo de documento.
CAdES (CMS Advanced Electronic Signatures). Este formato, del año 2000, es la evolución del formato CMS. Es apropiado para firmar ficheros grandes, especialmente si la firma contiene el documento original porque optimiza el espacio de la información.
Al poco de crear CMS
En el marco de esta directiva, CAdES especifica seis perfiles precisos de datos firmados para su uso con firma electrónica avanzada.
Esto quiere decir, a efectos prácticos, que el formato de la firma usando cada perfil es diferente, el receptor debe detectar con qué perfil viene el fichero de firma y ser capaz de extraer la firma en sí.
En 2001 aparece XAdES (XML Advanced Electronic Signatures). Se trató de una evolución paralela a CAdES. Mientras de CAdES se basó en CMS, XAdES se basó en XML-DSIG. Con XAdES, el resultado es un fichero de texto XML. Los documentos obtenidos suelen ser más grandes que en el caso de CAdES, por eso no es adecuado cuando el fichero original es muy grande. XAdES introduce también las adaptaciones y extensiones  de la directiva 1999/93/CE, creando sus propios perfiles, incompatibles con CAdES. Aplicaciones como eCoFirma del Ministerio de Industria y Comercio, sólo firman en XAdES.
En 2009 aparece PAdES, que se basan directamente en PKCS#7 y el estándar 32000-1, que establecen un framework para la firma de digital de documentos. PAdES incorpora las mismas características de CAdES y XAdES, pero únicamente para ficheros PDF. Por esta razón es el formato más adecuado cuando el documento original es de este tipo.
Con PAdES, el destinatario de la firma puede comprobar fácilmente la firma y el documento firmado, ya que se trata de una firma visible y legible para el ser humano. Con los formatos anteriores esto no era posible si no se utilizan herramientas externas.
La estructura del documento de firma digital es diferente en cada uno de estos formatos y dentro de cada formato es diferente en función del perfil utilizado, incluyendo más o menos información en cada caso.
No es objetivo de este artículo la descripción del formato de cada uno de estos estándares. La mayoría de las soluciones actuales soportan todos estos formatos.

Resumen

La Ley 59/2003, de 19 de Diciembre sobre la Firma Electrónica establece los requisitos que una firma digital debe cumplir que son sobre todo tres,  Identificar al firmante, Verificar la integridad del documento firmado y Garantizar el no repudio.
El proceso de firma se basa en la obtención de un valor hash del documento y el cifrado de este hash para su envío junto con el documento. Sin embargo, esta firma sólo garantiza la integridad, el resto de objetivos se consiguen cifrando ambos ficheros (el documento y la firma) con la clave privada del emisor y la clave pública del receptor.
Para poder verificar que una firma de un documento se ha realizado en una fecha determinada, y que esta firma es válida, al proceso de firma se le han incluido dos pasos más, una petición de validez de certificado al servidor de claves y una solicitud de un sello de tiempo a una entidad certificadora de tiempos.
Cabe mencionar, por último, que existen por ultimo diferentes formatos de firma digital (CAdES, XAdES, etc), y las aplicaciones de validación de firma deben estar preparados para la verificación de todos ellos.

Sin comentarios

Envia un comentario

Comment
Nombre
Email
Sitio Web