← Back to all articles

Sellos de tiempo RFC 3161 explicados, cómo hacer que una firma digital sea legalmente duradera

SealDoc Team · · 6 min read

Hay una pregunta que surge la primera vez que alguien audita un archivo digital: ¿cómo saber que este documento existía en la fecha que afirma? Una firma digital normal no responde a eso. Una firma prueba quién firmó, no cuándo. Los bytes firmados incluyen una marca de tiempo que el firmante escribió, pero el firmante puede escribir cualquier fecha que quiera. Para la mayoría de los casos de uso internos eso no importa. Para los archivos jurídicamente vinculantes, la retención fiscal y las disputas sobre cadena de custodia, importa mucho.

La respuesta es RFC 3161, el estándar de Internet que define el Protocolo de Sellado de Tiempo (TSP). Es más antiguo de lo que la mayoría esperaría (publicado en 2001), está presente en todas partes en la pila de cumplimiento de la UE y su funcionamiento es más sencillo de lo que el acrónimo sugiere.

Qué es realmente un sello de tiempo RFC 3161

Un sello de tiempo RFC 3161 es un pequeño token firmado emitido por una Autoridad de Sellado de Tiempo (TSA). El flujo funciona así:

  1. Se calcula un hash SHA-256 del documento que se quiere sellar. La TSA nunca ve el documento en sí, solo el hash.
  2. Se envía el hash a una TSA en un mensaje TimeStampReq.
  3. La TSA devuelve una TimeStampResp que contiene un TimeStampToken. El token es una estructura CMS firmada por el certificado de la TSA, y contiene: el hash enviado, la hora afirmada por la TSA, el OID de política de la TSA y un nonce criptográfico que hace eco del propio.
  4. Se adjunta el token al archivo, junto al documento.

Ese token es el sello de tiempo. Dice, en forma criptográfica, “una TSA cuyo certificado encadena a una raíz de confianza ha afirmado que este hash existía en este momento UTC”. Como el documento se identifica por su hash, no se puede modificar retroactivamente sin invalidar el sello de tiempo. Como la TSA está firmando, no se puede cambiar retroactivamente la hora sin falsificar la firma de la TSA.

Por eso los sellos de tiempo son irrepudiables. Ambas partes (la propia y cualquier auditor futuro) pueden verificar el token sin contactar de nuevo a la TSA.

Por qué una marca de tiempo normal no es suficiente

El reloj del servidor está equivocado. Esto se puede afirmar con confianza porque todos los relojes en todas partes están equivocados en alguna medida, y un tribunal no se preocupa por la desviación NTP. El valor legal de una marca de tiempo autoafirmada es aproximadamente el mismo que el valor legal de una fecha escrita a mano en un recibo impreso: es indicativa, no probatoria.

Un sello de tiempo RFC 3161 es probatorio porque:

  • La TSA es una entidad regulada, auditada según estándares como ETSI EN 319 421.
  • El reloj de la TSA está sincronizado con UTC por medios trazables (a menudo un servicio nacional de tiempo o una referencia de reloj atómico).
  • El certificado de la TSA es emitido por una CA de confianza cuya raíz está en la Lista de Confianza de la UE (LOTL).
  • El token de sello de tiempo es verificable sin conexión por cualquier persona en posesión de la cadena de certificados de la TSA, indefinidamente.

El marco legal que hace esto exigible en la UE es eIDAS (Reglamento UE 910/2014, revisado por 2024/1183). eIDAS define un “sello de tiempo electrónico cualificado” como el emitido por una TSA en la Lista de Confianza de la UE. Tal sello de tiempo goza de la presunción legal de exactitud en todos los Estados miembros. Un sello de tiempo no cualificado sigue siendo útil, pero no obtiene la presunción automática.

Validez a largo plazo, la razón real por la que los archivos necesitan sellos de tiempo

Aquí está el problema más sutil que los sellos de tiempo resuelven. Una firma digital es válida mientras el certificado del firmante sea válido. Los certificados caducan (normalmente de 1 a 3 años), son revocados o tienen su CA emisora cerrada. Dentro de cinco años, la firma de una factura puede ser criptográficamente intacta pero legalmente no verificable porque la cadena de confianza se ha disuelto.

La solución es envolver un sello de tiempo alrededor de la firma en el momento en que la firma todavía es válida. El sello de tiempo prueba: “esta firma era válida cuando se aplicó”. Aunque el certificado caduque después, el registro criptográfico de su estado válido se conserva. Este es el principio detrás de PAdES Long-Term Validation (LTV) y los perfiles CAdES-A.

Para el archivo PDF/A-3, la estructura práctica es:

  1. Crear el PDF/A-3 con la factura XML incrustada.
  2. Aplicar una firma digital.
  3. Aplicar un sello de tiempo RFC 3161 a la firma.
  4. Opcionalmente, volver a sellar cada pocos años antes de que caduque cualquier certificado de TSA en la cadena (esto es lo que significa el “sellado de tiempo de archivo”).

Una factura correctamente archivada tiene al menos los primeros tres pasos. El cuarto es lo que hace que un archivo de 30 años funcione sin intervención en cada ciclo de rotación de certificados.

Verificar un sello de tiempo por cuenta propia

No hay que confiar en la TSA más de lo que la criptografía requiere. Verificar un sello de tiempo implica:

  1. Analizar el TimeStampToken (estructura CMS, ASN.1).
  2. Extraer la huella del mensaje (hash + algoritmo).
  3. Calcular el hash del documento con el mismo algoritmo. Comparar.
  4. Verificar la firma de la TSA sobre el token usando el certificado de la TSA.
  5. Verificar que el certificado de la TSA encadena a una raíz de confianza y era válido en el momento afirmado por el sello de tiempo.
  6. Opcionalmente, comprobar el certificado de la TSA contra los datos de revocación capturados en el momento del archivo.

OpenSSL puede hacer todo esto desde la línea de comandos (openssl ts -verify -in token.tsr -data file.pdf -CAfile chain.pem). No es una caja negra.

Dónde encaja SealDoc

Cuando el proceso de SealDoc produce una factura PDF/A-3, realiza el paso del sello de tiempo automáticamente. El paquete de evidencia que generamos junto con cada factura emitida contiene:

  • El archivo PDF/A-3 con el XML incrustado.
  • El token de sello de tiempo RFC 3161 separado.
  • Un manifiesto con hashes SHA-256 de todos los artefactos del paquete.
  • La cadena de certificados de la TSA en el momento de la emisión, capturada para verificación fuera de línea posterior.

Eso es suficiente para satisfacer una auditoría fiscal en cualquier lugar de la UE, independientemente de si el auditor tiene acceso a Internet a la TSA original. Se puede reverificar todo el paquete sin conexión usando OpenSSL o cualquier biblioteca con compatibilidad PAdES. El archivo Factur-X dentro puede comprobarse independientemente en /check, y el sello de tiempo puede comprobarse independientemente con las herramientas que cualquier auditor ya tiene en su equipo.

La conclusión

Una firma digital sin un sello de tiempo de confianza es una firma con una fecha negable. Un sello de tiempo RFC 3161 de una TSA incluida en la UE convierte eso en un registro legalmente duradero, verificable sin conexión y válido durante décadas. Si se archivan facturas estructuradas durante el período de 7 a 10 años que la mayoría de las leyes fiscales de la UE exigen, esta no es una capa opcional. Es la capa que hace que el archivo valga la pena tener.


← Back to all articles