La petición lleva la huella
El cliente calcula el SHA-256 del archivo y envía a la autoridad solo esa huella, con un número aleatorio (nonce) para reconocer la respuesta. El archivo no viaja.
Timestamp RFC 3161 · guía técnica
Una autoridad de sellado de tiempo (TSA) firma la huella de un archivo junto con una fecha y una hora. Aquí tienes qué contiene esa respuesta, cómo comprobarla con OpenSSL o en el navegador y cómo pedirla por API.
¿Buscabas convertir un timestamp Unix a fecha? Esto es otra cosa: aquí se le pone fecha a un archivo.
Abre el validador: pones el archivo y su sello, y la huella se calcula en tu navegador.
Emitirlos desde tu sistema: la API →Qué es
RFC 3161 es el estándar para el sellado de tiempo, y lo que hace es más simple de lo que parece.
El cliente calcula el SHA-256 del archivo y envía a la autoridad solo esa huella, con un número aleatorio (nonce) para reconocer la respuesta. El archivo no viaja.
La autoridad de sellado de tiempo une esa huella a una fecha y una hora de su reloj, y lo firma con un certificado habilitado solo para sellar.
Devuelve un .tsr: el estado de la petición y, si la concede, el token firmado. Con el archivo y el token, cualquiera puede comprobarlo después.
Dentro del .tsr
Un .tsr es una estructura ASN.1 codificada en DER. Estos son los campos que importan, con el nombre que les da el estándar.
statusmessageImprintgenTimeserialNumberpolicynonceSignedDataUn .tst es solo el token, sin el estado. Los dos llevan la misma prueba: cambia el envoltorio, no lo que demuestra.
Cualificado o no
Técnicamente, un token RFC 3161 es igual lo emita quien lo emita: la huella, la hora y la firma se comprueban de la misma manera. Lo que cambia es quién lo firma.
El Reglamento (UE) 910/2014 (eIDAS) llama cualificado al sello de tiempo que cumple su artículo 42: vincula la fecha y la hora a los datos de forma que impide razonablemente modificarlos sin que se detecte, se basa en una fuente de tiempo exacta vinculada al tiempo universal coordinado y lo firma o sella un prestador cualificado de servicios de confianza, que figura como tal en la lista de confianza de un Estado miembro.
A ningún sello de tiempo se le pueden negar efectos jurídicos ni admisibilidad como prueba solo por ser electrónico o por no ser cualificado (art. 41.1). El cualificado goza además de la presunción de exactitud de la fecha y la hora y de integridad de los datos (art. 41.2).
Cómo conseguir un sello de tiempo cualificado emitido por la FNMT-RCM →Verificar con OpenSSL
Necesitas el archivo, el .tsr y el certificado de la autoridad que lo firmó (en un paquete de Sellat, autoridad-sellado.pem). Nada sale de tu máquina.
openssl ts -reply -in sello.tsr -text Muestra el estado y el contenido del token: la política, la huella («Message data»), el número de serie, la hora y el nonce.
openssl dgst -sha256 archivo Tiene que coincidir con el «Message data» del paso anterior, que OpenSSL muestra en bloques hexadecimales. Si cambia un solo byte del archivo, no coincide.
openssl ts -verify -in sello.tsr -data archivo -CAfile autoridad-sellado.pem -partial_chain Si todo cuadra, responde «Verification: OK».
El certificado de la autoridad es una hoja, no una CA: sin -partial_chain OpenSSL busca a su emisor y falla. Es el motivo más común por el que un validador rechaza un sello correcto. Si lo que tienes es un .tst, añade -token_in a los comandos.
El validador de sellos de tiempo acepta el .tsr o el .tst junto con el archivo. La huella se calcula en tu dispositivo y solo viajan la huella y el sello. Te dice por separado si se cumplen la estructura, la huella, la firma, el certificado firmante y la lista de confianza de la UE.
Verificar un .tsrPor API
Sellat no es una autoridad de sellado: el token RFC 3161 que obtienes a través de Sellat es el sello de tiempo cualificado emitido por la FNMT-RCM. Sellat lo pide sobre la huella que envías, lo verifica contra la lista de confianza de la UE y lo guarda dentro de tu prueba.
El SHA-256 del archivo, en tu sistema. Es lo único que se envía.
POST /api/v2/proofs con "qualified": true, o POST /api/v2/proofs/{id}/qualified sobre una prueba que ya existe. Con Idempotency-Key, un reintento no cuenta dos veces ni sella dos veces.
GET /api/v2/proofs/{id}/qualified.tsr devuelve la respuesta de la autoridad tal cual, en DER, lista para OpenSSL.
curl https://sellat.app/api/v2/proofs \
-H "Authorization: Bearer $SELLAT_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"hash":"<sha256 del archivo>","qualified":true}' Cada sello descuenta uno de los que tiene tu cuenta: el de bienvenida o uno de tus packs. Si no queda ninguno, la API responde 402 antes de crear nada.
Alcance
Un token RFC 3161 válido demuestra que esa huella, y por tanto ese archivo exacto, existía como tarde en la hora que firmó la autoridad, y que no ha cambiado desde entonces.
Fija desde cuándo existe el archivo, no desde cuándo existe lo que muestra su contenido. No prueba autoría, ni titularidad, ni veracidad; y la hora vale lo que vale la autoridad que la firma.
Preguntas frecuentes
Sí: son el mismo concepto con tres nombres. En inglés timestamp, en castellano sello de tiempo o sellado de tiempo, y en la norma europea «sello de tiempo electrónico». Lo que cambia entre unos y otros no es el nombre, sino si son cualificados.
El .tsr es la respuesta completa de la autoridad (TimeStampResp): el estado de la petición más el token. El .tst es solo el token (TimeStampToken, un SignedData CMS). Muchos validadores solo aceptan el .tst; con OpenSSL, un .tst se lee añadiendo -token_in.
Porque el certificado de la autoridad que le pasas con -CAfile es una hoja, no una CA, y OpenSSL intenta construir la cadena hasta una raíz. Con -partial_chain acepta la hoja como punto de confianza y verifica el sello.
Para demostrar técnicamente que un archivo existía, sí: un token RFC 3161 es un token RFC 3161. Lo que no obtienes es la presunción legal del artículo 41.2, que solo acompaña a un sello emitido por un prestador cualificado de la lista de confianza de la UE.
En el sello, la del campo genTime, que la autoridad firma en UTC. En una prueba de Sellat conviven además la hora del anclaje público: son horas distintas, de capas distintas, y se muestran siempre por separado.
Sí. OpenSSL y el validador de esta web aceptan el .tsr o el .tst de cualquier autoridad. El validador solo lo llama cualificado si la autoridad figura como servicio cualificado en la lista de confianza de la UE.
Sí. La API acepta huellas por HTTP y devuelve una prueba por cada una, sin enviar los originales; hay además una herramienta de línea de comandos de código abierto. Es lo que usamos nosotros para sellar logs cada hora.
Compruébalo en el navegador con su archivo. Si lo que quieres es emitirlos desde tu sistema, empieza por la API.
Abrir el validador Emitirlos desde tu sistema: la API →