Whitepaper de Stamping.io — Blockchain para registro de activos y evidencias digitales

Stamping.io
9 min readMay 27, 2019

Resumen. En un sistema económico, donde los costos para producir o vender se incrementan anualmente, y no precisamente por el aumento de sueldos o costos de la materia prima, sino en muchos casos se da por el simple hecho de implementar mecanismos de control que permiten garantizar la calidad de sus productos y/o servicios, o para evitar ser víctimas de un fraude. Si lo pensamos bien, la falta de confianza en las personas o los sistemas, hoy en día generan un alto costo “innecesariamente necesario”. Las entidades gubernamentales tampoco son ajenas a estos problemas; si lo pensamos bien, la falta de confianza es lo que realmente genera sobre costos y burocracia.

Stamping.io propone una solución global basada en criptografía para cifrado de mensajes simétricos y asimétricos, que ayuda a comprobar que el contenido de un documento, transacción o secuencia de datos, ha existido desde un momento del tiempo, y se apoya en la Blockchain para hacerlo de manera transparente, eficiente, económica, descentralizada y segura.

Stamping.io cumple los requisitos de seguridad y arquitectura para convertirse en una solución de gran alcance mundial; las transacciones o hashes (SHA256) son enviadas a través de una API REST (autenticada) hacia un servidor de marca de tiempo, quien se encarga de registrarlas y vincularlas a diferentes redes Blockchain ya sea para generar trazabilidad del activo tokenizado o para demostrar su existencia en un momento del tiempo.

Stamping.io cuenta con un libro mayor descentralizado, inmutable y que almacena las evidencias digitales en un smart contrat que cuenta con los siguientes atributos:

  • evidence: Un hash del tipo SHA-256 que representa al documento o secuencia de datos que se desea inmutar.
  • hash2, hash3: (optional) Otros hash que pueden asociarse a la transacción.
  • data, data1,…, data4: (optional) Datos ASCII o HEX asociados a la transacción, soporta formato XML, JSON o Texto libre.
  • reference: (optional) Valor del hash del tipo SHA1({evidencia}) de otra transacción que se registro previamente y que se desea vincular a esta transacción.
  • transactionType: (optional) Tipo de transacción, es de uso discrecional del usuario para ordenar sus evidencias.
  • url: (optional) Enlace del documento o sitio web donde se encuentra el dato original.
  • to: (optional) LLave pública a quien se desea compartir la transacción.

La arquitectura del sistema mencionado anteriormente permite que las operaciones se procesen de forma simultánea e independiente, donde el rendimiento está limitado solamente por la velocidad para alcanzar un consenso interno sobre el orden de las transacciones.

1. Introducción

Los sistemas centralizados de activos o evidencias electrónicas, que resuelven el problema evidencias digitales por medio de un tercero confiable o autoridad de sellado de tiempo (TSA), básicamente dependen de la confianza de sus usuarios y de los sistemas que ellos confían. En lo que se refiere a la confianza, cumplen dicho objetivo pero no pueden crear activos digitales que puedan ser trazados y evitar el doble uso en un momento del tiempo.

Dichos sistemas no pueden competir con las soluciones que se derivan de la criptografía y, por lo general, tienen una red de pares o peer-to-peer, donde muchos nodos se encuentran interconectados entre si, guardando una copia de la información al mismo tiempo en la se registran, cuando más grande es la red, es mas difícil poder modificar la historia que se esta registrando, creando de esta forma un libro mayor compartido (DLT).

En esencia, una correcta red se forma con nodos de confianza que cuenten con un mecanismo que incentiva a los usuarios a mantener la viabilidad del sistema y compartir de enormes recursos computacionales para apoyar a la red, siendo un verdadero reto el atraer a estos nodos de confianza para que participen en una red compartida.

Como resultado, registrar activos o evidencias digitales en un tercero de confianza centralizado se esta volviendo cada vez mas obsoletos si lo comparamos con los sistemas modernos basado en la arquitectura de cadena de bloques almacenados en nodos de confianza.

