martes, 19 de diciembre de 2017

Bitcoin para principiantes... Aspecto técnico


Publicaré tres breves artículos sobre el Bitcoin. Este es el primero, en el que solamente intentaré hacer una sencilla aunque relativamente completa descripción tecnológica, es decir, acá estaría la respuesta más “material” posible a la pregunta ¿Qué es el Bitcoin? Posteriormente publicaré otro artículo con las consideraciones más importantes desde la teoría económica y, por último, otro sobre los aspectos más mundanos, prácticos y coyunturales en cuanto a la percepción, el uso, ventajas y riesgos del Bitcoin.

Un Bitcoin, así como casi todas las llamadas criptomonedas que se inspiran en él, no es ni una cosa material, ni un archivo en la nube, ni un código informático, ni algo almacenado en algún servidor en internet. El Bitcoin es simplemente una unidad de cuenta, es decir, la unidad en la que se contabilizan los montos de las transacciones que son registradas en un gigantesco libro contable o ledger. Este ledger es mantenido por una comunidad de pares (esto es, no centralizada ni jerarquizada, sino compuesta por gente como tú y como yo que tengan instalado un programa en su computador) conectados en red a través de internet y utilizando un protocolo común llamado Blockchain. Este libro contable contiene registros de la forma: “A usará los fondos de tales y cuales transacciones anteriores dirigidas a él para pagar a B tantos Bitcoins”. Acá, A y B, no son nombres, sino la parte pública de una llave criptográfica. Aquí viene la primera parte de lo “cripto” de las llamadas cripto-monedas… Sobre la parte de “monedas” hablaremos en el artículo sobre el aspecto económico.

Una página Web que al igual que un "wallet"
es capaz de generar un par de llaves pública/privada para Bitcoin

Una llave o clave criptográfica, en este contexto, se compone de una llave pública y de otra llave privada. Este par de llaves están relacionadas matemáticamente de forma única. Una llave no es otra cosa que una larguísima cadena de dígitos (e.g. 390fa7439ec13e948dd8…) tan larga que, junto al algoritmo de encriptación que se utiliza, posee las importantes propiedades matemáticas y estadísticas que la hace útil para esta aplicación. Por ejemplo, solamente una clave pública está apareada con una clave privada y viceversa. Además es imposible, a menos que se tenga un tiempo casi infinito y toda la capacidad computacional de la humanidad, encontrar la clave privada a partir de la clave pública. De ahí que la clave “pública” sea conocida por los demás (es la que le darías a alguien para que te haga una transferencia en Bitcoins), mientras que la clave “privada” deba mantenerse oculta (es la que utilizarías para disponer de tus Bitcoins, es decir, poder realizar pagos con ellos).

Un algoritmo de encriptación no es otra cosa que un conjunto de procedimientos matemáticos que permiten manipular de cierta forma unos datos. Por ejemplo, cualquier dato desde “hola mundo”, o una fotografía, o la información de una transacción como “A le pagó a B tres Bitcoins” puede ser “firmado” con la llave privada. Es decir, imaginemos que el algoritmo de encriptación es simplemente una calculadora muy especial que toma dos entradas u operandos: por un lado el dato que va a ser firmado y por el otro la llave privada con la que se firma. Esta calculadora dará como resultado una “firma”, que viene a ser otra larguísima cadena de dígitos (e.g. c28fe2a7129b128c…). Pero una firma tiene propiedades matemáticas particulares: es imposible, ni siquiera teniendo el dato original y la llave pública, ir hacia atrás y obtener con estos la llave privada; pero, en cambio, lo que sí es posible es usar la llave pública (hermana de la llave privada con la que se firmó el dato) para demostrar, con otra “calculadora especial”, rápidamente y sin lugar a dudas, que esa firma fue producida exactamente con ese dato que se recibió y con la clave privada que no se conoce, pues su dueño la mantiene oculta. Este útil truco matemático permite que cualquiera, sin conocer la llave privada que se utilizó para “firmar” el dato, pueda con la llave pública, la firma y el dato original, saber con toda certeza que tanto la firma producida como el dato son auténticos y que el firmante sí que posee la clave privada correcta.

