Blockchain, la pieza que completa el IoT

(tiempo de lectura: 10 min)

Por fin llegamos al tema de blockchain.

Blockchain es sin duda una tecnología tan desconocida como criticada, especialmente en los círculos más neófitos.
En mi opinión Blockchain genera polémica porque se asocia directamente con las criptomonedas, pero no es el objetivo de esta artículo hablar sobre ellas, sino sobre la tecnología que subyace y que las hace posible.

La tecnología Blockchain nos ofrece grandes ventajas en la seguridad y automatización de sistemas y aplicaciones, justo lo más complicado dentro del mundo IoT.

Pero, ¿cómo es posible que una tecnología, mal conocida por servir para que los piratas informáticos tengan una moneda propia, nos vaya a servir para automatizar nuestros sistemas?
No te preocupes, voy a hacerte una breve, muy breve, introducción a qué es Blockchain

¿Cómo funciona un blockchain?

La primera pista la tienes en el propio nombre: cadena de bloques. En los textos en inglés te lo encontrarás como «ledger«, es decir, un libro mayor o mayor contable.
Ahora sí que te he dejado con la boca abierta, eh? Un libro contable? Cada vez nos alejamos más del IoT ! 🙂

Un libro mayor está compuesto por una serie de páginas con un formato determinado, por ejemplo: número de asiento, fecha, concepto, cliente, debe/haber, cantidad, etc

Libro mayor
Fuente: https://academy.bit2me.com/que-es-ledger-distribuido-libro-mayor/

Servían antiguamente para llevar la contabilidad de los negocios. ¿Qué ventajas tenían? Que no podías arrancarle una hoja ya escrita, pues se vería el salto de números de asiento. Y que el saldo era una suma continua, de tal forma que todo estaba calculado según el asiento anterior y la contabilidad debía cuadrar de forma exacta.
Bueno, más o menos te haces una idea, no hace falta que profundicemos mucho.

¿Cómo se lleva esto al mundo digital? Pues con blockchain ….

Blockchain es una estructura de datos que contiene una serie de cabeceras (firmas digitales, entre otras cosas), una parte de datos (en BitCoin es la cantidad de BC, pero en otros blockchains es otro tipo de información), una marca de tiempo y un dato «hash» que se obtiene haciendo un cálculo con los datos del bloque anterior.

Bloques endadenados
Fuente: https://www.spheregen.com/blockchain-technology-basics/

Es decir, los bloques con esta estructura están encadenados uno con los otros mediante este hash. A un bloque nuevo se le agrega el campo hash calculado con los datos del bloque anterior. En este cálculo se incluye, a su vez, el hash que estaba almacenado en dicho bloque, puesto que forma parte de los datos del mismo.

Este entrelazamiento de bloques hace que sea completamente imposible modificar un solo bloque de la cadena sin que el resto de bloques siguientes se vean afectados.

Si modifico un bloque Block1 el cálculo del hash del bloque Block2 lo tengo que modificar, y como forma parte del hash del Block3 también tendría que modificar este. Así sucesivamente.
Además, gracias a que se almacena la marca de tiempo, también sirve de «prueba» de cuándo se generó el bloque o la transacción, pues de la misma forma tampoco puedo modificar ese dato alegremente.
Lo pillas?

A esta propiedad de los Blockchain se le llama "inmutabilidad"

Además de esta versión lineal del blockchain, existen otras estructuras basadas en árboles de Merkle, que son más eficientes y escalables. Y existen propuestas aún más interesantes, como la que te conté en el artículo sobre el blockchain Iota.

¿Dónde está el fallo?, pues que modificar la cadena completa solo es cuestión de capacidad de cómputo, no? Bien visto pero, ¿dónde reside la cadena de bloques? ¿Quién la tiene almacenada y cómo se custodia?

Y es aquí donde reside la gran potencia de estos sistemas. Blockchain es un sistema descentralizado y distribuido.

La cadena de bloques está distribuida en una red de servidores (nodos) que contienen cada uno una copia completa de toda la estructura. En este momento vemos esto como una gran fortaleza, pero luego veremos que para IoT también es una complicación.

Cada bloque que se quiere introducir nuevo en la cadena debe ser validado por más del 50% de los nodos participantes en la misma, realizando todos una operación determinada (igual en todos ellos), de forma que a todos les de el mismo resultado. Cuando más del 50% de los nodos han dado su aprobación, el nuevo bloque se añade a la cadena, y todos los nodos actualizan su blockchain.

