¿Qué es y cómo funciona una blockchain?

Blockchain es una tecnología que está revolucionando el mundo actual, particularmente por su uso en el ámbito financiero.

QUOMA | ¿Qué es y cómo funciona una blockchain?

Por Ing. Marcelo Briones

Blockchain o su traducción en español, cadena de bloques, es una tecnología que está revolucionando el mundo actual, particularmente por su uso en el ámbito financiero de la mano de las Criptomonedas o monedas digitales.

¿Qué es una blockchain?

Como su nombre lo indica, es una forma de guardado de información en una sucesión de bloques formando una cadena, es decir que cada bloque está fuertemente enlazado al anterior.

Supongamos tenemos los siguiente bloques:

La letra identifica el bloque y el número representa un dato almacenado en el bloque. En esta figura, el bloque A contiene el número 12, el B 34, C 54, D 87, etc.

Además de la información propia del bloque, para que sea una cadena de bloques cada uno debe contener la firma digital del bloque anterior y la firma digital de sí mismo.

Hashing y enlazado

Una firma digital de un bloque es un número o texto resultado del uso de una función matemática llamada hash (ver wikipedia). Existen varias de estas, CRC32, MD5, SHA-0, SHA-1, SHA-256, cada una con diferente forma de cálculo del número de firma digital de un texto.

La función de hash más utilizada en la actualidad es SHA256. Del ejemplo anterior, el valor de hash del bloque A es:

SHA-256(”12”) = 6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918

