Blockchain: en qué consiste

Estos últimos años se ha puesto muy de moda el término blockchain. Por un lado, siendo la tecnología que revolucionará el tratamiento de datos. Sobretodo en el ámbito bancario, tan señalado en la crisis económica. Por otro lado, por la aparición de las criptomonedas, las cuales se basan en esta tecnología. Además, han puesto en la calle el término de minado.

Pero realmente, ¿qué es blockchain? Básicamente es una base de datos distribuida que promete acabar con los fraudes y los ataques de hackers. Vamos a ver en qué consiste blockchain desde un punto de vista técnico.

Qué es blockchain

Blockchain se puede definir como una lista de registros continuamente creciente. Es algo más complicado, pero la idea básica es esa.

Estos registros, están organizados en bloques. Estos bloques están compuestos por los siguientes elementos.

  • Número de bloque.
  • Los datos o contenido. La información que contiene el bloque en sí. Puede ser cualquier tipo de dato y en cualquier formato.
  • El hash. Será el identificador del bloque y se forma a partir del número de bloque, nonce, contenido y del hash del bloque anterior. El hash se podría ver como una firma.
  • El hash previo. Es decir, el identificador del bloque anterior. El primero de la lista, tendrá como hash previo una cadena de ceros.
  • Nonce. Del inglés, Number that can only used Once -Número que sólo puede usarse una vez-. Se trata de un número aleatorio usado en criptografía. Es independiente del contenido y se usa básicamente para minar.
Bloque Blockchain
Bloque Blockchain

Para los programadores, el conjunto de bloques podría verse como una lista enlazada como las que nos enseñan en las asignaturas de estructuras de datos.

Elementos de blockchain

Ya tenemos la idea básica de en qué consiste. Ahora vamos a a ver las principales tecnologías y características en las cuales se apoya para ofrecer seguridad. Teniendo esto en cuenta, ya se podría implementar un sistema blockchain con cualquier lenguaje de programación.

Algoritmo HASH

Un algoritmo Hash, se podría decir que es una cadena de caracteres generada a partir de un conjunto de datos. Esta cadena generada siempre tendrá una longitud fija, independientemente del tamaño y del tipo de los datos. Algunas de las características de este algoritmo, son las siguientes.

  • Unidireccional. A partir de unos datos, se puede obtener su Hash. Pero a partir de un Hash no se puede obtener el dato original.
  • Determinista. Un mismo dato siempre generará el mismo hash.
  • Rápido computacionalmente. Es rápido de generar.
  • Efecto avalancha. Cualquier mínimo cambio, puede cambiar totalmente el hash. Es decir, en un texto largo, si cambiamos un único caracter, hará que cambie completamente su hash.
  • Resistir colisiones. Es cadenas largas, podría darse el caso de que se generen dos bloques con el mismo hash. En este caso, debería ser capaz de diferenciar ambos bloques.

El algoritmo Hash seleccionado para Blockchain, suele ser el SHA256 de 64 caracteres. En concreto son 128 bits (64 caracteres del 0 a la F). Fue desarrollado por la NSA.

Libro mayor inmutable

No se puede modificar un bloque cualquiera de la cadena. El mínimo cambio en un registro provocará el cambio del hash del bloque. Ese nuevo hash, ya no coincidirá con el que el siguiente bloque tenía guardado como el hash del bloque previo. Esto hará que se rompa la cadena y los siguientes bloques a ese queden inválidos.

P2P distribuida

Cada cadena de bloques será almacenada en distintos nodos o pares. En cada uno de estos nodos se está continuamente comprobando la integridad de la cadena. En el caso de que llegue algún cambio o bloque nuevo, al menos el 51% del resto de los nodos debe aprobarlo. En caso contrario, se restaurará en el nodo afectado una copia del resto de nodos.

Concepto Blockchain

Por lo tanto, para que un ataque tuviera éxito, debería atacar con éxito a muchos nodos. Esto es prácticamente imposible por cuestiones de tiempo, ya que debería ser un ataque simultáneo y con éxito. En cuanto no se atacaran todos los nodos a la vez, no se llegaría al 51% de consenso y se irían restaurando las copias correctas de la cadena.

Protocolos de consenso

Entro los distintos nodos debe existir un protocolo que permita tomar decisiones ante distintas situaciones y que velen por la integridad de la cadena. Por ejemplo, algunos de los problemas que resuelven estos protocolos serían estos:

  • Un hacker introduce un bloque malicioso al final de la cadena de un nodo. ¿Cómo se diferencia de un bloque válido?
  • Dos nodos meten a la vez bloques distintos al final de la cadena. Pueden estar a distintas distancias y existir cierto lag en la propagación del bloque al resto de nodos. ¿Cómo se decide cuál es el orden?

Para solucionar estos problemas existen distintos protocolos. Los más conocidos son PoW (Proof of Work) y PoS (Proof of State).

Minería en blockchain

Minar consiste básicamente en lograr generar bloques que generen un hash que cumpla con los requisitos definidos. En general, se suele definir un hash objetivo de manera que todos los hash que se generen sean menores. Por ejemplo, se puede definir que el hash debe comenzar por 6 ceros (0x000000…).

Si queremos generar un bloque válido para este caso, nos encontramos con que no podemos cambiar ni el número de bloque, ni el contenido ni el hash anterior. Por lo tanto, sólo nos queda ir probando con distintos Nonce hasta que demos con uno que genere un hash válido. El nonce no es relevante y sólo se usa para minar.

Gracias al efecto avalancha del algoritmo Hash que hemos visto antes, un nonce mayor no tiene porque generar un hash mayor. Así que hay que ir probando hasta que se de con uno que cumpla con el objetivo. De aquí el concepto de minería.

El minado es un algoritmo complejo, pero luego comprobar que el hash generado empieza por un número determinado de ceros es muy sencillo. Así que la verificación de un bloque es muy sencilla y rápida, por lo que agiliza el procesamiento de los nodos.

Ejemplo de blockchain

Ahora que ya tenemos más claros los conceptos del blockchain, podemos ver un ejemplo en funcionamiento. En la web de superdatascience, podemos encontrar un ejemplo que nos permitirá crear bloques de una cadena y ver cómo se comportan.

Deja un comentario

Información sobre protección de datos

Vicente SG te informa que los datos de carácter personal que me proporciones rellenando el presente formulario serán tratados por Vicente Sancho Guijarro (Vicente SG) como responsable de esta web. La finalidad de la recogida y tratamiento de los datos personales que te solicito es para gestionar los comentarios que realizas en este blog. Legitimación: Consentimiento del interesado. Como usuario e interesado te informo que los datos que me facilitas estarán ubicados en los servidores de Banahosting.com (proveedor de hosting de Vicente SG) dentro de la UE. Ver política de privacidad de Banahosting.com. El hecho de que no introduzcas los datos de carácter personal que aparecen en el formulario como obligatorios podrá tener como consecuencia que no atender pueda tu solicitud. Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en [email protected] así como el derecho a presentar una reclamación ante una autoridad de control. Puedes consultar la información adicional y detallada sobre Protección de Datos en mi página web: https://vicentesg.com, así como consultar mi política de privacidad.