¿Y por qué iba a querer alguien tener uno o muchos nodos en la cadena gastando electricidad y cómputo? Pues porque cada nodo recibe un «incentivo» por crear bloques nuevos. La creación de un bloque nuevo es uno de los puntos donde más divergen unos blockchain de otros, pero en casi todos hay un premio por crearlo.
En el caso de BitCoin se «gana» con cada bloque nuevo en una cierta cantidad de BC, es lo que se llama «hacer minería» ¿te suena el término?

Con esta pequeña introducción ya te puedo dar una definición de blockchain:

Es un registro digital de datos inmutable y descentralizado.

Se dice que es descentralizado porque carece de un sistema central de control.

Distribuido y descentralizado
Fuente: https://commons.wikimedia.org/

El control del blockchain reside en cada uno de los nodos y, solo cuando hay un consenso (quédate con esta palabra) de más del 50% se toma una acción determinada: agregar un bloque nuevo o descartarlo, por ejemplo.
Este tipo de consensos, basados en un acertijo computacional son denominados Proof of Work (prueba de trabajo o PoW). Pero existen otras técnicas menos costosas y con diferentes características. Aquí tienes un buen artículo donde las explican todas: Entendiendo los protocolos de consenso

Alto! Cómo que un registro de datos? Qué tipo de datos se almacena en el blockchain? … y aquí entramos en lo maravilloso de esta tecnología. Un dato no es solamente una cantidad de monedas, ¡también puede ser un programa !

Me explico: ¿qué es una transacción de bitcoins entre dos usuarios A y B? Es solo la ejecución de un programa muy simple: restar la cantidad X al usuario A y sumarla al usuario B. Así de sencillo.

Ethereum fue uno de los primeros blockchains en soportar, además de su propia criptomoneda, la ejecución de código dentro de la cadena. Esta ejecución de código tiene un «coste» para el propietario del programa y una recompensa para el nodo que la ejecuta. Cuanto más cómputo necesite, más cuesta su ejecución.
Es un método simple y eficaz.

A estos programas se les ha dado el nombre de «smart-contract«, en mi opinión un nombre algo confuso, pues da la impresión que vas a poder poner una hipoteca o el contrato de venta de algún negocio. Sin embargo tan solo se trata de código que se puede ejecutar, nombres como «smart-program» o «smart-code» tampoco hubieran estado mal.

Gracias a este sistema podemos desarrollar programas que corren dentro el blockchain, generando un bloque por cada ejecución del mismo.

También te puede servir para almacenar un dato valioso para ti

Imagínate que le haces una foto a un objeto realmente valioso y lo almacenas en la cadena de bloques. Quedará ahí para siempre y marcado con la hora y fecha de cuándo se almacenó!
Esto se pone interesante, a que sí?

También podrías medir la temperatura de algo muy crítico y almacenar cada minuto su valor, y que al superar cierto umbrales se ejecutasen ciertas acciones (enviar un correo, como caso simple)
Pero como he dicho antes, es descentralizado y distribuido. Esto significa que puedes lanzar tu código en la cadena y lo ejecutará cualquier nodo, las veces que haga falta, y absolutamente todos ellos tendrán una copia de tus datos.

Blockchain es también un sistema de ejecución de código distribuido, que almacena los resultados de una forma inmutable

Pues todo esto es ya una realidad hoy en día. Se pueden realizar tareas complejas organizadas entre sí, llamadas DAO (Decentralized Autonomous Organization). Son aplicaciones que funcionan dentro de un blockchain de forma automática. Aquí tienes un breve artículo para que leas más sobre las DAO.

Características de los blockchain

Veamos de una forma más ordenada, qué ventajas nos ofrece un blockchain?:

  • Descentralización: Tal como te decía antes, la inexistencia de un punto central de control tiene como principal ventaja que tampoco hay un punto de fallo único.
  • Inmutabilidad: Modificar un bloque de un blockchain es imposible si no se tiene el control de más del 50% de la red de nodos participantes.
  • No repudio: Gracias a que cada bloque está firmado con un sistema de clave pública y privada, cualquier interesado en leer el contenido de un bloque sabe inmediatamente que la firma es la original de quien lo generó.
  • Transparencia: en los blockchain públicos como Bitcoin y Ethereum cualquier usuario puede acceder y leer cualquier bloque, y como todas las transacciones son almacenadas en el blockchain, todos los procesos llevados a cabo son totalmente transparentes.
  • Pseudo anonimato: que el sistema sea transparente y esté firmado por pares de claves no significa que sepamos a quién pertenece cada firma. Teóricamente es posible hacer inferencias de los propietarios de los movimientos, de ahí que no se hable de total privacidad. Aún así existen algunas propuestas para almacenar datos personales en un blockchain y al mismo tiempo mantener la privacidad.
  • Trazabilidad: Gracias a la marca de tiempo de cada bloque, los usuarios pueden hacer una reconstrucción de los hechos basándose en los datos del blockchain, pues dentro de esos datos inmutables se encuentra justo el momento de creación del bloque.