La centralizando de los sistemas actuales ocasiona otra desventaja importante es la baja velocidad de procesamiento de las transacciones, lo que los hace inadecuados para un uso global.

Se necesita un nuevo sistema que dependa de la criptografía y aceptación de los nodos, y no de la confianza que se le tenga al sistema centralizado. Considerando que el sistema deberá proporcionar un rendimiento suficiente para el uso diario a gran escala.

Stamping.io propone una solución para el problema anterior. La solución se basa en un servidor de marca de tiempo donde cada hash recibido se convierte en una evidencia y a la vez en un activo digital. El servidor actúa como un tercero de confianza para resolver el problema del doble uso o doble gasto, generando la trazabilidad del mismo verificando el orden cronológico de las transacciones asociadas. La confianza está garantizada debido al anclaje del historial de operaciones en diferentes redes blockchain (privadas y públicas), además cada 30 minutos una autoridad de sellado de tiempo genera un pdf con todos los hash recibido los mismos que se liberan públicamente, se firman digitalmente y se incluye un timestamp que evita el repudio legal.

2. Registro de activos y evidencias digitales

Un activo digital se define como un token o cadena de datos públicos que representa a un identificador dentro de la base de datos distribuida y que en lo sucesivo llamaremos dirección del token del activo digital. Para Stamping.io un registro en nuestra plataforma se crea como un activo digital, con el propósito de generar trazabilidad o simplemente para demostrar su existencia en un momento del tiempo.

Puede registrarse en su propio nodo o en un nodo compartido que ofrece Stamping.io a través de una API REST, donde el propietario de la cuenta crea y firma una transacción (hash SHA256); el hash de la transacción es enviado a las diferentes blockchain para crearlo como activo o evidencia digital para garantizar su existencia en el libro mayor de cada nodo que componen las redes.

Arquitectura de Stamping.io

Usuarios
Para Stamping.io los datos provienen desde servidores y no de personas, por lo que se considera como usuario a todo equipo que se interconecta a nuestra plataforma para registro de activos o evidencias digitales. Cada usuario de Stamping requiere generar un token de acceso que le permite acceder a la plataforma a través de la aplicación web o las APIS REST de la solución.

Privacidad de la información
Las transacciones que son registradas y firmadas por los usuarios se registran en un cache privado y solo pueden ser consultadas a través de las APIs de Stamping.io por los usuarios que generaron la transacción y en algunos casos por el usuario destinatario de la transacción.

Rendimiento
Para abordar las deficiencias que puede haber en el tiempo de anclaje y consulta, Stamping.io utiliza una solución híbrida basada en un cache centralizado que proporciona la corrección y el orden cronológico de las transacciones. Esto es similar a una solución con una autoridad central de confianza, pero tiene un mecanismo de anclar regularmente todo el historial de transacciones a diferentes libros públicos e inmutables.

3. Servidor de Cache

Al recibir un activo o evidencia digital, el servidor la agrega a la cola de procesamiento. El procesamiento se organiza de la siguiente manera:

  • El servidor verifica si el token de acceso es válido e identifica al nodo o usuario que le corresponde.
  • El token es registrado en las redes privadas como activo digital (Stamping.io Red Hyperledger Fabric, LACChain Red Quorum, etc.)

Cada 30 minutos un proceso toma a los token’s que se encuentran en la cola de procesamiento y realiza los siguientes pasos:

  • Se registra cada hash en la red de evidenChain para que una autoridad de sellado de tiempo genere un documento PDF con los diferentes hash recibidos donde esta autorizada central coloque un sello de tiempo basándose en la ley de firmas digitales avanzadas.
  • Se genera un árbol de merkle con todas las transacciones y el hashroot es anclado en las redes públicas como Ethereum y Bitcoin.