Firmar un dato con una llave privada
y verificar la firma con la correspondiente llave pública

Así, una persona que “tenga” Bitcoins, lo que en realidad tiene es un par de claves: una clave privada que sólo él conoce y que le permitiría solamente a él firmar las transferencias de sus Bitcoins a otros; y otra clave pública que él da a conocer a quienes quiera que le destinen pagos (o quieran autenticar que las transferencias fueron firmadas con la clave privada correcta). Tus Bitcoins son aquellos que, de acuerdo a aquél ledger o libro contable que ya hemos introducido, hayan sido destinados en el pasado a tu llave pública y que aún no has transferido a alguien más usando tu llave privada. “Tener” Bitcoins es en realidad poder disponer de ellos y esto se logra porque solo tú, con tu correspondiente clave privada, podrías firmar transacciones usando los fondos restantes que antes hayan sido destinados a tu clave pública. Por cierto, perder tu clave privada sería en este contexto el equivalente al hundimiento de un galeón español con monedas de oro en la fosa de las Marianas: habrás perdido para siempre tus Bitcoins, ni tú ni nadie podrán usarlos jamás. Los wallets o billeteras, son los programas o servicios informáticos que se encargan de guardar de forma segura tu colección de pares de llaves públicas/privadas y de gestionar tus transferencias comunicándose con la red Blockchain que soporta al Bitcoin.

Una de las billeteras o wallets para PC más populares

Tener Bitcoins no es como tener una “cuenta bancaria”, sino que en ese gigantesco libro contable hay una serie de pagos asentados que tuvieron como destino tu llave pública y que solo podrían servir como fuentes de pagos utilizando la correspondiente llave privada que solo tú conoces. Nadie tiene cómo asociar tu identidad a tu clave pública, pero sí cualquiera puede observar todas las transacciones y todas las llaves públicas asociadas en todas las transacciones de la historia del Bitcoin. De hecho, el libro contable o ledger mantiene todas las transacciones hechas con Bitcoins desde la primera realizada por su creador en 2009 hasta las que se estén registrando justo en este instante. De hecho, puedes ver el ledger aquí: https://blockchain.info/es y con mucha paciencia ser capaz de rastrear cada transacción hacia atrás, hasta la creación de cada Bitcoin involucrado en cada transacción jamás realizada. La forma de saber cuántos Bitcoins “tiene” alguien, es simplemente hacer esto, revisar todas las transacciones que hayan tenido a tu llave pública como destino de algún pago y por supuesto restar los pagos que ya hayas realizado con esos fondos. Esto lo hace tu wallet por ti al calcular tus saldos.

Más precisamente, una transacción de Bitcoins consiste en una pieza de información que agrupa las fuentes y los destinos de la transacción. Las fuentes son algunas transacciones pasadas que hayan sido dirigidas a la llave pública del emisor. Y los destinos de la transacción incluirían los montos y las llaves públicas de los receptores a las que se dirijan los pagos. Entre estos suele incluirse el vuelto, cuando la suma de las transacciones de origen supere el monto del pago que se quiera realizar. Este vuelto generalmente se destina a la propia llave pública del emisor de la transacción. Hacer una transacción en Bitcoins consiste en utilizar el wallet o billetera para firmar con la clave privada toda esta información y mandar la firma y los datos de la transacción no a un banco, ni a algún otro intermediario, ni a un gobierno, sino a todos los nodos de la red Bitcoin para su validación y eventual registro oficial en el ledger.

Porción del bloque #500112 aceptado el 19-12-2017
Mostrando 4 transacciones de 2339
https://blockchain.info/es/block/000000000000000000498a938147db1ee4edc08f4ab5468594b03386d899a45b