El siguiente cuadro muestra una comparativa entre los blockchain de Ethereum, Hyperledger Fabric y Corda. Te aconsejo que leas ese artículo, pues es muy clarificador sobre los tipos de blockchain existentes.

Comparativa de blockchains
Comparativa de Blockchains. Fuente: https://medium.com/@philippsandner/comparison-of-ethereum-hyperledger-fabric-and-corda-21c1bb9442f6

Un ejemplo práctico, transferencia de bitcoins

Pero para terminar de comprender como funciona todo el sistema, veamos cómo se procesa paso a paso una transacción de Bitcoins:

  • El usuario A quiere transferir X bitcoins al B. Inicia la transacción mediante su cartera virtual o «wallet», que es su dirección electrónica en el Blockchain. La transacción contiene los datos del wallet de origen, el de destino y la cantidad de BitCoin, entre otras cosas.
  • Esta transacción la firma A con su clave privada y puede ser comprobada por cualquiera mediante su clave pública. Se transmite al nodo de blockchain donde esté conectado el usuario A mediante la red P2P.
  • Esta transacción, una vez validada, se une con otras cuantas que están en espera y forma un bloque. Todos los nodos compiten por ver quién es el primero en encontrar la solución al cálculo de dicho bloque (Proof of work) y el minero que la encuentre añade el bloque a la cadena y recibe su recompensa.
  • Y por último, todos los nodos actualizan su versión de la cadena con el nuevo bloque añadido.

Soluciones específicas de Blockchain al IoT

Tras esta introducción al Blockchain, que espero que te haya servido para ampliar conocimientos sobre esta tecnología, veamos cómo mejora al IoT y qué ventajas le puede aportar:

  • Interoperabilidad entre plataformas. Existen ya numerosas plataformas en Internet que dan soporte a las aplicaciones IoT, registrando dispositivos, almacenando los datos, creando paneles de visualización, etc. Pero el problema que empezamos a encontrar es la operativa entre plataformas. Blockchain puede simplificar este aspecto si se usa como repositorio de información, de tal manera que cada plataforma IoT solo debe integrarse con el blockchain elegido y no con cada una de las plataformas IoT existentes. Además, también quitamos de la ecuación la complejidad específica de cada una de las redes IoT, haciendo que todos los datos terminen en la red P2P del blockchain.
  • Mejora en la seguridad del IoT. No solo porque los datos en el blockchain están encriptados y firmados, sino porque se podrían programar smartcontracts que sirvieran para realizar actualizaciones de firmware seguras en los dispositivos. Y esto es uno de los grandes hitos que debe conseguir IoT, ¿como mantengo actualizado los firmwares de cientos de miles de dispositivos de forma segura y diligente?
  • Trazabilidad y veracidad de los datos. Obviamente, si almacenar transacciones económicas en un blockchain va a ser el gran avance económico (está por llegar) de la primera mitad de este siglo, imagínate que no será con datos de sensores, estados de artículos físicos, etc. Se consigue una trazabilidad gracias a la inmutabilidad de la cadena de bloques y que cada bloque tiene su marca de tiempo. Por lo tanto es posible hacer un seguimiento de un evento en todos sus pasos (que hayan sido almacenados en blockchain)
  • Interacciones automáticas. Y por supuesto, explotando smartcontracts al máximo se pueden conseguir automatizaciones muy importantes, seguras y fiables. Imagínate que tu código no está en un controlador de dispositivos sino en un blockchain: vas a poder estar seguro que nadie lo modifica sin tu conocimiento, que cada ejecución guarda sus variables de entrada y su estado, y que todas las alertas importantes estarán firmadas y certificadas.

Arquitectura del blockchain

Podemos ver blockchain como una pieza de software intermedia, encargada de facilitar la interacción entre los componentes del sistema IoT y con el resto del mundo. Es lo que conocemos como «middleware«.

Actuando como un middleware, blockchain nos proporciona dos elementos fundamentales: la separación de las partes más complejas del IoT, es decir, el mundo físico y las comunicaciones, y la posibilidad de ofrecer servicios basados en el propio blockchain, como el pago automático, por poner un ejemplo.

En este artículo, que hace una recopilación de la tecnología blockchain y su aplicación al IoT, proponen el siguiente esquema en capas:

Composición en capas del blockchain e IoT
Composición en capas del blockchain e IoT. Fuente: https://www.researchgate.net/figure/Blockchain-composite-layer_fig9_333446530
  • Capa de datos. Es la capa de entrada del IoT al blockchain, la parte de «percepción» de datos. Justo a la entrada ya se produce una encriptación de los datos recibidos, usando distintas técnicas dependiendo del blockchain en cuestión.
  • Capa de red. Es la capa que permite la comunicación de los nodos que forman el blockchain, los enlaces (tanto físicos como virtuales) y el método de propagación de los bloques de datos hacia el resto de la red. Cada nodo es responsable de verificar la corrección del bloque recibido y propagarlo a sus nodos vecinos.
  • Capa de consenso. El consenso, como veíamos antes, es una de las piezas fundamentales en todo blockchain, pues es donde radica la automatización de la confianza en los datos que se van a incorporar. Existen también varios mecanismos para conseguir el consenso entre los nodos, y es una de los elementos que más diferencian a unos blockchain de otros.
  • Capa de incentivos. Es la capa donde se produce la conocida «minería». Todo blockchain debe tener un mecanismo de consenso que «premie» a los nodos que se esfuerzan en ejecutar los algoritmos de consenso. Tiene sentido: sin esas recompensas lo nodos no tendrían por qué validar los bloques que no le pertenecen. En esta capa es fundamental llevar correctamente el cálculo y contabilidad de estas «criptomonedas».
  • Capa de servicios. Y finalmente la capa de servicios es la que abre, de una manera estándar y ordenada, todo este mundo a la integración con aplicaciones y sectores productivos. Por ejemplo, una empresa pagaría el porte automáticamente de su mercancía solamente si ha llegado a su destino en tiempo y condiciones adecuadas. El conjunto de sensores de humedad, temperatura, vibración, localización, etc es la que se ha encargado de almacenar el blockchain toda la información, para que más tarde un simple algoritmo verifique que todo ha ido bien y realice el pago.

¿Cómo integramos Blockchain en una plataforma IoT?

A pesar de que día a día se fabrican microcontroladores más potentes y de menor tamaño, lo cual facilita llevar funciones avanzadas en el edge, en la parte final del sistema IoT, aún no está a la altura para poder ejecutar los pesados algoritmos de consenso que requieren los nodos de un blockchain.

Además, otro aspecto a tener en cuenta es el tamaño de toda esa información. Por ejemplo, Ethereum, cuyo bloque génesis data de julio de 2015, ocupaba en el momento de escribir este artículo unos 430 GB (https://bitinfocharts.com/). A pesar de que actualmente no significa una cantidad desorbitada, debemos pensar que esta base de datos debe ser trasmitida por líneas poco estables o por vía aérea, pudiendo suponer una gran cantidad de tiempo en el momento de la inicialización de un nodo.

Es por estas razones que a día de hoy no nos planteamos tener nodos completos en dispositivos IoT. Los nodos completos son los que tienen la copia completa de la base de datos y pueden ejecutar los algoritmos de consenso. Para los dispositivos IoT se piensa más bien en nodos ligeros: que solo guardan una parte esencial de la cadena y encriptan y validan la información que reciben. Obviamente estos nodos ligeros dependen fuertemente del los nodos completos.

Pero no pensemos que las comunicaciones siempre tienen que ir hacia el blockchain y luego de vuelta. Pensemos que si los nodos IoT ya tienen parte de la cadena, o si se apoyan en servidores en el edge, también puede realizar interacciones entre ellos directamente, de forma automatizada y segura. Más tarde estas transacciones serán volcadas en el blockchain para su almacenaje.

Esto significa que dos nodos IoT pueden estar dirigidos y orquestados por smart-contracts alojados en un blockchain, aportándoles toda la automatización y la seguridad tan apreciada y difícil de implementar en los microcontroladores.

Como ejemplo de blockchain en dispositivos poco potentes puedes ver el proyecto Raspnode, que consigue que una raspberry forme parte de una red de nodos en distintos blockchains. 

Con los procesos automáticos y la seguridad que proporcionan los blockchain la expresión «Internet de las Cosas» cobra todo su sentido.

Hasta aquí esta introducción al IoT y Blockchain. Espero de veras que te haya resultado divertido y útil y que te animes a participar con tus comentarios y sugerencias.

Además te recuerdo que Iotfutura tiene una cuenta en Twitter donde se comparten noticias y curiosidades sobre el Internet de las cosas.

Nos leemos en el siguiente !

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

RSS
Youtube
Youtube