OpenTimestamps ( OTS ) es un proyecto de código abierto [2] que tiene como objetivo proporcionar un formato estándar para el sellado de tiempo de blockchain. [3] Con el advenimiento de sistemas como Bitcoin , es posible crear y verificar pruebas de existencia de documentos (marcas de tiempo) sin depender de un tercero confiable ; esto representa una mejora en términos de seguridad, ya que excluye la posibilidad de que un tercero confiable malintencionado (o descuidado) comprometa la marca de tiempo. [4]
OTS define un conjunto de reglas para crear fácilmente marcas de tiempo y luego verificarlas de forma independiente. Actualmente, el sellado de tiempo con Bitcoin es totalmente compatible, sin embargo, el formato es lo suficientemente flexible como para admitir una variedad de métodos. [a]
Cualquiera podría crear marcas de tiempo con la cadena de bloques sin permisos pagando las tarifas de transacción; para mayor comodidad, OTS construyó una infraestructura que agrega solicitudes de marcas de tiempo de los usuarios y las empaqueta en transacciones financiadas por servidores de calendario públicos; como resultado, los usuarios pueden marcar el tiempo de forma gratuita, en un entorno de confianza minimizada. [b]
Una marca de tiempo es una prueba de que algunos datos d existían antes de un cierto punto en el tiempo. [5]
Para crear dicha prueba, resulta que no es necesario publicar d en la blockchain, lo que sería costoso, sino que basta con confirmar d en la blockchain. Dicha confirmación prueba que d existía antes de un bloque determinado, en el sentido de que si d cambia, la prueba se vuelve inválida y, por lo tanto, inútil.
La prueba consiste en una secuencia de operaciones de compromiso, como sha256
, append
, prepend
. [c]
Estas operaciones son la ruta criptográfica que prueba que d se compromete con un determinado encabezado de bloque. En otras palabras, que d hizo que el encabezado del bloque tuviera su valor, de hecho, si d fuera diferente, entonces, debido a las propiedades matemáticas de las operaciones de compromiso, el encabezado del bloque sería diferente. Para verificar el compromiso, las operaciones se aplican en secuencia a los datos d , luego se verifica que el resultado, que debería ser la raíz merkle de la transacción, sea igual al observado en la cadena de bloques; si la verificación sale bien, entonces se puede afirmar que d existía antes del bloque.
Para el archivo con marca de tiempo hello.txt
, la prueba OTS se codifica en un archivo llamado hello.txt.ots
que contiene:
Con esta información, un retador puede verificar de forma independiente que hello.txt
existía antes de un determinado bloque.
OTS ofrece a los usuarios múltiples y sencillas formas de crear y verificar de forma independiente marcas de tiempo: [ cita requerida ]
En las siguientes secciones se muestra un ejemplo del uso del cliente Python.
La operación de sello crea la primera versión de la marca de tiempo. Se aplica al archivo cuya existencia se desea comprobar (archivo original).
$ cat hello.txt ¡Hola mundo! $ ots stamp hello.txt Enviando al calendario remoto https://a.pool.opentimestamps.org Enviando al calendario remoto https://b.pool.opentimestamps.org Enviando al calendario remoto https://a.pool.eternitywall.com
La operación de sello calcula el hash SHA256 del archivo original, concatena un nonce aleatorio de 128 bits para mantener la privacidad y recalcula el hash SHA256, enviando este valor único a los servidores de calendario. Cada uno de los servidores de calendario agregará el hash recibido a su árbol Merkle y devolverá la respuesta necesaria para generar el archivo OTS inicial. Este archivo OTS aún está incompleto porque aún no contiene el registro en la cadena de bloques. [6]
Una vez transcurrido un tiempo razonable, el usuario ejecutará la operación de actualización en el mismo archivo OTS. Esto se comunicará con los servidores de calendario y actualizará el archivo OTS con la certificación del encabezado del bloque de Bitcoin. [5]
$ ots upgrade hello.txt.ots ¡Éxito! Marca de tiempo completa
También es posible crear marcas de tiempo para varios archivos diferentes simultáneamente. En ese caso, la operación de estampar enviará una única solicitud a los servidores de calendario con una raíz Merkle derivada de los archivos originales y, posteriormente, esa misma operación calculará las rutas del árbol Merkle y creará las marcas de tiempo para cada uno de los archivos originales.
La verificación de la prueba OTS requiere tanto el archivo OTS como el archivo original. El usuario también debe tener un nodo Bitcoin actualizado [f] en su propia máquina para realizar la verificación sin depender de terceros de confianza. [7]
$ ots verifica hello.txt.ots Se asume que el nombre del archivo de destino es 'hello.txt' ¡Éxito! Bitcoin certifica que los datos existían el lunes 16 de abril de 2018 a las 01:15:16 CEST
La estructura básica de una marca de tiempo se divide en tres secciones principales: [6]
La marca de tiempo se guarda en un archivo binario para ahorrar espacio y evitar problemas de interpretación, codificación y compatibilidad entre sistemas. [6] Generalmente, este archivo tiene una.ots extensión 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
. [8]
La operación de información presenta el contenido de la marca de tiempo en un formato legible para humanos. En este caso, una única atestación de lahola.txtSe muestra el archivo, que hace un hash hasta el encabezado del bloque de Bitcoin en el bloque 518387.
$ ots info hello.txt.ots Hash sha256 del archivo: 03ba204e50d126e4674c005e04d82e84c21366780af1f43bd54a37816b6ab340 Marca de tiempo: append 72d8a09f54b12580b48c2f7c7dea4ce0 sha256 -> append fe0d089c9bfe5289c3ee579904af3551 sha256 anteponer 5ad3d92b anteponer 8fefb42191040403 verificar PendingAttestation('https://alice.btc.calendar.opentimestamps.org') sha256 anteponer f0e8b62a519b0b8fad763c33c558e0179a43b8d89cb4130b6dbaa91e3d3252f6 sha256 anteponer beca183da3f86784a7d54778bc48e78c570245d51474f32475e6d1851989b140 sha256 añadir a95879c35c15ace7dc5fd1d2cf0a7d9b0e4110b5b8a74da4c64082835f6f6a2e sha256 añadir cf9b259e4506235f97225706f3a675f51ecf2657814639d87e4e6f42d8581ae7 sha256 anteponer e3b7ff694e1b14b4420556ca77ea8e9509e44b7fbed0dc9a3b67c00fcf016ca2 sha256 anteponer 01000000017230dffb1edd7cae0c8feb3fec7c91c34b33b22fdfac071b83e790ce34254b340000000017160014a4282cbf0f17fd6d51b61da f7cf4d56e32183b60fdffffff02d7c062000000000017a914365c46ff772b9f1da73efeb2c559777e1a2c33b4870000000000000000226a20 adjuntar f2e80700 # Id . de transacción de Bitcoin 7e6e5aafa1fc9d933992621a7ac321dc7b9368d0e1baa72ff77665b07b75315f sha256 adjuntar sha256 d67f1615f986694d707d7d044883c7885f3dded2ac9df5f6b9270a5bdda38aa3 sha256 sha256 anexar e551a80b2bdd88f417fc95014662f7a65d8c0c4d833b6df034bc12f1af35b953 sha256 sha256 anexar 0902830fc37fde4996c350de40c0ae621c739ce002a7be4b3725d7e281fc02a3 sha256 sha256 anexar 7ac1e262423598f1477825882f78ededc98b44bf0136f059e438391aa0e7a686 sha256 sha256 anteponer 9ee83975bef756160275a336203059109fd4336572e5e47e9a3edadb82a8934c sha256 sha256 agregar 7a3229b63fc7a88d4edde4aa5b855416265842120fde246462271e5418f895bd sha256 sha256 anteponer a4c712ca130f63862f329874f11466eb74ee7b505c191344ee11b30d14ca4946 sha256 sha256 anexar 13bf98cdb708ed3321b8d48ff290c5bdbefa6fb9be34717e97a3f3cfa9b87994 sha256 sha256 anteponer d2aec8bd2edf2d6d10606df92f1b8b53a97362d7aba7d3fa15bf55c0aab94e35 sha256 sha256 verificar BitcoinBlockHeaderAttestation(518387) # Raíz merkle del bloque de Bitcoin b4f71191dc633cfb125543211022b1059d78b42a359408da5958fc15231ef6de
Las aplicaciones incluyen publicaciones defensivas . [9]