¿Quién se encarga de verificar que sean míos los Bitcoins con los que cuento al firmar una transacción con mi llave privada? Pues la red de mineros de Bitcoin. Ya hemos visto que cualquier persona con el dato, su firma y la llave pública, puede certificar que quien firmó el dato lo hizo con la legítima llave privada correspondiente. El ledger o libro contable se mantiene con el protocolo Blockchain, el cual es un conjunto de reglas que rigen a todos los que quieran minar Bitcoins y hacer transacciones con ellos. El trabajo de los mineros consiste en dedicar su tiempo y poder computacional a procesar las transacciones y mantener de forma consistente y sincronizada millones de copias de una única versión del ledger. Y su recompensa, al menos principalmente por ahora, es recibir Bitcoins creados de la nada. El protocolo Blockchain impone una cantidad finita de Bitcoins, es decir, jamás habrá más de 21 millones de Bitcoins en el mercado, los cuales se irán creando cada vez más lentamente y con mayor dificultad. Hasta alcanzar este tope, el premio a los mineros es mayormente recibir Bitcoins de nueva creación. Una vez alcanzado este límite, la única recompensa para los mineros serán las comisiones que cada transacción de Bitcoins permite incluir.

La herramienta para enviar transacciones desde un wallet para PC

Cuando alguien realiza una transacción, lo que hace es utilizar el programa informático o el servicio on-line que haga las veces de wallet o billetera para “firmar” con su clave privada un texto que puede ser de la forma: “de tal transacción en la que recibí 0,2 Bitcoins y de aquella otra en la que recibí 0,4 Bitcoins, quiero transferir a tal otra clave pública 0,42 Bitcoins y enviar de vuelta lo que sobre a mi propia clave pública. Comisión: 0,0001 Bitcoins”. Como sólo esa persona puede firmar estos datos con su clave privada, pero todos los que conozcan su clave pública pueden verificar la autenticidad de la firma y, además, revisar el historial de las transacciones del inmenso, público y distribuido libro contable mantenido con el protocolo Blockchain, la validez de la transacción y la disponibilidad de los fondos es fácilmente verificable. Pero esto es solo una parte del trabajo de los mineros…

El programa informático utilizado como “billetera” de Bitcoins, con el que un usuario redacta y firma su transacción, divulga a toda la red de mineros conectados la información de dicha transacción. Ahora bien ¿cómo se ponen de acuerdo los mineros para escribir y mantener consistentemente la misma copia de un único libro contable o ledger compartido por todos con exactamente las mismas transacciones registradas en el mismo orden? La respuesta es que todos los nodos compiten entre sí para intentar que se acepte su candidato como el nuevo “bloque” de transacciones que será oficialmente registrado por todos. El ledger consiste en una única cadena de bloques (grupos de transacciones) consecutivos ya procesados, identificados cada uno con un número y encadenados de forma única, con el bloque anterior. Esto se logra con otra técnica criptográfica similar a la que hemos visto que se llama hash.

Otra herramienta: el Hash
Una especie de huella digital de un dato

Un hash es parecido a una firma (e.g. 8dd5c1383437e94990fa…) pero se produce solamente a partir de un dato (sin necesidad de llaves o claves). Es decir, de nuevo sería como una calculadora especial pero en la que solo se introduce el dato a “hashear” para producir ese larguísimo número llamado hash el cual viene a ser, en este caso, el identificador de cada bloque de transacciones, siendo el bloque de transacciones como tal el dato que introducimos en la calculadora. La utilidad de esta técnica es que si se produce el más mínimo cambio en el dato original, el nuevo hash que se produciría sería radicalmente distinto. Por tanto, el encadenar los bloques, esto es incluir el en siguiente bloque el hash del anterior y así sucesivamente, impediría que algún bloque antiguo sea modificado o sustituido sin que se recalculen todos los bloques posteriores. De ahí el nombre del protocolo de “cadena de bloques” o Blockchain. Cada uno de los millones de mineros mantiene actualizada y sincronizada su propia copia de este libro contable. Todas las transacciones nuevas que se hagan en un instante dado, van a parar a una especie de limbo desde el que cada nodo de la red puede tomar una cierta cantidad de ellas para agruparlas en lo que será su propio candidato para ser el siguiente bloque de transacciones a registrarse oficialmente en el libro contable. Con su candidato a bloque y con el identificador o hash del último bloque aceptado por todos en sus correspondientes e idénticas copias del ledger, comienza la competencia. Aquí viene la otra parte fundamental de lo “cripto” en las llamadas criptomonedas…

