Por @Alvy — 18 de Diciembre de 2016

Este vídeo de Anders Brownworth del MIT [subtítulos en inglés] es mínimamente técnico pero está simplificado al límite para explicar a cualquiera que tenga ganas de entender en menos de 20 minutos cómo funcionan las cadenas de bloques (blockchains) que son el fundamento técnico que sirve como soporte a Bitcoin y otras «monedas virtuales» o criptodivisas – entre otras cosas.

La idea básica de una cadenas de bloques es mantener un registro, libro de contabilidad o base de datos distribuida de cierto tipo de información a lo largo del tiempo y que resista especialmente modificaciones malintencionadas. Normalmente se emplea en transacciones de tipo financiero, de modo que la cadena de bloques es una especie de «libro de contabilidad público incorruptible»: la información más reciente depende de que toda la información del pasado se encuentre intacta. Esto evita la manipulación y sirve como protección ante fraudes. En Bitcoin, por ejemplo, se usa para saber quién paga qué a quién, de modo que no se pueda negar haber recibido o pagado algo.

¿Cómo funciona en la práctica? Todo comienza con una versión simplificada y una función matemática importante: la función hash.

Las matemáticas de las funciones hash se conocen desde 1953 más o menos y se popularizaron con la criptografía moderna. Se definen como una función que «resume» una cadena de datos de cierta longitud (normalmente, larga) en una cadena más corta de longitud fija (normalmente más corta). Es algo parecido a una «suma de control» o «firma única», con ciertas virtudes peculiares: la misma información de entrada proporciona siempre la misma información de salida, dos entradas distintas no pueden producir el mismo hash (o es astronómicamente difícil que eso suceda) y todos los hashes tienen la misma probabilidad, entre otras cosas. Adicionalmente suelen ser de «un solo sentido»: con el hash de unos datos no se puede recrear cuáles eran los datos originales. En el vídeo se usa el algoritmo SHA-256 (parte del SHA-2) que produce una salida de 256 bits (32 bytes, en hexadecimal en el vídeo).

Tras demostrar con un generador de hashes SHA256 en tiempo real cómo actúa esta función se pasa a explicar lo que es un bloque: básicamente la misma idea pero en la que se utilizan como datos un número de bloque, un número arbitrario llamado nonce y un campo de datos: con todo ello se general el hash.

Lo interesante es que si se define que «un bloque válido firmado» es aquel cuyo hash comience por 0000 entonces se puede ir probando a cambiar el valor del nonce hasta que el hash cumpla esa condición. Esto es lo que hace el botón «minar»: dedicar un tiempo a ir comprobando número tras número hasta que el hash cumple esa condición. Lo interesante es que si el nonce es correcto pero cambian los datos, adiós validez del bloque; habría que volver a empezar y encontrar otro nonce.

La cadena de bloques es el siguiente paso: como su propio nombre indica son varios bloques numerados en los que están los mismos datos de antes pero al que se añade un campo extra llamado previo que contiene el hash del bloque anterior.

Lo que sucede ahora es interesante: si se cambia cualquier dato en cualquier bloque queda invalidada la firma de ese bloque, pero también la de todos los siguientes, porque a partir de ahí los hashes y previos dejan de coincidir. Si el cambio se hiciera con el bloque más reciente podría minarse de nuevo para «arreglarlo», pero cuanto más se remonta el cambio al pasado más bloques habría que recalcular – una tarea que pronto se vuelve imposible en la práctica.

La llamada cadena de bloques distribuida añade otro factor de seguridad, que es la replicación por un gran número de nodos, que pueden ser los propios usuarios de la blockchain. Si alguien se toma la molestia de «reescribir el pasado» y luego recalcular mediante minería todos los nonces y hashes hasta el momento actual puede que su cadena parezca válida, pero no coincidiría con el resto de cadenas que hay distribuidas por la red. Mediante un método de mayorías o votación se podría dejar en evidencia la manipulación y la manipulación no llegaría a ningún lado.

Los últimos pasos de la explicación son también muy interesantes: explican cómo se aplica todo esto de la cadena de bloques a un sistema de transacciones monetarias: basta utilizar el campo de datos para indicar (en transacciones de tokens o «fichas virtuales») las operaciones realizadas: A paga algo a B, B paga algo a C y algo a D, C paga algo a E, etcétera. No se sabe cuánto dinero tiene nadie «en total», ni se mencionan cuentas de banco ni nada parecido. Simplemente se puede garantizar lo que alguien hizo en el pasado, y que nadie pueda renegar o modificar esa «historia».

Pero luego hay que añadir el factor final, el «dinero»: si en cadena se dice «A paga 25 fichas a B…» hay que asegurarse de que A tuviera originalmente al menos 25 fichas. Para esto se utiliza una operación que originalmente «crea dinero de la nada» (¿igual que la que hacen los gobiernos con la «máquina de imprimir dinero»?) y se va asignando a los usuarios, quienes pueden irlo «dispersando de forma controlada» a continuación, pagando a otros usuarios dentro del límite que tienen. Como cada operación se puede rastrear hacia atrás, cuando A paga a B una cantidad como 25 fichas se puede volver al bloque anterior en el que se comprueba que A tenía efectivamente 25 fichas para gastar.

En el fondo la grandeza de la cadena de bloques es que todo esto sirve para que un montón de gente se ponga de acuerdo sobre lo que sucedió en el pasado. Su aplicación al campo del dinero virtual, donde resulta especialmente práctico para cantidades pequeñas y porque no hay intermediarios a menos que necesites convertirlo en algo real como billetes de euros, oro o gallinas, es tan solo una de sus múltiples posibilidades.

Relacionado:

Compartir en Flipboard  Compartir en Facebook  Tuitear