Blockchain es una de las tecnologías punteras que está revolucionando el sector tecnológico digital. Su sistema de datos nos ofrece una forma segura de almacenar información de forma descentralizada. Seguramente a menos que vivas debajo de una piedra ya habrás escuchado hablar acerca de esta tecnología de un modo u otro, pero... ¿quizás el saber exáctamente de que va se te escape de las manos?
Bueno, si te pica la curiosidad estás de enhorabuena porque en Hamro Dev vamos a explicarte lo que necesitas saber para entender cómo funciona Blockchain
Primer paso - Entender las funciones hash
No podemos entender blockchain sin entender lo que es una función hash. Una función Hash es - en esencia - la tecnología sobre la cual se basa Blockchain y todo su sistema se centra en la seguridad que ofrecen estas funciones. Si entiendes el concepto de una función hash, entonces no te costará mucho entender el resto de conceptos e ideas que rodean la blockchain y las cuales en esencia las hacen funcionar.
Las funciones hash, por ejemplo, son utilizadas cada vez que introduces tu contraseña en una página web (a menos que la web esté mal diseñada).
La finalidad de una función hash es muy sencilla, pero su propiedad inmutable es tan poderosa que es ubicua en todo software relacionado con versiones, seguridad y autenticidad. Se utiliza en todas partes y sin ellas la tecnología blockchain no sería posible como lo es ahora.
¿Cómo funciona?
Una función hash transforma una linea de texto de cualquier tamaño (o también por ejemplo ficheros de texto, da lo mismo) en una palabra de un tamaño fijo . (generalmente 256 bits). Esta función cumple dos propiedades muy importantes:
- Dada una linea de texto de entrada, siempre dará el mismo resultado.
- Dado un hash, es computacionalmente imposible obtener la linea de texto de entrada inicial.
Una función hash sencilla por ejemplo , sería sumar el número de cada letra. Así, por ejemplo:
- "AAA" tendría un valor hash de 3.
- "ABB" tendría un valor hash de 5.
- "A" tendría un valor hash de 1.
- "Hola que tal" tendría un valor hash de 112.
- "Te odio" tendría un valor hash de 68.
A partir del número 68, no podemos saber con ciencia cierta cual era el texto original, dado que muchas mas lineas tienen una función hash equivalente a 68 (por ejemplo, 68 As).
Además, las funciones hash modernas son criptográficas. Esto es, que si alteras tan solo una letra de la linea original, el valor hash cambia radicalmente. Si nos fijamos en la función hash anterior, si cambiase el valor de una sola letra de cualquier linea de texto, su nuevo número hash sería mas o menos similar, ya que el resto de la cadena de texto no ha sido alterada y la suma sigue siendo la misma.
Las funciones hash encuentran un gran uso en la verificación de mensajes. Por ejemplo, si yo envío un mensaje y envío su HASH, la persona que lo recibe puede comprobar si el texto o archivo que está recibiendo es el correcto o no. (dado que validar si el número hash concuerda con la información es muy sencillo).
OJO: Una función hash por si sola no es suficiente para evitar que puedan engañarte. Su uso es más bien de comprobación de que los datos que se han enviado son los correctos, pero en este paso aun no estamos validando nada, dado que enviar el hash junto al mensaje no implica que no pueda ser falso. Cualquier persona puede alterar el mensaje y alterar el hash del mismo mensaje. Pero es un paso inicial de seguridad, y sobretodo de verificación. Si un archivo o linea de texto tiene un hash, entonces siempre tendrá ese mismo hash. Si se modifica, el hash cambiará. Los hashes sirven sobretodo para comprobar que la información no se ha modificado... ¿ pero como evitamos que un asaltante pueda también cambiar el valor hash de su mensaje?

¿Cómo se integran las funciones hash en una blockchain?
Una blockchain es una base de datos ordenada por bloques.Cada bloque de información contiene tres partes:
- La información: El mensaje o los datos originales.
- El hash de esa información.
- El hash del bloque anterior.
El bloque génesis (el inicio de la cadena) tiene la particularidad de no apuntar a ningún otro bloque.
Así dispuestos, una cadena de bloques con datos de ejemplo se muestra enlazada de la siguiente manera .
Este sistema tiene una ventaja muy particular y es que computacionalmente es muy difícil de modificar y alterar. Ya que para alterar un bloque, deberían de también alterarse todos los demás bloques de la cadena .
Supongamos que se intenta modificar uno de los bloques de la cadena. En ese caso, el hash de dicho bloque cambia, y la cadena ya no es correcta porque no queda validado.
Este es tan solo el primero de los puntos que la blockchain utiliza para garantizar su integridad y seguridad.
El segundo punto de la cadena es que es pública. Todo el mundo puede copiarla y hacerse una copia de ella y convertirse en un nodo más de la red. Cada nodo tiene una copia de la base de datos. El sistema está distribuido. Ahora, si un usuario malintencionado quisiera alterar una base de datos, deberá de alterar todas las copias de la base de datos de los demás nodos (lo cual dificulta el ataque un grado más por cada nodo que se agrega a la red). Cuantos más nodos, más fuerte es la red.
El problema de una red así distribuida viene con el hecho de como sincronizar todas las cadenas para que siempre tengan la misma versión de la base de datos. Si uno de los nodos añade información, debe de transmitirlo a los demás nodos... y si varios nodos añaden varios bloques a la vez... ¿cómo decidimos en que orden van?
Además de esto, para un ordenador moderno, es relativamente sencillo alterar toda la cadena de bloques calculando los nuevos hashes para cada uno de los nodos restantes. Es importante que el sistema haga que alterar una cadena de bloques debe de ser una tarea computacionalmente casi imposible de lograr. De esta manera, se asegura la integridad de la cadena de bloques. La forma que utiliza bitcoin es mediante proof of work.
Proof of Work
Hay varias formas de decidir el orden en el cual los nodos introducen la información. Estos son llamados los algoritmos de consenso. Estos algoritmos crean un consenso ( una serie de pasos ) que los nodos adscritos a la red deben de seguir para determinar que bloque va en que orden, y que bloque es válido y cual no lo es. Proof of work es el algoritmo que utiliza bitcoin y se basa en validar el bloque (o cadena de bloques) que más computo de operaciones matemáticas haya acumulado.

