6.3 Social Networks for Content Diffusion
6.3.3 Network Spreadability
El algoritmo Proof of Work fue uno de los primeros en emplearse en cadenas de bloques y, si bien se ha demostrado válido porque no han aparecido problemas de seguridad significativos, consta de una serie de inconvenientes que han hecho al algoritmo poco escalable, provocando la migración hacia nuevos algoritmos de consenso. La Blockchain más significativa que emplea el algoritmo Proof of Work es Bitcoin. No obstante, fue el primero en aparecer y siempre resulta didáctico comenzar la explicación de los algoritmos de consenso por éste mismo:
Supóngase la existencia de una función hashy = H(x) conocida. Recuérdese que H(x) será una función mediante la cual será muy fácil de obtener y dado un x cualquiera. Sin embargo, dado un x cualquiera, hallar y es extremadamente complicado, ya que no existe una definición formal de H-1(x).
Una vez encontrada dicha función H(x) carente de inversa, si se posee un resultado concreto, por ejemplo H(x) = 0, para encontrar el x, tal que H(x) = 0 la única manera posible será pues probando valores de x hasta dar con el verdadero. Una vez hallado este valor x, es inmediato comprobar por el resto de la red que este valor x es válido.
Esto es pues, simplificadamente, el Proof of Work: los nodos competirán por hallar en primer lugar el valor de x, tal que H(x) = 0, y aquel que lo averigüe será premiado con una recompensa en forma de criptomoneda. Una vez hallado ese valor de x, el resto de la red podrá verificar rápidamente el valor realizando la operación hash.
En el caso particular de Bitcoin, el proceso real es algo más elaborado: en lugar de encontrar un x, tal que H(x) = 0, se buscará un x, tal que H(x) ≤ valor objetivo. . Cuanto más pequeño sea el objetivo menor posibilidad hay de que mediante prueba y error el hash obtenido sea menor al valor objetivo (por ejemplo, si el valor objetivo es 3, habrá que probar combinaciones hasta que el resultado sea 0, 1, 2 o 3, es decir, 4 posibilidades, mientras que si el valor es más alto, por ejemplo 10.000, habrá 10.001 posibilidades de dar con un valor válido). Esto, traducido a numeración binaria, implica que a mayor número de ceros a la izquierda, el valor objetivo será más pequeño y por tanto de mayor dificultad, mientras que cuanto menor sea el menor número de ceros más grande es el número y más fácil será hallar un número válido.
Con ese sencillo sistema, Bitcoin ajusta la dificultad de creación de bloques. Ajustando pues el número de ceros a la izquierda del valor objetivo se regulará la dificultad, de tal suerte que se genere un bloque cada 10 minutos aproximadamente.
La pregunta que corresponde hacerse en este momento es ¿Cómo se relaciona el número obtenido con cada bloque? Conviene recordar que cada bloque puede resumirse como un resultado hash concreto. Con lo cual, para conseguir este número se variará el bloque, bien con el orden de las transacciones, o cambiando cualquiera de sus parámetros y su resultado hash
cambiará. Por comodidad, existe ya un parámetro concreto para ello, llamado nonce, el cual puede ser modificado a gusto del minero para ir variando el hash resultante del bloque. A pesar de existir este parámetro nonce conviene recordar que cualquier modificación del bloque afecta al resultado hash del mismo, por lo que muchas veces se suele cambiar también el timestamp
(decidiendo en qué instante de tiempo se ha resuelto el bloque). Con ello el resultado del hash
cambiará hasta obtener el objetivo deseado.
Para terminar de concretar el método de resolución de bloques en Bitcoin, es necesario indicar que la red realiza un doble SHA-256 para cifrar los bloques, con lo cual el proceso descrito arriba no es tan sencillo, ya que es necesario realizarlo dos veces seguidas. Este proceso se conoce por el nombre de Hashcash con doble iteración de SHA-256. Este tipo de Proof of Work
tiene su fundamento histórico en uno de los primeros sistemas de defensa frente al correo no deseado SPAM: Cuando se envía un e-mail se pide al emisor resolver una operación (raíz cuadrada) o resolver un hash a partir de una string insertada en la cabecera del correo. Si se desea mandar un e-mail el emisor está interesado en que la otra persona lo reciba correctamente, con lo cual va a perder tiempo y a gastar capacidad de cómputo en resolver esa operación. Si se trata de spam deberá resolver esa operación muchas veces y perderá gran capacidad de recursos.
Además de Hashcash existen otros algoritmos de Proof of Work, más conocidos por sus nombres en inglés: hashcash with scrypt internal hash, Momentum birthday collision o Cuckoo Cycle Proof of Work entre otros.
Análogamente, Además de SHA-256 existen otros algoritmos hash para emplearlos en Proof of Work, comoScrypt, Blake-256, Ripemd-160, CryptoNight, HEFTY1, Quark, SHA-3, scrypt- jane, scrypt-n, y combinaciones de varios de ellos juntos. De describirán a continuación algunas singularidades de los mismos:
Scrypt posee la ventaja de que no depende tanto de la capacidad del procesador como de la RAM, y al ser la RAM un elemento más caro, la dificultad crece de forma más lineal, no tan escalonada, debido a que ésta no es aumentada a un ritmo tan alto como la capacidad de procesamiento.
Hefty1 es el algoritmo que utiliza Heavycoin para fijar la dificultad. Afirma ser Anti- ASICS.
Blacke-256 se encuentra en la SHA-3competition, es uno de los algoritmos finalistas. La operación hash es más rápida que SHA-256 para mensajes cortos. Posee dos variantes: de 32 y 64 bits que dan strings de 256 y 512 bit respectivamente.
Algunos ejemplos de cadenas de bloques que emplean el algoritmo de consenso Proof of Work
en la actualidad, además de Bitcoin son Ethereum (aunque está en proceso de cambiar su algoritmo de consenso hacia Proof of Stake), Monero, Bitcoin Cash, Dodgecoin y Quark. La red Monero resulta muy interesante porque introduce el concepto firma en anillo (las transacciones no están ligadas a un único usuario, sino que se forman anillos de firma de transacciones para evitar que se conozca la identidad de quien efectúa transacciones). Por otro lado, la BlockchainQuark presume de emplear en su PoW nueve operaciones hash diferentes (entre otros BLAKE, Blue Midnight, Wish, Grøstl, JH, Keccak o SHA-3 y Skein). Aunque quizá la preocupación es excesiva empleando seis hash diferentes sí es cierto que si en algún momento se logra romper la operación inversa de SHA-256 toda la Blockchain de Bitcoin se vendría inmediatamente abajo.
En la misma línea, el empleo de diferentes hash hace más difícil el diseño de ASIC’s para
Quark. Ello se ve acentuado por el hecho de que tres de estos algoritmos se aplican de manera aleatoria cada vez que se emplean, impidiendo una manera estándar de minar Quarks.