Blockchain - Guía rápida

En los últimos años, ha habido muchos rumores sobre Blockchain. Muchos han descrito esta como una de las tecnologías más disruptivas de la década. Especialmente, los mercados financieros podrían ser los más afectados.

La tecnología se está adaptando a muchas verticales como salud, medicamentos, seguros, propiedades inteligentes, automóviles e incluso gobiernos.

Sin embargo, hasta ahora, la implementación más exitosa de Blockchain es Bitcoin, un sistema de efectivo electrónico peer-to-peer, que por cierto también es la primera implementación de la tecnología blockchain. Por lo tanto, para comprender la tecnología blockchain, es mejor comprender cómo se diseña e implementa el sistema Bitcoin.

En este artículo, aprenderá qué es Blockchain, su arquitectura, cómo se implementa y sus diversas características. Localizaré la implementación de Bitcoin mientras describo las complejidades de blockchain.

La arquitectura blockchain no es tan trivial y muchos han escrito buenos artículos, tutoriales que incluyen varios videos. Estos van desde principiantes hasta profesionales. En este tutorial, me centraré en la comprensión conceptual de la arquitectura blockchain, teniendo en cuenta tanto a los principiantes como a los profesionales. Antes de profundizar en el blockchain, es importante saber ¿por qué surgió la necesidad de esta nueva tecnología? La respuesta a esta pregunta radica en lo que se conoce comoDouble − Spending.

Considere una situación que se muestra en la imagen:

Como se ve claramente aquí, Bob le está ofreciendo un billete de $ 10 a Lisa a cambio de un libro. Una vez que Lisa reciba este billete físico de $ 10, Bob no podrá reutilizar este dinero para otra transacción, ya que la moneda física está ahora en posesión de Lisa.

Ahora, considere una situación en la que el dinero se paga en forma digital. Esto se ilustra en la imagen:

Como el formato para el intercambio de dinero está en formato digital, es esencialmente un archivo físico binario almacenado en algún lugar del dispositivo de Bob. Después de que Bob le da este archivo (dinero digital) a Lisa, también puede darle una copia del archivo a Alice. Ambos piensan ahora que han recibido el dinero sin tener ningún medio para autenticar la moneda digital y, por lo tanto, entregarían sus respectivos bienes a Bob. Se llamadouble-spending donde el remitente gasta el mismo dinero en más de un lugar para obtener servicios o bienes de varios proveedores.

Para resolver este problema de doble gasto, se emplearía una autoridad centralizada para monitorear todas las transacciones. Esto se ilustra en la imagen:

La autoridad centralizada, que en términos comunes es su banco, mantiene un libro de contabilidad que registra todas las transacciones. Ahora, Bob tiene que enviar su dinero digital al banco, quien ingresará en su libro mayor debitando la cuenta de Bob. Después de asegurarse de que Bob tiene saldo suficiente para pagar el dinero digital que quiere enviar, enviaría el dinero a Lisa acreditando su cuenta en su libro mayor.

Ahora, está garantizado que Bob no puede gastar el dinero dos veces. Si cada transacción digital se enruta a través de una autoridad centralizada como esta, se resolvería el problema del doble gasto. Esto también proporciona otro beneficio al validar la autenticidad de cada moneda (dinero digital) que recibe en la transacción. Por lo tanto, el dinero falso (dinero duplicado como en el caso de que Bob le pague a Alice usando una copia) se detectaría fácilmente y se evitaría la circulación.

La introducción de la autoridad centralizada, aunque resuelve el problema del doble gasto, introduce otro problema importante: el costo de crear y mantener la propia autoridad centralizada.

Como los bancos necesitan dinero para sus operaciones, comienzan a recortar comisiones en cada transacción de divisas que realizan para sus clientes. Esto a veces puede resultar muy costoso, especialmente en transferencias de dinero al extranjero, donde múltiples agentes (bancos) pueden estar involucrados en todo el trato.