Espera espera, ¿cómo que computo de operaciones matemáticas?
Esto es sencillo de explicar si hemos entendido lo que hacen las funciones hash. Bitcoin utiliza SHA256. Esta función hash obtiene una cadena de 256 ceros y unos. El número combinaciones posibles es de 2 elevado a 256. Esto es lo mismo a una cifra con 77 ceros detrás. Para que os hagais una idea de lo gigante que es este número, si contamos el número de átomos que tiene sol en comparación, el número tendría 56 ceros, esto es 21 órdenes de magnitud más pequeño.
Para poder introducir un nodo en la base de datos, bit coin propone solventar un pequeño acertijo. Este acertijo lo que hace es verificar que se ha resuelto una operación matemática muy compleja (y competido contra otros nodos que han intentado también resolverla). Nos vamos a centrar en explicar como un bloque que está verificado, gracias a las propiedades de la función hash, lleva asociado a el una cantidad de "esfuerzo computacional" (lo que se ha tenido que calcular para resolver un muy complejo acertijo matemático).
Imaginemos que nos pasan un bloque de datos (con las transacciones de pagos que se han realizado) y nos dicen "He encontrado un número secreto especial", que si lo pones al final del bloque de datos y aplicas SHA256 a todo ello, te dará un resultado que empiece por 30 ceros.
¿Cómo de dificil crees que es que puedan adivinar ese número al azar? La probabilidad de encontrarlo es de 1 entre 1.000.000.000 . Debido a que SHA256 es una función criptográfica - esto es, que cada número que alteras cambia radicalmente el resultado. La única forma de averiguar cual es este número es probar todas las combinaciones una a una. Y una vez obtienes ese número, es muy sencillo comprobar que ese es el número secreto. Tan solo tienes que aplicar la función hash y comprobar que efectivamente empieza por 30 ceros, pero sin tener que volver a probar todos los números uno a uno.
Este mecanismo se llama "proof of work" - en inglés, prueba de trabajo. Porque si alteramos cualquiera de los datos de la transacción, el número mágico ya no funcionaría y la función hash no resolvería el acertijo.
Si alguien quisiera cambiar un dato del bloque. Tendría que volvera calcular ese número mágico, e intentar el billón de combinaciones del que hemos hablado antes para encontrar ese nuevo número mágico, que sumado a la lista alterada, su hash comenzase por 30 ceros. Y como el hash del bloque también cambia con el número mágico, tendríamos que volver a resolver los acertijos para cada uno de los bloques restantes de la cadena.

Tengamos en cuenta que - como hemos indicado antes - el blockchain es un sistema centralizado donde todos los nodos tienen una copia de la base de datos. (En bitcoin se le llama ledger).

En bit coin, todos los nodos están anotando transacciones a la vez, y queremos que tengan un mecanismo para poder ponerse de acuerdo en cual es la cadena de bloques buena. En bitcoin, todo el mundo toma por válida la cadena de bloques que más esfuerzo computacional tiene