(herramienta de hash en línea http://www.sha1-online.com/)

El hash del bloque B es:

SHA-256(“6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918|34”) = 3c6bd4ef77844594d4f854353e1e921608a90a55103f460a12ff88ebd71a6007

Observe que hemos usado un carácter de barra vertical como unión entre el hash del bloque anterior y el dato del bloque.

Usaremos los bloques de la figura anterior y calcularemos sus números para obtener una cadena de bloques:

Bloque A:

Hash del bloque anterior: (ninguno, ya que es el primer bloque)

Dato de este bloque: 12

Hash de este bloque: SHA-256(“12”) = 6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918

Bloque B:

Hash del bloque anterior: 6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918

Dato de este bloque: 34

Hash de este bloque: sha-256(“6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918|34”) = 3c6bd4ef77844594d4f854353e1e921608a90a55103f460a12ff88ebd71a6007

Bloque C:

Hash del bloque anterior: 3c6bd4ef77844594d4f854353e1e921608a90a55103f460a12ff88ebd71a6007

Dato de este bloque: 54

Hash de este bloque: sha-256(“3c6bd4ef77844594d4f854353e1e921608a90a55103f460a12ff88ebd71a6007|54”) = c0649f7afe207f25813cb93be134c437e4a53925ebf545929d9abe1dad205d2c

Bloque D:

Hash del bloque anterior: c0649f7afe207f25813cb93be134c437e4a53925ebf545929d9abe1dad205d2c

Datos de este bloque: 87

Hash de este bloque: sha-256(“c0649f7afe207f25813cb93be134c437e4a53925ebf545929d9abe1dad205d2c|87”) = 84471ba18ada6c46f78f806dfd8b33cf22768a38169ceac056ac2b778b8430f9

...

Con esto vemos que cada uno de los bloques queda enlazado al anterior.

Modificación de datos

Veamos qué sucede si modificamos el datos guardado en un bloque. Supongamos que el dato del bloque B es 35 y no 34.

Bloque A:

Hash del bloque anterior: (ninguno)

Dato de este bloque: 12

Hash de este bloque: SHA-256(“12”) = 6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918

Bloque B:

Hash del bloque anterior: 6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918

Dato de este bloque: 35

Hash de este bloque: d2062bc89ba44aa9448add2be5a2338d0869e024a1a768e512fe6e7acbf4797d

Bloque C:

Hash del bloque anterior: d2062bc89ba44aa9448add2be5a2338d0869e024a1a768e512fe6e7acbf4797d

Dato de este bloque: 54

Hash de este bloque: e844f19730e5e1aa5ba0e2b0d540b7f134e144115d52607d5889fccbae17e745

Bloque D:

Hash del bloque anterior: e844f19730e5e1aa5ba0e2b0d540b7f134e144115d52607d5889fccbae17e745

Dato de este bloque: 87

Hash de este bloque: c9a96b109f0bd4fa951ed57f6f41f1a08c34a6c71fe5c5831e33b7d57a5ba6f1

...

Es evidente que la cadena de bloques cambia completamente desde el bloque modificado en adelante.

Por lo tanto una cadena de bloques es inmutable, o si la información contenida es modificada se obtiene una cadena distinta siendo detectable rápidamente.

Con esta capacidad para detectar cambios a través del uso de las matemáticas queda asegurada la validez de una cadena de bloques, pero el agregado de nuevos bloques a la cadena debe ser realizada por personas autorizadas.

Lo anterior es muy utilizado en la actualidad en los repositorios basados en Git de código fuente de software. Cada bloque es un nuevo cambio en el código fuente y para ser agregado un desarrollador se autentica frente al servidor.

Minado

Esa tecnología es extremadamente útil si le agregamos el concepto de Prueba de trabajo, actualmente usada en la plataforma Bitcoin.

La diferencia está en la inclusión de un requisito en el hash de un bloque para que este sea válido y que pueda ser añadido a la cadena.

Supongamos que para que un bloque sea válido se requiere el el hash comience con 5 ceros, es decir “00000”.

Del ejemplo anterior, el bloque A no es válido dado que el hash comienza con “6b51d”.

Para poder tener un hash distinto, es necesario agregarle un dato adicional el bloque. Este dato puede ser un número al azar.

Supongamos que el bloque A, contiene el dato “12” y el número al azar “1325398”. Por lo tanto su hash sería.

SHA-256(“12|1325398”) = 0000091a9c144948a3ef5944e88ef4a89b079d1294a3e9d4f0fd321c96384930

Como este hash comienza con 5 ceros, el bloque se considera válido, pero para encontrarlo, se requiere al menos calcular 1325398 hashes.

La inclusión de este requerimiento cambia radicalmente la forma en la que se agregan nuevo bloques a la cadena, porque se requiere potencia de cálculo para encontrar cada bloque nuevo. Este proceso de búsqueda se conoce como minado.

Podemos aumentar el esfuerzo necesario para encontrar bloques válidos con sólo exigir más ceros en el comienzo del hash de un bloque. Esto se conoce como dificultad, y aumenta exponencialmente con el agregado de cada cero.

La tarea de búsqueda de bloques válidos puede ser tercerizada o ofrecida al público en general, otorgando cierta recompensa a las cualquier persona que encuentre un bloque válido.

Usemos los bloques de la primera figura con exigencia de 5 ceros en el hash, nos podría quedar así:

Bloque A:

Hash del bloque anterior: (ninguno)

Dato de este bloque: 12

Número al azar: 1325398

Hash de este bloque: SHA-256(“12|1325398”) = 0000091a9c144948a3ef5944e88ef4a89b079d1294a3e9d4f0fd321c96384930

Cálculos realizados: 817352

Bloque B:

Hash del bloque anterior: 0000091a9c144948a3ef5944e88ef4a89b079d1294a3e9d4f0fd321c96384930

Dato de este bloque: 34

Número al azar: 7375952

Hash de este bloque: 0000096a240650c20c6f09c73887ee38a2a1f296622de342145d2e3cc6c5bfea

Cálculos realizados: 104788

Bloque C:

Hash del bloque anterior: 0000096a240650c20c6f09c73887ee38a2a1f296622de342145d2e3cc6c5bfea

Dato de este bloque: 54

Número al azar: 5545154

Hash de este bloque: 00000809dc9bf0ee43fd94a52fcb1d4a914a50f1a3db064ed80e65d6665d4165

Cálculos realizados: 402383

Bloque D:

Hash del bloque anterior: 00000809dc9bf0ee43fd94a52fcb1d4a914a50f1a3db064ed80e65d6665d4165

Dato de este bloque: 87

Número al azar: 4644780

Hash de este bloque: 0000091b8dc2d094e7d20b4d13a674d4585d37f73984f6b659c4c4e979d26a6e

Cálculos realizados: 2489060

...

Si los datos que guardamos en cada bloque son asientos de transacciones entonces tendríamos un libro contable diario, fácilmente verificable que puede ser compartido y ofrecido a la comunidad de mineros para que busque bloques válido. De esa forma funciona la plataforma de bitcoin.

Conclusión

La tecnología de cadenas de bloques es un forma sumamente segura para el salvado y distribución de base de datos inmutables.

Con su utilización en el mundo financiero nos permite tener un sistema de almacenamiento de datos distribuido y sumamente confiable.