El problema, por supuesto, es que proporcionar una versión genuina del historial de la cadena por el servidor depende de la confianza en la generación del árbol de merkle. Necesitamos una manera para que el usuario tenga la seguridad de que los enlaces previos de los activos no se han eliminado. Para eso, el servidor ancla regularmente el estado de la cadena en un libro mayor inmutable generalmente reconocido. Así es como se construye la cadena, y el enlace siguiente fortalece todos los anteriores.

4. Bloques

Para simplificar el anclaje del historial de datos, las transacciones se organizan en bloques, que consisten en un árbol de Merkle a partir de los hashes de transacción y el encabezado del bloque. Estos árboles se crean a partir de una selección ordenada de transacciones en la cadena durante un período predefinido. Un encabezado de bloque se define como un par ordenado (el hash del encabezado del bloque anterior y la raíz del árbol de Merkle del actual). Por lo tanto, los bloques están vinculados en una cadena ordenada, en donde un intento de cambiar la información de cualquier bloque requiere el recálculo de todos los siguientes. Por lo tanto, es suficiente anclar solo el hash de encabezado en lugar de toda la cadena de transacciones.

El uso de blockchain simplifica tanto el anclaje del historial de datos como la verificación de la existencia de una transacción. Para verificar si una transacción está incluida en un bloque, no es necesario que el usuario descargue todo el historial de transacciones, lo cual es inaceptable debido a su tamaño y velocidad de crecimiento. Un usuario puede solicitar un enlace al bloque, que contiene la transacción y la ruta de Merkle que lo conduce, para asegurarse de que la transacción correspondiente pertenece al bloque, y todos los bloques subsiguientes son aceptados y verificados por el servidor.

5. Marcas de tiempo de anclaje

El anclaje de la historia de una transacción se establece a través de un anuncio público de datos en un libro mayor inmutable, como en un periódico o publicación de Usenet, que garantiza el origen inequívoco de los datos. Desde el 2017, es razonable usar sistemas descentralizados públicos peer-to-peer como un libro mayor para el anclaje, como Bitcoin y Ethereum, ya que estos tienen un nivel suficiente de confiabilidad.

6. Data Wallet

Una dirección de cuenta única consta de una secuencia alfanumérica de 28 bytes.

Una cuenta cuenta con los siguientes atributos asociados: Nombre, Documento de Identificación, correo electrónico, secreto para acceso a portal y número de teléfono. Cuando se genera su token de acceso para el uso de la API REST Stamping.io genera los siguientes datos:

Ademas el usuario puede recibir una copia de las transacciones que envía y/o recibe a Stamping.io, el callback es enviado a un webhook que cada usuario matricule en su data wallet.

Configuración del Callback de Stamping.io

7. Estampando de activos o evidencias digitales

Para registrar un token que represente un activo o evidencia digital, se requiere calcular el valor hash del tipo SHA256 de una sencuencia de datos que puede representar un documento o una transacción, este valor es enviado a la api de registro de evidencias de Stamping.io , tal como se muestra en este codigo PHP:

<?php 
header('Access-Control-Allow-Origin: *');
$ch = curl_init();
$evidence=sha256(<datos>);
$data = array('evidence' => $evidence); //Puede agregar más atributos descritos en la tabla superior (Datos POST).

curl_setopt($ch, CURLOPT_URL, "https://api.stamping.io/stamp/?evidence=".$evidence);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Authorization: Basic <token>"
)
));

$response = curl_exec($ch);
curl_close($ch);
echo ($response);
?>

La respuesta que recibirá es:

{ 'code':'200',
'message':'ok',
'trxid':'<identificador del token>'
}

8. Conclusión

Stamping.io cumple con los requisitos técnicos para brindar una solución de confianza a nuestros usuario que se deriva de la imposibilidad de cambiar el historial de los registros la cadena que se ha anclado en los libros mayor de terceros.

El modelo de transacciones personalizado que se describe permite el procesamiento paralelo y asíncrono, brindando un rendimiento adecuado para el intercambio de activos en gran escala.

--

--

Stamping.io

Stamping.io es una red de nodos Blockchain que permiten estampar evidencias digitales para demostrar su existencia en un momento del tiempo.