En bit coin, todos los nodos están anotando transacciones a la vez, y queremos que tengan un mecanismo para poder ponerse de acuerdo en cual es la cadena de bloques buena. En bitcoin, todo el mundo toma por válida la cadena de bloques que más esfuerzo computacional tiene (es decir, la más larga).
Cada nodo tiene una copia de la base de datos (que es una cadena de bloques) y va escuchando a recibir cadenas de bloques nuevas que introducir a la cadena de datos. Cuando un nodo recibe dos cadenas de bloques distintas que añadir a su copia de su cadena de bloques pero que entran en conflicto entre ellas, el nodo siempre hará caso a la cadena de bloques validada que más cantidad de computo tenga, (la más larga). Si están empatadas, entonces el nodo espera y sigue recibiendo más transacciones hasta que un bloque nuevo bloque se añada a una de las cadenas y desempate.
En vez de preguntar y fiarse de una base de datos central o de alguna entidad central que dictamine cual es el orden de los bloques y en que forma deben de ir ordenados y validados,lo que hace blockchain es fiarse del esfuerzo computacional que requiere crear esa cadena de bloques.
Para hacernos una idea de lo que costaría romper este sistema de seguridad, vamos a imaginar que quisieramos alterar un bloque, y ver la cantidad de trabajo de computación que deberíamos de calcular para validarlo.
Imaginemos que queremos alterar la cadena de datos de bitcoin, y añadir una transacción en uno de los bloques en la que nosotros cobramos cien bit coins de alguien (quien sea).
Para lograr esto, primero deberemos de encontrar un número mágico que se añada al bloque de datos donde hemos añadido nuestra información falsa antes que el resto de nodos (o mineros) que también están calculando ese número mágico para introducir en su propio bloque. Y eso es algo factible que podría ocurrir. Luego, deberíamos de retransmitir ese nuevo bloque al resto de nodos de la red, los cuales no han recibido la información de dicha transacción. El resto de nodos seguirá creando nuevos bloques y añadiéndolos a su blockchain sin esta transacción. Si nosotros quisieramos que esa transacción si se ejecutase, deberíamos de seguir creando nuevos bloques que contuviesen esa transacción ya adscrita y seguir retransmitiéndolos al resto de nodos de la red, los cuales generan muchos más bloques que nosotros. Llegaría un punto en el que nuestra transacción fraudulenta sería descartada porque alguien habría creado una cadena de bloques más larga que la nuestra y que no tuviera esa transacción registrada (porque nunca se hizo).

Para alterar la cadena de bloques, deberíamos tener más capacidad de cómputo que al menos el 51% del resto de la network, para que el resto de nodos tomasen nuestros bloques como válidos
Para hacernos una idea, el cálculo de estas operaciones lleva asociado a el un costo eléctrico (que es el tener a los ordenadores realizando cálculos matemáticos continuamente... oh si, eso gasta mucha MUCHA batería del móvil). En total, se estima que la validación de datos de bitcoin consume de media unos 77tW/h de potencia al año. (este es de hecho el único inconveniente de proof of work, y es que no le hacemos un flaco favor al planeta, pero existen otros métodos de consenso que no consumen energía )
Un asaltante debería de poder generar como mínimo unos 41tW/h al año. Esto sería el equivalente a consumir poco menos de un tercio de la electricidad que se consume en España. Además de eso, debería de comprar, disponer o controlar una enorme cantidad de ordenadores (minas de datos) que utilizar para minar bitcoins. En datos de 2018, se estima que engañar al sistema - en dinero - costaría unos 77.000 millones de dólares.
Esto es lo que hace que bitcoin sea tan seguro:
- Alterar la información de la cadena de transacciones cuesta una cantidad desmesurada de cómputo que traducido en electricidad y luego en dinero sería ridículamente caro.
- Conforme más nodos se unen a la network, la network se hace más resistente y más fuerte porque ellos aportan más capacidad de cómputo total a la red.
Obviamente esta es una versión muy resumida de todo el sistema, y nos hemos dejado para otro día la explicación de cómo funcionan las claves privadas y públicas que utilizan para verificar que nodo es quien dice ser. Pero en esencia es esto.
BLockchain es mucho más que bitcoin
Como todo, una cosa hay que tener clara y es que blockchain es tan solo un concepto, una representación de datos que bitcoin utiliza para crear un sistema seguro de validación de pagos. No obstante, blockchain puede utilizarse para muchísimas más cosas porque la autoridad que certifica una serie de datos no es una autoridad central sino la propia red de usuarios de forma descentralizada.
Es esta la razón por la cual tantas empresas, bancos y gobiernos se han gastado grandes cantidades de dinero en investigar posibles usos y aplicaciones de este tipo de estructura de datos.
Imaginemos un blockchain para registro de la propiedad, en el que se apuntasen los registros de quien va comprando que casa y quien es el propietario. Ya existen prototipos también que van asociados a los llamados smart contracts. Estos son pequeños contratos inteligentes asociados a cada bloque de la blockchain que ejecutan un código determinado si en la red se cumplen una serie de propiedades.
Imaginad un contrato que se efectuase automáticamente una vez recibido un pago, sin que nadie pudiese hacer nada para evitarlo (porque la red de la blockchain estaría diseñada para no permitirlo).
O poder utilizar blockchain para realizar un trazado de dónde viene cada alimento que consumimos, y cada uno de sus ingredientes (teniendo una cadena de bloques que identificase de forma certera la procedencia de ellos).
El potencial es inmenso, historiales médicos verificados de esta manera, trazado del origen de los bienes en un mercado global... las posibilidades son infinitas y blockchain es una herramienta muy ingeniosa - la cual por cierto fué inventada en los años 70 - que nos puede ayudar a construir una sociedad futura más transparente, estable y hacer mucho menos accesible la corrupción.
Ahora que entiendes de que va blockchain... ¿piensas que nos ayudará a ser una sociedad mejor desarrollada? ¿o es tan solo un bulo de la gente para inflar y ganar dinero invirtiendo en bitcoins y poco más?