Todos los problemas anteriores se resuelven con la introducción de la moneda digital, llamada Bitcoin. Ahora le daré una breve descripción de lo que es Bitcoin antes de profundizar en su diseño y arquitectura.

El Bitcoin fue introducido en este mundo por Satoshi Nakamoto a través de un libro blanco de estilo de investigación titulado Bitcoin: un sistema de efectivo electrónico de igual a igual en el año 2008.

El Bitcoin no solo resolvió el problema del doble gasto, sino que también ofreció muchas más ventajas. Una de esas ventajas que vale la pena mencionar aquí es el anonimato en las transacciones. Satoshi, quien creó el sistema e hizo transacciones con pocas monedas en este sistema, es totalmente anónimo para todo el mundo.

Imagínense, en este mundo de las redes sociales, cuando la privacidad de cada individuo está en juego, el mundo no puede rastrear hasta ahora quién es Satoshi. De hecho, no sabemos si Satoshi es un individuo o un grupo de personas. Buscarlo en Google también reveló el hecho de que los bitcoins que posee Satoshi Nakamoto tienen un valor aproximado de $ 19.4 mil millones; ese dinero ahora permanece sin reclamar en el sistema Bitcoin. Entonces, ¿qué es Bitcoin? ¡Echemos un vistazo!

¿Qué es Bitcoin?

Como vio anteriormente, el banco mantiene un libro de contabilidad que registra cada transacción. Este libro mayor es de propiedad privada y el banco lo mantiene. Satoshi propuso que este libro de contabilidad sea público y sea mantenido por la comunidad.

En el momento en que haga público ese libro mayor, le vendrán a la mente varias consideraciones. Este libro mayor debe ser a prueba de manipulaciones para que nadie pueda modificar sus entradas. Como cada entrada en el libro mayor es públicamente visible, tendremos que descubrir cómo mantener el anonimato; obviamente, no le gustaría que todos en el mundo supieran que le pagué un millón de dólares.

Además, como solo hay un libro mayor que realiza un seguimiento de todas y cada una de las transacciones en el mundo, el tamaño del libro mayor sería otra gran preocupación. Proporcionar una solución a estas complejidades no fue trivial y eso es lo que estoy intentando aquí para hacerle comprender la arquitectura subyacente de Bitcoin en palabras simples.

Esta arquitectura subyacente es la Blockchainy de eso se trata este tutorial. Para comprender la arquitectura Blockchain, debe comprender algunas características clave en las que se basa. Entonces, comencemos con PKI - Criptografía de clave pública.

La criptografía de clave pública o en forma abreviada PKI también se conoce como criptografía asimétrica. Utiliza dos pares de claves: pública y privada. Una clave es un número binario largo. La clave pública se distribuye en todo el mundo y es verdaderamente pública, como sugiere su nombre. La clave privada debe mantenerse estrictamente privada y nunca se debe perder.

En el caso de Bitcoin, si alguna vez pierde la clave privada de su billetera Bitcoin, todo el contenido de sus billeteras sería instantáneamente vulnerable al robo y, antes de que se dé cuenta, todo su dinero (el contenido de su billetera) desaparecerá sin mecanismo en el sistema para rastrear quién lo robó, ese es el anonimato en el sistema que mencioné anteriormente.

La PKI cumple dos funciones: autenticación y privacidad del mensaje a través del mecanismo de cifrado / descifrado. Ahora explicaré estas dos funciones:

Autenticación

Cuando las dos partes intercambian mensajes, es importante establecer una confianza entre el remitente y el receptor. Especialmente, el receptor debe confiar en la fuente del mensaje. Volviendo a nuestro escenario anterior (representado en la Figura 1) de Bob enviando algo de dinero a Lisa para comprarle algunos bienes, veamos cómo el PKI genera esta confianza entre Bob y Lisa. Mire la imagen de abajo:

En primer lugar, si Bob quiere enviar algo de dinero a Lisa, tiene que crear una clave privada / pública propia. Tenga en cuenta que ambas claves siempre están emparejadas juntas y no puede mezclar las claves públicas y privadas de diferentes personas o instancias diferentes.

