# OpenTimestamps

OpenTimestamps (OTS) es un sistema descentralizado de sellado de tiempo que utiliza Bitcoin para probar la existencia de documentos. Interactúa normalmente con servidores de calendario para agrupar peticiones y registrar atestaciones.

## Prueba OTS y sello de tiempo

Una prueba OTS está compuesta por un sello de tiempo (también llamado «fichero OTS»), así como por el fichero original al que se refiere ese sello de tiempo. Cualquier persona o entidad que posea la prueba OTS puede verificar que el contenido del fichero se mantiene sin modificaciones al menos desde el momento en que se creó el sello de tiempo. Esta verificación de integridad se puede obtener sin delegar la consulta en un tercero de confianza.

### Creación del sello de tiempo

La operación stamp crea la primera versión del sello de tiempo. Se aplica sobre el fichero del que se quiere demostrar su existencia (fichero original).
La operación stamp calcula el hash SHA256 del fichero original, le concatena un nonce aleatorio de 128 bits para mantener la privacidad, y vuelve a calcular el hash SHA256, enviando este único valor a los servidores de calendario. Cada uno de los servidores de calendario añadirá el hash recibido a su árbol de Merkle y devolverá la respuesta necesaria para generar el fichero OTS inicial. Este fichero OTS está aún incompleto porque no contiene el registro en la cadena de bloques.
Una vez que ha transcurrido un tiempo prudencial, el usuario lanzará la operación upgrade sobre el mismo fichero OTS. Así se comunicará con los servidores de calendario y se actualizará el fichero OTS con la atestación de la cabecera de bloque de Bitcoin.
También se pueden crear sellos de tiempo para varios ficheros diferentes de forma simultánea. En ese caso, la operación stamp envíará una única petición a los servidores de calendario con una raíz de árbol de Merkle derivada a partir de los ficheros originales. Posteriormente esa misma operación recalculará las rutas del árbol de Merkle y creará los ficheros OTS adaptados a cada uno de los ficheros originales.

### Verificación de la prueba OTS

La verificación de la prueba OTS requiere el fichero OTS y el fichero original. Para que la verificación se pueda realizar sin depender de terceros de confianza, el usuario debe tener un nodo de Bitcoin en su máquina con la cadena de bloques actualizada.

## Formato del sello de tiempo

El sello de tiempo se divide en tres secciones principales:
* Hash del fichero original
* Construcción del árbol de Merkle
* Atestación de la cabecera de bloque de Bitcoin
El sello de tiempo se guarda en un fichero binario para ahorrar en espacio y evitar problemas de interpretación, de codificación y de compatibilidad entre sistemas. Generalmente, este fichero tiene una extensión .ots y su número mágico es \x00 O p e n T i m e s t a m p s \x00 \x00 P r o o f \x00 \xbf \x89 \xe2 \xe8 \x84 \xe8 \x92 \x94.
La operación info presenta el contenido del fichero de sello de tiempo de forma legible. En este caso se muestra una única atestación del fichero hello.txt que alcanza hasta la cabecera del bloque 518387 de Bitcoin.

## Casos de uso

* Los 750 000 000 ficheros de Internet Archive han sido registrados mediante OpenTimestamps para que no puedan ser modificados de forma encubierta. La evidencia final resultó en la anotación irreversible de la raíz de Merkle de todos esos ficheros en una única transacción de Bitcoin.
* Bitcoin Core usa OpenTimestamps para sellar el tiempo en Git de las actualizaciones de su código fuente.
Otras aplicaciones incluyen publicaciones defensivas, evidencias contra plagios, verificación de firmas desde claves PGP revocadas, etc.