Blockchain

Inmutabilidad en Blockchain: ¿Problema para el RGPD?

Inmutabilidad en blockchain immutability in blockchain

Se dice que la inmutabilidad en Blockchain es el mayor problema que tiene esta tecnología para cumplir con el RGPD, ya que no permite el ejercicio de algunos derechos de protección de datos (i.e. el derecho al olvido y el derecho de rectificación), pero lo cierto es que esto no siempre es así.

En este artículo verás hasta dónde llega la inmutabilidad en Blockchain, que es lo primero que debe conocerse para poder juzgar correctamente si puede hacerse efectivo o no el derecho al olvido, del que hablaré en la próxima entrada.

 

1. ¿Qué es una blockchain?

Generalizar en términos de blockchains es muy difícil, y ello porque una blockchain es simplemente una base de datos distribuida, en la que la información se estructura en bloques y cada bloque enlaza al bloque anterior, creando así una cadena.

Ciertamente hay más elementos que la definen, pero esos pueden variar de una blockchain a otra, por ejemplo:

¿El algoritmo de consenso? Este algoritmo son las normas que definen en una determinada blockchain el proceso por el cual los nodos que componen la red van a aceptar que un bloque es válido y debe incluirse en la cadena.

Este proceso puede ser distinto y con toda seguridad será distinto (o debería) en función de si la blockchain es pública o privada (permisionada), pues la confianza que existe entre los nodos en una blockchain privada hace innecesario y poco eficiente utilizar algoritmos como la prueba de trabajo (proof of work) o la prueba de interés (proof of stake), y más interesante recurrir a algoritmos como round robin, en el que los nodos se turnan para minar los bloques.

¿El contenido de los bloques? Más de lo mismo, más allá de toda esa información que sea necesaria para encadenar los bloques, el resto de datos pueden variar de una blockchain a otra. Por ejemplo, los de Bitcoin registran simples transacciones de bitcoins; los de Ethereum, transacciones de ether y contratos inteligentes (smart contracts).

¿El protocolo? Lo mismo, por ejemplo, nada tiene que ver cómo se suceden las comunicaciones entre pares en Bitcoin de cómo se suceden en Dash, Zcash o Monero, que son mucho menos transparentes.

 

2. Inmutabilidad en Blockchain

¿Por qué la cadena de bloques es inmutable? Se debe básicamente a la criptografía y al algoritmo de consenso.

Para entender la razón es importante conocer mínimamente la estructura de los bloques, cómo se utiliza la técnica del hashing para encadenar los bloques, qué es el árbol de Merkle y qué papel juega el algoritmo de consenso.

 

2.1. Estructura del bloque

Por lo general, todas las blockchains mantienen, en su nivel más básico, la estructura del bloque de Bitcoin, que consta de una cabecera y una lista de transacciones. La siguiente ilustración muestra la estructura de un bloque en Bitcoin:

 

estructura bloque bitcoin
Imagen extraída del NIST. (2018). “NISTIR 8202 (DRAFT) – Blockchain Technology Overview”.

 

El identificador del bloque es un hash del contenido de la cabecera (en la imagen de arriba, “Hash (Block XX Header)”). La cabecera comprende el hash del bloque previo (bloque padre), el sello de tiempo, el nonce (explicado más abajo) y el hash de la raíz de Merkle.

Si bien el identificador del bloque, el hash del bloque previo y la raíz de merkle son datos que me atrevería a decir que aparecen en todas las blockchains, no puede decirse lo mismo del resto de datos, y otras blockchains podrían prescindir de alguno de ellos o añadir otros.

Por ejemplo, la cabecera de un bloque en Ethereum incluye muchos más datos que la de uno en Bitcoin, como el límite de gas, el gas usado o el beneficiario, y no solo una, sino tres estructuras de Merkle.

 

2.2. Uso del hashing para encadenar bloques

Los mineros forman los bloques, pero antes de incluirlos en la cadena (minarlos), deben calcular su hash (o resumen), que es el resultado de aplicar una función hash a un contenido concreto, en este caso, la cabecera del bloque.