Ahora, Bob dice que le está enviando $ 10 a Lisa. Entonces crea un mensaje (un mensaje de texto plano) que contiene la clave pública de Bob (remitente), la clave pública de Lisa (receptora) y la cantidad ($ 10).

El propósito de esta remesa como "Quiero comprarle calabaza" también se agrega al mensaje. El mensaje completo ahora está firmado con la clave privada de Bob. Cuando Lisa reciba este mensaje, utilizará el algoritmo de verificación de firmas de PKI y la clave pública de Bob para asegurarse de que el mensaje realmente se originó en Bob. El funcionamiento de la PKI está más allá del alcance de este tutorial. Se remite al lector interesado a este sitio para una discusión más detallada sobre PKI. Esto establece la autenticidad del autor del mensaje. Ahora, veamos la privacidad del mensaje.

Privacidad de mensajes

Ahora que Lisa ha recibido su pago, quiere enviar el enlace a su libro electrónico que Bob quiere comprar. Entonces Lisa crearía un mensaje y se lo enviaría a Bob como se muestra en la imagen:

Lisa crea un mensaje como "Aquí está el enlace a mi libro electrónico que solicitó", lo firma con la clave pública de Bob que recibió en el mensaje de solicitud de Bob y también cifra el mensaje utilizando una clave secreta que se comparte entre los dos. durante el protocolo de enlace HTTPS.

Ahora, Lisa está segura de que solo Bob puede decodificar el mensaje utilizando la clave privada que sólo Bob tiene. Además, alguien que intercepte el mensaje no podrá recuperar su contenido porque el contenido está encriptado por una clave secreta que solo tienen Bob y Alice. Esto le garantiza a Lisa que solo Bob tiene acceso a su libro electrónico.

Habiendo visto las funciones, autenticación y privacidad de mensajes, implícitas en PKI, avancemos para ver cómo Bitcoin hace uso de PKI para proteger el libro mayor público que mencioné en el capítulo "¿Qué es Bitcoin?".

Para su conocimiento: los algoritmos PKI más populares son RSA y ECDSA , Bitcoin usa el último.

Una de las funciones más importantes de PKI es la función hash. Una función hash mapea los datos de cualquier tamaño arbitrario a datos de tamaño fijo. Bitcoin usa la función hash SHA-256 que produce un hash (salida) de tamaño 256 bits (32 bytes). Esto se ilustra en la imagen:

Bob, mientras realiza un pedido con Lisa, crea un mensaje similar al que se muestra arriba. Este mensaje se codifica mediante una función hash que produce un hash de 32 bytes. La belleza de este hash es, a todos los efectos prácticos, que el hash (el número de 256 bits) se considera único para el contenido del mensaje. Si se modifica el mensaje, el valor hash cambiará. No solo eso, dado un valor hash, es imposible reconstruir el mensaje original.

Después de haber visto la importancia del hash, pasemos a otro concepto en Bitcoin que es la minería.

Cuando Bob crea una solicitud de compra para Lisa, no se la envía solo a Lisa. Más bien, el mensaje de solicitud se transmite en toda la red a la que está conectado. La red de Bob se representa en la imagen.

El mensaje va a todos los nodos conectados (máquinas). Algunos de los nodos del diagrama están marcados como mineros. Estas son las máquinas que ejecutan un software para extraer el mensaje de bitcoin. Ahora te explicaré qué significa esta minería.

Proceso de minería

Como toda la red está ampliamente distribuida, se espera que cada minero en la red reciba múltiples mensajes de múltiples proveedores en un período de tiempo determinado. Lo que hace el minero es combinar estos mensajes en un solo bloque. Esto se ilustra en la imagen:

Después de que se forma un bloque de mensajes, el minero crea un hash en el bloque utilizando la función hash descrita anteriormente. Ahora, como sabe, si un tercero modifica el contenido de este bloque, su hash dejaría de ser válido. Por cierto, cada mensaje tiene una marca de tiempo para que nadie pueda modificar su orden cronológico sin afectar el valor hash del bloque. Por lo tanto, los mensajes en el bloque están perfectamente protegidos contra manipulaciones. Se explica con más detalle cómo se utiliza este hecho para asegurar todas las transacciones en la red.

