Cronosellodeja constancia

Un ejemplo completo, con números reales

Esto no es una simulación. Es un sellado que ocurrió el 7 de septiembre de 2026, y todos los valores de esta página se pueden comprobar en un explorador de bloques que no es nuestro. Si algo de lo que decimos no cuadrara, esta página sería el sitio donde se vería.

El esquema

La pregunta natural es «¿cómo se llega, desde un bloque de Bitcoin, hasta la huella de mi documento?». La respuesta tiene un matiz que conviene decir antes que nada:

No se llega. No se puede ir hacia atrás. SHA-256 no se deshace, y además la hoja va cegada con 16 bytes aleatorios, así que los 32 bytes que hay grabados en la cadena no revelan ni qué documento es, ni de quién, ni cuántos había en el lote. Eso no es un fallo: es exactamente la razón por la que de su navegador solo salen 64 caracteres.

Lo que sí se hace —y es lo que enseña el esquema— es un encuentro. Por arriba se lee la cadena pública, que no es de nadie. Por abajo se calcula desde su fichero y su certificado. Y las dos mitades tienen que dar el mismo valor.

Del bloque de Bitcoin a la huella del documentoEsquema en dos mitades. Arriba, lo que cualquiera lee en la cadena pública: el bloque 965.946, su raíz de Merkle, la transacción y el OP_RETURN. Abajo, lo que se calcula desde el fichero: su huella SHA-256, la hoja cegada con el nonce, la raíz del lote y los pasos del árbol de OpenTimestamps. Las dos mitades se encuentran en el OP_RETURN y tienen que dar el mismo valor.SE LEE EN LA CADENA PÚBLICA · no hace falta pedirnos nadaBLOQUE 965.946 DE BITCOIN00000000…3cdeebcaminado el 07-09-2026 a las 15:23:28 UTCRAÍZ DE MERKLE DEL BLOQUE46c0e3f8…15c62487va dentro de la cabecera que se minóTRANSACCIÓN1bae7276…8290f91buna de las 3462 del bloquela cabecera del bloque la contienecamino de Merkle dentro del bloqueuna salida de la transacción es un OP_RETURNOP_RETURN · 32 BYTES GRABADOS EN LA CADENAc30bbc4c…741dcd4aaquí se encuentran las dos mitadesSE CALCULA CON SU FICHERO Y SU CERTIFICADO · sin conexión, con software libreRAÍZ DEL LOTE20b708ef…a90db8eclo que se entregó a OpenTimestampsHOJA CEGADA20b708ef…a90db8ecaquí coincide con la raíz: el lote tenía un solo documentoHUELLA DEL DOCUMENTO95b0fd23…fd42354eel hash inicial: 64 caracteres, lo único que salió del navegadorSU FICHEROcontrato-despliegue.txtno lo tenemos nosotros; lo tiene usted17 pasos del árbol de OpenTimestamps (van en el recibo .ots)camino de Merkle del lote (aquí vacío)SHA-256( 00 ‖ huella ‖ nonce c011fbe4…9708c264 )SHA-256 del fichero, byte a byte
Del bloque de Bitcoin a la huella del documento, con los valores reales del sellado MS8273D1CNJCESPP. Las flechas de abajo van hacia arriba a propósito: desde el bloque no se puede bajar hasta la huella —SHA-256 no se deshace y la hoja va cegada— así que la comprobación consiste en subir desde el fichero y encontrarse con la cadena en el OP_RETURN.

Los valores exactos

Ficherocontrato-despliegue.txtNo lo tenemos. Nunca salió del navegador de quien lo selló, y Expertiot no conserva copia de nada.
Huella SHA-25695b0fd2349f68a707272bfc1080fa68787006278328765978793766dfd42354eEl hash inicial. Lo calculó el navegador; es lo único que viajó.
CódigoMS8273D1CNJCESPPSe puede cotejar en cronosello.expertiot.es/v/MS8273D1CNJCESPP, sin credenciales.
Nonce del cegadoc011fbe4acfe8dfaa567b57a9708c26416 bytes aleatorios. Van impresos en el certificado, y sin ellos la cuenta no sale: son los que impiden que nadie deduzca la huella desde la cadena.
Hoja cegada20b708ef91f133141709153e5327e9b9c5ef7f3cfbb7f62d43a525b3a90db8ecSHA-256( 00 ‖ huella ‖ nonce ). El byte 00 delante distingue una hoja de un nodo, para que nadie pueda hacer pasar una cosa por la otra.
Raíz del lote20b708ef91f133141709153e5327e9b9c5ef7f3cfbb7f62d43a525b3a90db8ecCoincide con la hoja porque este lote llevaba un solo documento. En un lote de quince, aquí habría que subir por el camino de Merkle que da el certificado.
OP_RETURNc30bbc4cf576f722d17fd9190cd0d2a4c959e4291356fd19639715b2741dcd4aLos 32 bytes que quedan escritos en Bitcoin, después de 17 pasos del árbol de OpenTimestamps que van dentro del recibo .ots incrustado en el certificado.
Bloque00000000000000000001c2f9e9f9401cddec5e1814b5698770b5865c3cdeebcaAltura 965.946, minado el 07-09-2026 a las 15:23:28 UTC, con 3462 transacciones. Verlo en mempool.space.
Raíz de Merkle del bloque46c0e3f8ccd1cdc0371a22a58c8ab99e2912efa685331a671653351d15c62487Va dentro de la cabecera que se minó. Cambiar una sola transacción del bloque la cambiaría entera.

