Descentralizando el mundo con blockchain (I)

(Trobareu la versió en català més avall)

El próximo 17 de mayo, coincidiendo con el Día de Internet y el Día Mundial de las Telecomunicaciones y la Sociedad de la Información, se celebra el Congreso de Ciberseguridad UOC-Con. El congreso se enmarca dentro de las actividades de la Cátedra UOC-IBM de Ciberseguridad y del Máster interuniversitario en Seguridad de las TIC de la UOC, UAB y URV. El propósito del UOC-Con es promover el intercambio de conocimiento entre los miembros de la comunidad de seguridad, dando así a conocer sus trabajos e investigación en un entorno de intercambio de ideas. En esta edición, la temática de la UOC-Con es la Blockchain y la Seguridad cognitiva (podéis encontrar toda la información y el formulario de inscripción en el siguiente enlace: http://uoc-con.uoc.edu/)

Ya hablamos de la seguridad cognitiva en un post anterior. Hoy os queremos introducir la tecnología del blockchain.

El blockchain ha ido ganando popularidad entre los profesionales de las nuevas tecnologías desde su aparición en 2008 como parte de los procesos de gestión de la moneda criptogràfica Bitcoin. Como se aprecia en la figura de abajo, el término “blockchain ya ha superado en popularidad en las búsquedas en Google a otro concepto tan popular como “Machine Learning y está cerca de “IoT. Además, según Techradar, blockchain es una de las 10 tecnologías a tener en cuenta durante 2017.

Tendencias. Fuente: Google Trends

Cuando se habla de blockchain, siempre aparecen las mismas tres preguntas: ¿Qué es blockchain?, ¿Tiene alguna aplicación más allá de Bitcoin?, ¿Es realmente tan seguro como nos lo venden? En esta serie de artículos sobre blockchain vamos a abordar estas tres preguntas. Para empezar vamos a intentar responder de manera sencilla a la primera, ¿Qué es blockchain?

Cuando se habla de blockchain, se suele decir que mediante esta tecnología se crea una especie de libro de contabilidad (ledger en inglés) electrónico. De manera simplificada, este libro de contabilidad se crea con una cadena de bloques como la que se muestra en la figura de abajo. La cadena de ejemplo de la figura se ha construído con información extraída del blockchain de Bitcoin.

Representación básica de una parte del blockchain de Bitcoin. (Fuente de datos: blockexplorer.com)

La manera en cómo se construye la cadena hace que una vez que una transacción se ha registrado dentro de un bloque que se ha incluído en la cadena, la transacción ya no se pueda ni borrar ni modificar. Para ello, la cadena se construye de manera colaborativa entre muchos nodos de una red P2P. Con ello se consigue que no sea necesario tener una entidad centralizada que de fe del registro de datos, sino que este mecanismo se consiga gracias al consenso de los nodos de la red. De esta manera, la cadena actúa como una especie de base de datos distribuida donde sólo se permiten inserciones y lecturas, pero no actualizaciones.   

Para entender cómo se construye la cadena, primero necesitamos entender el concepto de función hash. Una función hash (hash(x) = y) es un algoritmo que devuelve un valor (i.e. y) de tamaño fijo que puede considerarse como un resumen del valor de entrada (i.e. x). La modificación del valor de entrada, incluso el cambio de un solo bit, dará lugar a que la función hash devuelva otro resumen totalmente diferente del resumen anterior. Esto hace que sea imposible predecir el resultado de la ejecución de la función, tan solo observando los datos de entrada, sin ejecutarla. Además, otra propiedad interesante de esta función es que a partir de un resumen y, no existe una función inversa que nos permita conocer el valor x que ha dado resultado y.

Una vez entendemos cómo funciona una función hash, ya podemos ponernos manos a la obra para intentar comprender cómo se construye una cadena de bloques. Para empezar, cuando un usuario desea registrar una transacción en la cadena, éste la envía a algunos de los nodos de la red P2P. Estos nodos, a los que llamamos mineros (miners en inglés), recolectan varias de las transacciones recibidas, comprueban si son válidas, y si lo son, las unen en un bloque como los que se pueden ver en la figura anterior. Entonces cada minero empieza una computación muy costosa compitiendo contra los otros mineros para incluir el bloque que él está computando en la cadena consensuada globalmente por todos los nodos de la red P2P. Esta costosa computación trata de encontrar un valor, que llamamos nonce, que se incluye en la cabecera del bloque que se está computando, juntamente con el hash del bloque anterior y un hash que representa todas las transacciones validadas en el bloque, entre otros datos. La particularidad del nonce que tiene que encontrar el minero es que tiene que ser un valor que al computar el hash de la cabecera del bloque, este hash sea inferior a un valor especificado (por este motivo los hashes que vemos en la figura tienen muchos ceros al inicio). Como las funciones hash no tienen inversa y, por lo tanto, no es posible especificar un valor resultante que cumpla esta característica y usar esta función inversa para computar el nonce, entonces la única opción que queda es computar la función hash probando con muchos nonce diferentes hasta encontrar un valor resultante del hash menor al especificado. El tiempo necesario para este cómputo utilizando un ordenador convencional sería de centenares de años, pero teniendo en cuenta que en la red de Bitcoin hay miles de participantes, muchos de ellos con máquinas especializadas para este tipo de algoritmos, de media, cada nuevo bloque es computado por algún nodo de la red cada 10 minutos. La inclusión del hash anterior en el nuevo bloque es lo que protege a la cadena de cualquier modificación, ya que si se modificara un bloque de la cadena, su hash cambiaría y por lo tanto el cambio sería detectado por los nodos de la red.

Esta inversión en tiempo de procesado que tienen que hacer los mineros es lo que garantiza que los diferentes nodos lleguen a un consenso para decidir qué bloques son aceptados y cuáles son descartados en la cadena, y es a lo que se llama Proof of Work. Como hemos comentado anteriormente, antes de empezar a calcular el nonce para un nuevo bloque, los nodos comprueban que todas las transacciones de ese bloque sean correctas (por ejemplo, comprueban que no haya una transacción que ya se haya gastado en un bloque anteriormente aceptado). Además, el trabajo de validación de los mineros se extiende también a los bloques que han sido computados por otros mineros. Así, si un nodo malicioso intenta incorporar en la cadena de bloques un bloque con una transacción no válida, el resto de nodos no aceptarían el nuevo bloque como válido, y por lo tanto, lo volverían a intentar recomputar, con lo que el bloque no válido crearía una rama de la cadena de bloques que no tendría continuidad. Por el contrario, si los nodos aceptan un nuevo bloque como válido, entonces empezarán a computar un nuevo bloque que sea el siguiente en la cadena, dando validez al bloque ya computado y dando continuidad a esa rama de la cadena. Cada bloque nuevo que se añade a la cadena actúa de confirmación de que los bloques ya añadidos son válidos. Así, contra más adentro de la cadena esté incluido un bloque, más seguridad tendremos que el contenido que hay en él es válido. De forma estándar, se considera una transacción como confirmada si está incluida en un bloque que tiene al menos 6 confirmaciones.  

En este primer artículo sobre blockchain hemos dado un breve repaso técnico de cómo se construye una cadena de bloques como la de Bitcoin. Hemos dejado fuera de este artículo datos muy relevantes para la criptomoneda, como por ejemplo el mecanismo de firmas digitales que hace posible validar a los pagadores y receptores de las transacciones. Este tipo de mecanismos ya existían antes de blockchain, y en este artículo hemos querido centrarnos en la novedad que aporta el mecanismo de la construcción de bloques que hace posible la descentralización de sistemas que hasta el momento estaban fuertemente centralizados. En el siguiente artículo de esta serie intentaremos mirar más allá de Bitcoin y buscar otras aplicaciones que tengan blockchain como base.

 

Víctor Garcia-Font es investigador de la cátedra UOC-IBM en ciberseguridad.

 

Descentralitzant el món amb blockchain (I)

El proper 17 de maig, coincidint amb el Dia d’Internet i el Dia Mundial de les Telecomunicacions i la Societat de la Informació, es celebra el Congrés de Ciberseguretat UOC-Con. El congrés s’emmarca dins de les activitats de la Càtedra UOC-IBM de Ciberseguretat i del Màster Interuniversitari en Seguretat de les TIC de la UOC, UAB y URV. El propòsit del UOC-Con és promoure l’intercanvi de coneixement entre els membres de la comunitat de seguretat, donant així a conèixer els seus treballs i recerca en un entorn d’intercanvi d’idees. En aquesta edició, la temàtica del UOC-Con és el Blockchain i la Seguretat cognitiva (podeu trobar tota la informació i el formulari d’inscripció al següent enllaç: http://uoc-con.uoc.edu/)

En un post anterior, ja vam parlar de seguretat cognitiva. Avui us volem introduir la tecnologia del blockchain.

El blockchain ha anat guanyant popularitat entre els professionals de les noves tecnologies des de la seva aparició al 2008 com a part dels processos de gestió de la moneda criptogràfica Bitcoin. Com s’aprecia a la figura de sota, el terme “blockchain” ja ha superat en popularitat en les cerques a Google a un altre concepte tan popular com “Machine Learning” i està prop de “IoT”. A més, segons Techradar, blockchain és una de les 10 tecnologies a tenir en compte durant 2017.

Tendències. Font: Google Trends

Quan es parla de blockchain, sempre apareixen les mateixes tres preguntes: Què és blockchain?, Té alguna aplicació més enllà de Bitcoin?, És realment tan segur com ens ho venen? En aquesta sèrie d’articles sobre blockchain abordarem aquestes tres preguntes. Per començar intentarem respondre de manera senzilla a la primera, Què és blockchain?

Quan es parla de blockchain, se sol dir que mitjançant aquesta tecnologia es crea una mena de llibre de comptabilitat (ledger en anglès) electrònic. De manera simplificada, aquest llibre de comptabilitat es crea amb una cadena de blocs com la que es mostra a la figura de sota. La cadena d’exemple de la figura s’ha construït amb informació extreta del blockchain de Bitcoin.

Representació bàsica d’una part del blockchain de Bitcoin. (Font de dades: blockexplorer.com)

La manera en com es construeix la cadena fa que una vegada que una transacció s’ha registrat dins d’un bloc que s’ha inclòs a la cadena, la transacció ja no es pugui ni esborrar ni modificar. Per a fer això, la cadena es construeix de manera col·laborativa entre molts nodes d’una xarxa P2P. Amb això s’aconsegueix que no sigui necessari tenir una entitat centralitzada que doni fe del registre de dades, sinó que aquest mecanisme s’aconsegueixi gràcies al consens entre nodes de la xarxa. D’aquesta manera, la cadena actua com una mena de base de dades distribuïda on només es permeten insercions i lectures, però no actualitzacions.

Per entendre com es construeix la cadena, primer necessitem entendre el concepte de funció hash. Una funció hash (hash (x) = y) és un algoritme que retorna un valor (i.e. y) de mida fixa que pot considerar-se com un resum del valor d’entrada (i.e. x). La modificació del valor d’entrada, fins i tot el canvi d’un sol bit, donarà lloc a que la funció hash retorni un altre resum totalment diferent del resum anterior. Això fa que sigui impossible predir el resultat de l’execució de la funció, tan sols observant les dades d’entrada, sense executar-la. A més, una altra propietat interessant d’aquesta funció és que a partir d’un resum y, no existeix una funció inversa que ens permeti conèixer el valor x que ha donat resultat y.

Un cop entenem com funciona una funció hash, ja podem centrar-nos en intentar comprendre com es construeix una cadena de blocs. Per començar, quan un usuari vol registrar una transacció a la cadena, aquest l’envia a alguns dels nodes de la xarxa P2P. Aquests nodes, als que anomenem miners (miners en anglès), recullen diverses de les transaccions rebudes, comproven si són vàlides, i si ho són, les uneixen en un bloc com els que es poden veure a la figura anterior. Llavors cada miner inicia una computació molt costosa competint contra els altres miners per incloure el bloc que ell està computant a la cadena consensuada globalment per tots els nodes de la xarxa P2P. Aquesta costosa computació tracta de trobar un valor, que anomenem nonce, que s’inclou a la capçalera del bloc que s’està computant, juntament amb el hash del bloc anterior i un hash que representa totes les transaccions validades en el bloc, entre d’altres dades. La particularitat del nonce que ha de trobar el miner és que ha de ser un valor que en computar el hash de la capçalera del bloc, aquest hash sigui inferior a un valor especificat (per aquest motiu els hashos que veiem a la figura tenen molts 0s a l’inici). Com les funcions hash no tenen inversa i, per tant, no és possible especificar un valor resultant que compleixi aquesta característica i utilitzar aquesta funció inversa per computar el nonce, llavors l’única opció que queda és computar la funció hash provant amb molts nonce diferents fins a trobar un valor resultant del hash inferior al especificat. El temps necessari per a aquest còmput utilitzant un ordinador convencional seria de centenars d’anys, però tenint en compte que a la xarxa de Bitcoin hi ha milers de participants, molts d’ells amb màquines especialitzades per a aquest tipus d’algoritmes, de mitjana, cada nou bloc és computat per algun node de la xarxa cada 10 minuts. La inclusió del hash anterior en el nou bloc és el que protegeix a la cadena de qualsevol modificació, ja que si es modifiqués un bloc de la cadena, el seu hash canviaria i, per tant, el canvi seria detectat pels nodes de la xarxa.

Aquesta inversió en temps de processament que han de fer els miners és el que garanteix que els diferents nodes arribin a un consens per decidir quins blocs són acceptats i quins són descartats en la cadena, i és al que es coneix com a Proof of Work. Com hem comentat anteriorment, abans de començar a calcular el nonce per a un nou bloc, els nodes comproven que totes les transaccions d’aquest bloc siguin correctes (per exemple, comproven que no hi hagi una transacció que ja s’hagi gastat en un bloc anteriorment acceptat). A més, el treball de validació dels miners s’estén també als blocs que han estat computats per altres miners. Així, si un node maliciós intenta incorporar a la cadena de blocs un bloc amb una transacció no vàlida, la resta de nodes no acceptarien el nou bloc com a vàlid, i per tant, el tornarien a intentar recomputar, de manera que el bloc no vàlid crearia una branca de la cadena de blocs que no tindria continuïtat. Per contra, si els nodes accepten un nou bloc com a vàlid, llavors començaran a computar un nou bloc que sigui el següent en la cadena, donant validesa al bloc ja computat i donant continuïtat a aquesta branca de la cadena. Cada bloc nou que s’afegeix a la cadena actua de confirmació que els blocs ja afegits són vàlids. Així, contra més endins de la cadena estigui inclòs un bloc, més seguretat tindrem que el contingut que hi ha en ell és vàlid. De forma estàndard, es considera una transacció com a confirmada si està inclosa en un bloc que té com a mínim 6 confirmacions.

En aquest primer article sobre blockchain hem donat un breu repàs tècnic de com es construeix una cadena de blocs com la de Bitcoin. Hem deixat fora d’aquest article dades molt rellevants per a la criptomoneda, com ara el mecanisme de signatures digitals que fa possible validar els pagadors i receptors de les transaccions. Aquest tipus de mecanismes ja existien abans de blockchain, i en aquest article hem volgut centrar-nos en la novetat que aporta el mecanisme de la construcció de blocs que fa possible la descentralització de sistemes que fins al moment estaven fortament centralitzats. En el següent article d’aquesta sèrie intentarem veure més enllà de Bitcoin i buscar altres aplicacions que tinguin blockchain com a base.

 

Víctor Garcia-Font és investigador de la càtedra UOC-IBM en ciberseguretat.

Comentar

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

Leer entrada anterior
La confianza en la gestión de programas y proyectos (y II)

En la primera parte de esta entrada, explorábamos la dificultad de gestionar el cambio y asegurar la implantación y el...

Cerrar