Los bloques creados por varios mineros están encadenados para formar lo que se conoce como un libro mayor público verdaderamente distribuido.

Cada bloque de la cadena contiene múltiples mensajes (transacciones) como se vio anteriormente en la Figura 8. Un bloque de la cadena puede provenir de cualquier minero. Al crear la cadena de bloques, observamos la regla de que el hash del bloque anterior se agrega al bloque actual.

Por lo tanto, un minero mientras crea el bloque, toma el hash del último bloque de la cadena, lo combina con su propio conjunto de mensajes y crea un hash para su bloque recién creado. Este bloque recién creado ahora se convierte en el nuevo final de la cadena y, por lo tanto, la cadena sigue creciendo a medida que los mineros le agregan más y más bloques.

Como todas las transacciones tienen marca de tiempo, necesitamos implementar un servidor de marca de tiempo distribuido en una red peer-to-peer. Esto requiere una implementación adicional y esa es la Prueba de trabajo que describiré ahora. A cada bloque, ahora agregamos un elemento más llamadoNonce como se muestra en la figura siguiente -

Nonce es un número tal que el hash del bloque cumple un cierto criterio. Este criterio podría ser que el hash generado debe tener sus cuatro dígitos iniciales para ser cero.

Por lo tanto, el hash generado se vería como 000010101010xxx. Generalmente, el minero comienza con un valor de Nonce de 0 y continúa incrementándolo hasta que el hash generado cumple con el criterio especificado.

Tenga en cuenta que la generación de hash funciona de forma aleatoria y está fuera de su control, es decir, no puede forzar la función hash para generar un determinado hash. Por lo tanto, pueden ser necesarias varias iteraciones hasta que se genere el hash deseado con cuatro ceros a la izquierda. El tiempo esperado para generar un bloque en el sistema bitcoin es de 10 minutos. Una vez que el minero extrae con éxito el bloque, lo libera en el sistema, lo que lo convierte en el último bloque de la cadena.

Tenga en cuenta que hay varios mineros compitiendo para generar el bloque legítimo. El sistema Bitcoin premia al primer minero exitoso dándole ciertos bitcoins. En general, el minero con más potencia informática puede ser uno de los primeros ganadores. Esto puede provocar ataques a todo el sistema por parte de aquellos que poseen una gran capacidad de procesamiento. Describiré los ataques y cómo se mitigan hacia el final de este tutorial.

Ahora resumiré los pasos descritos anteriormente; esto es lo que pasa en la red -

  • Cualquiera que desee obtener servicios del tercero que se ha anunciado en la red primero crea una transacción (mensaje al destinatario deseado).

  • Durante un período de tiempo determinado, podría haber muchos remitentes (compradores) y receptores (vendedores) que crean dichas transacciones.

  • Todas las transacciones se transmiten en la red a todos los nodos. Tenga en cuenta que no es necesario que una transacción determinada deba llegar a todos y cada uno de los demás nodos de la red.

  • Cada nodo ensambla las nuevas transacciones en un bloque. Tenga en cuenta que el conjunto de transacciones en cada bloque es independiente del conjunto en bloques creados por otros y, naturalmente, será diferente a los demás. Esto no importa; el sistema garantiza que todas las transacciones transmitidas en la red se incluyan en algún bloque durante un período de tiempo razonable. Generalmente, el remitente incentivará al nodo ofreciendo una cierta cantidad de bitcoins al minero por sus esfuerzos. El minero puede optar por dar prioridad a la inclusión en el bloque a aquellos con mayores incentivos.

  • El nodo ahora trabaja para encontrar la prueba de trabajo para su bloque ensamblado.

  • Cuando el nodo encuentra una prueba de trabajo, transmite el bloque ensamblado en la red.

  • Los nodos que reciben el nuevo bloque lo aceptarán solo después de verificar que todas las transacciones en el bloque son válidas y no se han gastado.

  • Si el bloque se acepta como válido, el nodo que está trabajando en su propio bloque nuevo tendrá que volver a ensamblar las transacciones en su bloque asegurándose de que las transacciones no se dupliquen. El nodo ahora trabaja para encontrar la prueba de trabajo en su bloque recién creado; mientras lo hace, tomará el hash del bloque aceptado como hash anterior.

  • Asimismo, la cadena de bloques sigue creciendo para siempre.