El libro contable o ledger
Encadenamiento de los bloques de transacciones
Blockchain

La competencia consiste en que cada nodo debe usar esos datos (el identificador del último bloque oficial aceptado por todos y su propio candidato a nuevo bloque de transacciones) para introducirlos en otra calculadora especial (otro algoritmo criptográfico, en esencia otro “hasheo”) junto con, digamos, un “número mágico” que va incrementando en cada intento (0,1,2,3,…181.686,181.687,…) hasta que, por ensayo y error, una y otra vez, porque no hay otra forma de hacerlo, el resultado que muestre la calculadora supere finalmente el límite que en ese momento haya impuesto la red de Blockchain. Gana el nodo que resuelva esta especie de acertijo criptográfico de primero, recibe su premio (nuevos Bitcoins y las comisiones de las transferencias registradas) y lo anuncia a todos los demás nodos. Los cuales verifican fácil y rápidamente que el número mágico y los datos sean consistentes y que han superado el reto impuesto por la red. Ganar esta competencia es por una parte un juego de azar, es decir, a la hora de ir intentando un número tras otro hasta que el resultado sea uno ganador; y, por la otra, un gasto de energía, tiempo y capacidad de procesamiento al probar cada número, hacer los cálculos matemáticos (millones de “hasheos” por segundo), verificar si se superó o no la meta y hacer esto millones de veces más. Si todo es correcto, todos los demás nodos se rinden, aceptan el nuevo bloque como el último bloque oficial y lo registran como tal actualizando así sus copias del libro contable. Comienza entonces nuevamente otra competencia para seguir procesando las nuevas transacciones disponibles en el limbo de transacciones aún no verificadas. Como cada carrera depende del estado actual del libro contable, en particular del número identificador o hash del último bloque oficial (que como está encadenado depende a su vez del hash del bloque anterior y así sucesivamente), todos los nodos deben comenzar la competencia de nuevo, pues el ledger ya fue actualizado con el nuevo bloque, el cual ahora es el último ya habiéndose encadenado al anterior. El trabajo de minado puede hacerlo cada minero de forma solitaria o asociado con otros en grupos denominados “pools”, repartiéndose así el trabajo y la suerte pero también los premios.

Un pequeño cambio en el dato produce un hash totalmente distinto

Aquél límite o meta que determina la dificultad del acertijo criptográfico (esto es, la cantidad de cálculos que estadísticamente en un momento dado deba realizar un nodo para llegar eventualmente a una solución válida tratando de encontrar aquél número mágico), es calculado e impuesto por el protocolo Blockchain y varía de acuerdo con el poder computacional actual de la red (a mayor cantidad de nodos, más difícil será el reto) para intentar mantener un tiempo promedio de un bloque de transacciones confirmado cada 10 minutos. El objetivo de este acertijo es literalmente hacer gastar tiempo, energía y poder computacional a quien quiera proponer candidatos de bloques de transacciones para que sean oficialmente registrados en el libro contable. Esto es lo que se llama “proof-of-work” o prueba de trabajo. De esta forma, se asegura que un nodo malicioso que quiera hacer trampa, deba tener, además de mucha suerte, que reunir una potencia computacional mucho mayor que el resto de toda la red de millones de mineros, para que la red entera solo registre sus transacciones manipuladas una y otra vez (por el encadenamiento) hasta que logre su objetivo malicioso. Todo esto (y otros detalles que no se explican acá) está matemática y estadísticamente diseñado e instrumentalizado en las reglas que componen el protocolo Blockchain, para que una conspiración como esta no pueda ocurrir y que intentarlo sea económicamente contraproducente para quien desee hacerlo.