Tres anclajes, no uno

OpenTimestamps trabaja con varios calendarios independientes y cada uno publica su propia transacción. Este sellado está en la cadena 3 veces, por tres caminos que no dependen entre sí: la prueba sobrevive a que dos de los tres desaparezcan.

Bloque 965.9461bae7276300427a8b247e41aceeb71a6dcddc9c8a703db6fc583e9728290f91bCalendario alice.btc.calendar.opentimestamps.org. Ver la transacción.
Bloque 965.956faed463c3a8bfb67847c96d3b22b4c125728db8acdbe44b1ded72cbf5bb7aba5Calendario bob.btc.calendar.opentimestamps.org. Ver la transacción.
Bloque 965.9748b61de7d4a1e6b8c09da114227c266f434f65baea63d4a82c0cc640701b1e66eCalendario finney.calendar.eternitywall.com. Ver la transacción.

El certificado enseña el más temprano de los tres, que es el límite superior más ajustado y por tanto el que menos concede.

Cómo comprobarlo usted mismo, sin nosotros

  1. Saque el recibo del certificado. El PDF lleva dentro, como ficheros adjuntos, el recibo documento.ots y el merkle.json. En Adobe Acrobat Reader (gratuito): menú Vista › Mostrar/Ocultar › Paneles laterales › Adjuntos; en Firefox: barra lateral › Vistas › Adjuntos; Edge, Chrome y Vista Previa suelen no enseñar los adjuntos. Guárdelos en una carpeta. Con poppler instalado, en una terminal: pdfdetach -saveall certificado.pdf.
  2. Sin comandos, verifíquelo contra Bitcoin. Abra opentimestamps.org/#stamp-and-verify (una web ajena a nosotros, en inglés), arrastre primero documento.ots al recuadro de borde discontinuo (o púlselo para elegirlo) y, cuando lo pida, su fichero: su huella se calcula en su navegador y el fichero no se sube. Responde con el bloque de Bitcoin y el día: ya existía, a más tardar, entonces. No pasa por nosotros en ningún momento, pero sí consulta un explorador de bloques ajeno.
  3. O por línea de comandos, si tiene un nodo de Bitcoin Core propio (aunque sea podado, sincroniza toda la cadena): con un recibo ya confirmado, así no se consulta a ningún tercero. En Linux, o en Windows dentro de WSL (con el nodo también dentro de WSL), y con Python 3 y pipx, escriba en una terminal, en la carpeta donde guardó el recibo, pipx install opentimestamps-client, que instala el cliente, y ots verify -f su-fichero documento.ots, que verifica el recibo contra su documento (cambie su-fichero por su nombre). Para comparar a mano la huella de su fichero: Get-FileHash su-fichero en Windows (PowerShell), shasum -a 256 su-fichero en macOS, sha256sum su-fichero en Linux; tiene que salir la misma cadena de 64 caracteres que figura en la página 1 del certificado (Get-FileHash la escribe en mayúsculas, y es la misma).
  4. Y si quiere hacerlo a mano, el esquema de arriba tiene los pasos: el recibo .ots es una lista de operaciones («antepón esto», «añade aquello», «vuelve a aplicar SHA-256») que arranca en su huella y termina en el OP_RETURN que está en el bloque.

Qué queda fuera, dicho aquí y no en letra pequeña

Entre el momento en que se selló (14:55:30 UTC) y el momento que atestigua el bloque (15:23:28 UTC) pasaron 28 minutos. Bitcoin no dice nada de lo que ocurrió dentro de esa ventana: solo garantiza que el documento existía antes del final. La hora exacta del sellado la declaramos nosotros, y vale lo que valga nuestra palabra.

Además, la marca de tiempo de un bloque la declara quien lo minó, con un margen que el protocolo tolera. Por eso lo honesto es leerlo como un límite superior: «este documento ya existía antes de este bloque», nunca «este documento se creó a esta hora».

En cronosello.expertiot.es/hoja está la hoja de una cara con lo que este tipo de prueba demuestra y lo que no, escrita para quien tenga que valorarla.