La magia de las funciones hash es que: (i) funcionan en un único sentido (no se puede averiguar el input); (ii) un determinado input dará siempre el mismo output y; (iii) independientemente de la longitud del input, el tamaño del output será siempre de la misma longitud.

A modo ilustrativo, en la siguiente imagen podrás ver que tres inputs diferentes, dos muy similares y uno muy distinto, dan siempre una cadena de números y letras arbitrarias del mismo tamaño:

 

hash SHA-256

 

La función de hashing utilizada arriba es la misma que utiliza Bitcoin, el SHA-256, y el resultado se muestra en formato base64. Si hicieras la misma operación con los mismos inputs, obtendrías los mismos outputs.

El hash del bloque servirá como el identificador del bloque en cuestión y, como ha sido creado a partir de la cabecera, toda modificación que se haga a la cabecera comportará que el hash deje de ser el mismo.

Teniendo en cuenta lo anterior, para crear la cadena lo que se hace es incluir en la cabecera del bloque el hash del bloque padre, de modo que cualquier cambio en el bloque padre provocaría un cambio en su hash y sería fácilmente detectado.

 

blockchain Bitcoin
Imagen extraída del NIST. (2018). “NISTIR 8202 (DRAFT) – Blockchain Technology Overview”.

 

Enlazar al hash del bloque anterior es importante para lograr la inmutabilidad en Blockchain, pero insuficiente, ya que el hash no se hace del contenido de todo el bloque, sino únicamente de la cabecera, ergo un cambio en la lista de transacciones no causaría un cambio del hash y los mineros no detectarían el cambio. Ahora bien, esto se arregla incluyendo en la cabecera el hash de la raíz del árbol de Merkle.

 

2.3. El árbol de Merkle

Un árbol de Merkle es una estructura jerárquica que se compone de hash de hashes. Para crearla, se cogen todas las transacciones del bloque y se calculan sus hashes, una por una. A continuación, los hashes resultantes se juntan por parejas y se calcula el hash de la pareja. Esta operación se repite sucesivamente hasta que solo queda un único hash de todo, la raíz de Merkle. La siguiente imagen lo ilustra perfectamente:

 

Bitcoin Merkle tree blockchain
Vid. Bitcoin white paper

 

El hash de la raíz de Merkle se incluye en la cabecera de cada bloque, de modo que si un atacante alterase un dato de la lista de transacciones, la raíz de Merkle sería distinta y los mineros al contrastarla con la raíz incluida en la cabecera detectarían el cambio y juzgarían la transacción inválida.

Además de contribuir a la inmutabilidad en Blockchain, los árboles de Merkle también permiten reducir el tamaño de la cadena de bloques a través de la operación conocida como “poda de bloques”, explicada más abajo.

 

2.4. El algoritmo de consenso

Es una pieza clave para asegurar la inmutabilidad en Blockchain, pero puede cambiar significativamente de una blockchain a otra, en función de las necesidades de la blockchain en cuestión.

Existen muchos tipos diferentes, por ejemplo: la prueba de trabajo, de interés, de interés delegada, de actividad, de quemado, de capacidad, de tiempo transcurrido, etc.

El algoritmo de consenso más utilizado es la prueba de trabajo, que es usada tanto en Bitcoin como Ethereum, blockchain esta última en la que se están programando la gran mayoría de contratos inteligentes (smart contracts).

 

¿Cómo ayuda la prueba de trabajo (proof of work) a hacer la cadena de bloques inmutable?

En Bitcoin, para incluir un bloque en la cadena el minero debe verificar las transacciones y luego resolver un puzzle matemático, que consiste en encontrar un número (nonce) para que el hash del bloque vaya precedido de un número determinado de “0”; a mayor número de ceros, más difícil es para el minero encontrar el hash.

La dificultad de esta prueba es ajustada automáticamente cada dos semanas en función del poder computacional que hay en la red, de modo que siempre lleve alrededor de 10 minutos resolver el acertijo.