Dificultad impuesta a la red de mineros
y potencia computacional de la red de mineros
(Hash Rate en TH/s: millones de millones de hashes calculados por segundo
para intentar resolver el acertijo criptográfico)
https://bitcoinwisdom.com/bitcoin/difficulty

En resumen, el Bitcoin se reduce a ser la unidad de cuenta de las transacciones registradas en un libro contable público también llamado ledger. Este es mantenido por una red de computadores (en la que cualquiera puede participar), que trabajan con la mismas reglas (Blockchain) y que se apoya en herramientas criptográficas que, por un lado, hacen matemática y estadísticamente imposible hacer trampas pero, por el otro, hacen muy fácil las tareas de descubrir a quien intente hacerlas así como verificar las acciones legítimas. Tener Bitcoins se reduce a disponer de un par de claves, una pública y su par privada, con las que puedes recibir y emitir transacciones usando aquellos fondos que ya hayas recibido antes. Estas llaves se almacenan y gestionan utilizando programas o servicios online llamados wallets o billeteras con los que también puedes emitir tus transacciones y visualizar las que recibas. Minar Bitcoins consiste en ser parte de la red de computadores que mantienen el libro contable. El trabajo del minero consiste en invertir energía, tiempo y capacidad informática verificando transacciones y resolviendo acertijos criptográficos, para asegurarnos a todos el sostenimiento y la seguridad del sistema Blockchain/Bitcoin. El premio e incentivo para los mineros es recibir Bitcoins de nueva creación (hasta que se llegue al límite global de 21 millones) y llevarse las comisiones que los usuarios tengan a bien incluir en las transacciones (que también son un incentivo para que sean procesadas antes que otras con comisiones menos atractivas). La red de usuarios que mantiene al Bitcoin es abierta, descentralizada y sin jerarquías, evitando que algún actor, gobiernos, personas o empresas, puedan tener un control significativo sobre el Bitcoin y mucho menos hacerlo sin poner en riesgo la percepción de su confiabilidad y por tanto su valor.

La tecnología criptográfica que utiliza Blockchain es tanto o más robusta que la que cotidianamente utiliza el sistema bancario tradicional para garantizar la seguridad de todas sus transacciones. El riesgo esencial es mantener a salvo, de pérdida y de hackers, tus llaves privadas que permiten disponer de tus Bitcoins, en vista de que sin la llave privada será imposible disponer de tus Bitcoins y que las transacciones en Bitcoin son irreversibles. No existe algo como un banco o PayPal donde reclamar o solicitar el reenvío de una llave privada extraviada. De hecho, han sido las vulnerabilidades de algunos programas utilizados como wallets o de los servicios online que prestan esta funcionalidad en internet, las responsables de prácticamente todos los ataques, robos y pérdidas de Bitcoins en toda su historia. El resto de los casos han sido dolorosas pérdidas de claves privadas por cosas como un disco duro dañado, un pendrive perdido, una contraseña olvidada o un trozo de papel con una ridícula cantidad de dígitos que se haya extraviado.

Ningún artículo sobre Bitcoin estaría completo sin pedir una donación así que ¡Transfiéreme lo que quieras!

Una de mis llaves públicas:
12GYwL2RpPTzKH1cNDMuHg6fwioJvsaaSo

La misma pero representada como un código de barras QR:

La misma pero generada por https://blockchain.info/:
Please Donate To Bitcoin Address: [[address]]
Donation of [[value]] BTC Received. Thank You.
[[error]]

No hay comentarios:

Publicar un comentario