Ahora, como hemos visto cómo funciona todo el sistema, permítanme describir algunos de los efectos secundarios y cómo resolverlos.

Como vimos en el capítulo Bitcoin - Minería, un minero puede verse inundado con muchas transacciones en cualquier período de tiempo. El tamaño máximo de un bloque está predefinido en el sistema, lo que requiere que solo se incluya un cierto número de transacciones en el bloque.

El número de transacciones en el bloque está determinado por el tamaño de bloque predefinido y la longitud promedio de cada bloque. Un consejo importante aquí es que el remitente no debe incluir demasiada información en su mensaje para que sea breve y así incentivar al minero a aceptarlo antes que los otros mensajes extensos.

Un remitente generalmente también agregará una tarifa de transacción en términos de una cierta cantidad de bitcoins para incentivar al minero para la inclusión temprana en su bloque.

La otra consecuencia en la construcción de la cadena de bloques es su mero tamaño. Durante un período de tiempo, toda la cadena de bloques puede volverse demasiado grande para que un nodo la almacene en su disco. Esto se resuelve utilizando Merkle Tree que se describe a continuación.

El problema del espacio en disco en un nodo se resuelve fácilmente porque todas las transacciones en un bloque tienen hash en un árbol Merkle como se muestra en la imagen:

El encabezado del bloque ahora contiene el hash del bloque anterior, un Nonce y el Root Hashde todas las transacciones en el bloque actual en un árbol Merkle. Como esteRoot Hashincluye los hashes de todas las transacciones dentro del bloque, estas transacciones pueden podarse para ahorrar espacio en disco. Entonces ahora su blockchain se verá como en la imagen de abajo:

Esto puede resultar en un gran ahorro de espacio en disco. Esta estrategia es utilizada por un cliente normal que está interesado en recibir pagos de otros. Sin embargo, los mineros deben guardar la cadena de bloques completa. Ahora surge la pregunta de cómo un receptor verifica el pago sin tener la capacidad de rastrear una moneda recibida hasta su origen. Esto se explica a continuación.

Considere un caso en el que, como proveedor, le gustaría verificar cierto pago realizado en el pasado. Como la cadena de bloques que tiene en su máquina contiene solo los encabezados de bloque como se muestra en la figura anterior, la transacción que está buscando falta en la copia de su cadena de bloques.

Ahora puede buscar hacia atrás en su copia de la cadena de bloques hasta encontrar un bloque en el que la transacción deseada tenga marca de tiempo. Ahora, solicite el árbol de merkle del bloque seleccionado y tendrá la transacción que está buscando. Esto se ilustra en la siguiente figura:

Aquí, asumimos que está buscando Tx103. Aunque es posible que no pueda ver el contenido de Tx103, sabe que ha sido aceptado por el bloque al que pertenece y todos los bloques subsiguientes de la cadena. Por lo tanto, puede confiar en esta transacción de manera segura y continuar con su negocio.

Como hemos visto, la red Bitcoin contiene varios mineros. Es posible que los dos mineros diferentes resuelvan la Prueba de trabajo al mismo tiempo y así sumen sus bloques al último bloque conocido de la cadena. Esto se ilustra en la siguiente imagen:

Ahora, tenemos dos ramas después del Bloque 3. Ambas ramas son válidas. Entonces, el siguiente bloque minado se puede agregar en cualquiera de las ramas. Supongamos que el minero agrega el bloque recién extraído al Bloque 104-A, la rama que contiene el Bloque 104-A será más larga que la rama que contiene el Bloque 104-B. Esto se ilustra en la siguiente imagen:

En la arquitectura de Bitcoin, la rama más larga siempre gana y las más cortas se purgan. Por tanto, el Bloque 104-B debe purgarse. Antes de purgar este bloque, todas las transacciones en este bloque se devolverán al grupo de transacciones para que se extraigan y se agreguen a algún bloque futuro. Así es como se resuelven los conflictos y el sistema mantiene una sola cadena de bloques.

Como el libro mayor que registra todas las transacciones de bitcoins se hace realmente público, la privacidad está en juego. ¿Cualquiera en el mundo podría saber quién pagó a quién? El sistema bancario tradicional puede mantener este tipo de privacidad manteniendo sus registros confidenciales.

La privacidad en el sistema Bitcoin se logra mediante una estrategia diferente. Tenga en cuenta que dijimos que el remitente de un bitcoin necesita saber a quién pagar. Entonces solicita la clave pública del proveedor al que desea realizar el pago. Esta clave pública puede ser anónima.

En el sentido de que, como proveedor de algunos servicios, cuando alguien te pregunta a dónde enviar el pago, simplemente debes enviarle tu clave pública. La asociación de esta clave pública con usted no se registra en ninguna parte del libro mayor. De esa manera, cualquier persona fuera de esta transacción solo sabría cuánto dinero se transmite y a qué clave pública se paga el dinero.

Para lograr un mayor grado de privacidad, para cada transacción, puede generar una nueva clave privada / pública para cada transacción, de modo que un tercero no pueda agrupar varias transacciones realizadas por usted. Para un forastero, esto simplemente significaría que se realizaron múltiples transacciones de valores más pequeños y que nunca estarán vinculadas a una fuente común.

Por último, cualquier sistema en línea basado en Internet es vulnerable a abusos. Ahora describiré algunos tipos posibles de ataques al sistema Bitcoin y cómo se mitigan.

Discutiré tres tipos diferentes de ataques probables en el sistema Bitcoin:

Ataque de carrera

Como atacante, puede enviar la misma moneda a diferentes proveedores en rápida sucesión, probablemente utilizando dos máquinas diferentes. Si los proveedores no esperan la confirmación del bloqueo antes de entregar la mercancía, pronto se darán cuenta de que la transacción fue rechazada durante el proceso de extracción. La solución a este tipo de ataque es que el proveedor debe esperar al menos una confirmación de bloqueo antes de enviar la mercancía.

Ataque Finney

En este caso, el atacante es el minero. El minero extrae un bloque con su transacción y no lo libera en el sistema. Ahora usa las mismas monedas en una segunda transacción y luego libera el bloque pre-minado. Obviamente, la segunda transacción eventualmente sería rechazada por otros mineros, pero esto llevará algún tiempo. Para mitigar este riesgo, el vendedor debe esperar al menos seis confirmaciones de bloque antes de liberar la mercancía.

El ataque del 51%

En este tipo de ataque, llegamos a la suposición poco práctica de que alguien posee el 51% de la potencia informática de la red. El atacante en este tipo de ataque extrae una cadena de bloques privada donde gasta las monedas dos veces.

Como posee la mayor parte de la potencia informática, se le garantiza que su cadena de bloques privada en algún momento será más larga que la cadena de la red "honesta". Luego libera su cadena de bloques privada en el sistema, lo que hace que todas las transacciones registradas anteriormente en la cadena de bloques honesta sean inválidas.

Este tipo de ataque es ficticio, ya que resulta muy caro adquirir una potencia informática que iguala o supera el 51% de la potencia informática de toda la red.

En este breve tutorial, se le presentaron varios conceptos de Blockchain tomando Bitcoin como caso de estudio. Bitcoin es la primera implementación exitosa de blockchain. Hoy, el mundo ha encontrado aplicaciones de la tecnología blockchain en varias industrias, donde se desea la confianza sin la participación de una autoridad centralizada. Así que bienvenido al mundo de Blockchain.

Lecturas adicionales -