Cuando un minero encuentra el nonce, incluye el bloque en la cadena, lo propaga por la red y empieza a minar el bloque siguiente. Es posible que un bloque se resuelva en una parte del mundo y en otra en momentos muy cercanos en el tiempo y, debido a que estos bloques son distintos (cada minero puede incluir transacciones distintas en el bloque además de la transacción a ellos mismos con la recompensa por minarlo (transacción coinbase)) llegará un momento en el que coexistirán dos blockchains distintas (o más).

En esos casos, el protocolo dicta que los nodos deben aceptar siempre la cadena de bloques más larga. Si un nodo está minando un bloque para una cadena de bloques y otro par de la red le comunica una blockchain más larga, dejará lo que esté haciendo y empezará a trabajar sobre la cadena más larga.

¿Y todo este rollo para qué? Pues para entender que la blockchain está viva, que si un atacante quiere cambiar el hash de un bloque que ya cuenta con, por ejemplo, 6 confirmaciones (que se han minado 6 bloques detrás), necesitará calcular el nonce de los 7 bloques siguientes, para así crear la blockchain más larga y que sea aceptada por la red.

En otras palabras, un atacante necesitará superar el poder computacional de la mitad de la red. Esto es casi imposible y es lo que se conoce como el ataque del 51%.

Y lo dicho aquí es extrapolable, salvando ciertas diferencias, a Ethereum, que también utiliza la prueba de trabajo. No obstante, esto podría cambiar tan pronto como Ethereum termine de implementar el protocolo Casper, que reemplazará la prueba de trabajo por la prueba de interés.

En definitiva, es posible decir que la inmutabilidad en Blockchain es una realidad y es inevitable, pues es lo que dota de seguridad al sistema. Ahora bien, el alcance de esa inmutabilidad dependerá del protocolo en cuestión.

 

2.5. Excepciones a la inmutabilidad: las forks y la poda de bloques

La poda de bloques (pruning) es una operación que pueden realizar los nodos en Bitcoin y que les permite reducir significativamente el tamaño de la blockchain, eliminando aquellos datos relativos a transacciones que ya han sido gastadas completamente.

 

poda pruning Bitcoin blockchain
Vid. Bitcoin white paper

 

Por otro lado, las forks son proyectos paralelos o clones de la cadena de bloques que conviven con la original.  Suelen clasificarse en tres tipos: forks operacionales o de la cadena de bloques, hard forks y soft forks.

 

Forks operacionales

Las forks operacionales se deben a la operativa normal del funcionamiento de la red que, debido a su naturaleza descentralizada, existen momentos donde confluyen diferentes cadenas de bloques hasta que se adopta la cadena más larga.

 

Hard forks

Aquí es donde la inmutabilidad en Blockchain se ve más comprometida. Se causa una hard  fork cuando, bien por un error en el código o bien por una actualización, se cambian las normas de formación del consenso y se terminan formando dos blockchains distintas.

Lo normal en estos casos es abandonar la cadena de bloques antigua y aceptar la nueva, si bien no siempre debe ser así. Ethereum Classic es precisamente la blockchain original y antigua de Ethereum, que se dividió cuando se corrigió el error que permitió a un usuario robar más de 3,5 millones de ether (The DAO attack), creando la fork a la que ahora conocemos como Ethereum.

 

Soft forks

Se conoce por soft forks (aunque en realidad no son forks) a esas actualizaciones a las normas de consenso que no originan una separación de la cadena de bloques, pues los nodos que no actualizan a la nueva versión pueden seguir funcionando en la red.

En resumen, la inmutabilidad en Blockchain se debe principalmente a la criptografía, al árbol de Merkle y al algoritmo de consenso, pero no dotan a esa de una rigidez absoluta.

Existen excepciones a la inmutabilidad en el mismo protocolo de Bitcoin, y no todas las aplicaciones que usen Blockchain tienen porque compartir la misma estructura, lo que las dotará necesariamente de diferentes grados de rigidez.

 


Foto de cabecera de Max Pixel, licencia CC0 1.0.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *