Introducción

La creación del Bitcoin supuso la utilización de una serie de atributos únicos que permitiera su funcionamiento. Uno de estos atributos es el que conocemos como nonce. Seguramente ya habrás leído o escuchado esta curiosa palabra en algún escrito o conversación sobre el Bitcoin o criptografía. Pero en ese momento seguro te habrás preguntado ¿Qué es el nonce y cuál es su importancia?

Pues bien, eso es lo que precisamente examinaremos en este nuevo artículo, dedicado a develar y enseñarte todo lo que debes saber sobre el nonce.

¿Qué es el nonce?

El nonce o "número de un solo uso", es simplemente un número. Un número aleatorio y de características únicas que tiene como finalidad ser usado en sistemas criptográficos. ¿Sencillo concepto, no crees? La verdad es que si, el concepto de nonce es muy sencillo. Pero lo realmente difícil se encuentra en su implementación, hacerlo una realidad.

Pero ¿Por qué es tan difícil implementarlo o ponerlo en práctica? La respuesta a esto viene implícita en la frase "número de un solo uso". Como ya dijimos, un nonce es un número aleatorio. Puede ser el número 1 o el número 1 mil millones, no importa, lo realmente importante es que su generación es ciertamente aleatoria.

La generación de estos números es tarea de un generador de números aleatorios. Estos generadores pueden ser de software o de hardware, pero la tarea de ambos es la misma:  crear números aleatorios únicos en todo momento. Cada número aleatorio o nonce generado, luego es tomado para ser usado en una función criptográfica específica.

Una vez allí, la función lo usa dentro de su programación. Con ello genera una clave y al mismo tiempo genera un ciclo de uso para ese nonce específico. Luego de este punto, dicho número jamás deberá ser usado nuevamente. Es en esto último donde podemos ver lo difícil en esta implementación. Y es que, garantizar que dicho número jamás se repita durante la existencia del sistema criptográfico es complejo. Cualquier persona podría pensar "Pero si hay muchos números, son infinitos". La verdad es que en cierta forma está en lo correcto, pero lastimosamente, esto de generar un nonce es mucho complejo que eso.

Ahora bien ¿Por qué tantos problemas para generar un número aleatorio? ¿Por qué no vale tomar cualquier número? La primera pregunta se responde de forma sencilla: los números aleatorios son indispensables para la seguridad digital. Mientras que la respuesta para la segunda pregunta es bastante corta: No nos vale tomar cualquier número. La existencia de los numero aleatorios o nonce, nos resulta de vital en criptografía. Esto se debe a que la generación y utilización de números aleatorios garantiza la seguridad de las funciones criptográficas. Por lo que dicha generación debe ser realmente aleatoria. Es decir, no debe seguir ningún patrón reconocible. Porque en caso contrario, resultaría muy sencillo romper los sistemas criptográficos que mantiene la seguridad de nuestras vidas digitales en la actualidad.

Pero esto no solo resulta vital solo en criptografía, en el mundo de la blockchain también es muy importante. Recordemos que la tecnología blockchain funciona bajo la construcción de potentes sistemas criptográficos que garantizan su funcionamiento en todo momento. Ahora veamos como el nonce resulta vital en el mundo de la blockchain y cuáles son sus usos en esta tecnología.

Relacionado: Qué es y cómo funciona la minería de Bitcoin.

El nonce en la tecnología blockchain

Cuando Satoshi Nakamoto diseñó el Bitcoin, lo creó con un fuerte uso de criptografía en todo su funcionamiento. Por ejemplo, Bitcoin usa criptografía al crear las llaves públicas y privadas de sus monederos. Para lograr esto, Bitcoin hace uso de la conocida criptografía asimétrica. Al mismo tiempo, cuando emitimos una transacción o cuando se mina un bloque, Bitcoin hace uso la función hash SHA-256. Esta es un función de generación de hashes que hace uso de principios criptográficos para generar cadenas de texto únicas e irrepetibles.

Todo lo anterior nos dice claramente, que la criptografía forma parte esencial e inseparable de la tecnología del Bitcoin. Y lo mismo es válido para toda blockchain y criptomoneda que existe en la actualidad. Ya con esto podemos tener en claro, el porque el nonce es esencial en la tecnología blockchain.

Sin embargo, el funcionamiento e impacto del nonce en una blockchain como Bitcoin va mucho más allá. Pero para entender esto, veremos a continuación una explicación de cómo funciona el nonce dentro de Bitcoin.

¿Cómo funciona?

En Bitcoin, el nonce es usado para generar un Block ID o hash de bloque en Bitcoin por medio de la Prueba de Trabajo (Proof of Work - PoW). Además, también sirve para verificar rápidamente que dicha prueba se ha realizado exitosamente. Pero encontrar el nonce no es una tarea fácil. Como sabrás, en Bitcoin cada bloque que forma la cadena de bloque (blockchain), tiene un identificador o Block ID único e irrepetible. Este Block ID, es en realidad un hash SHA-256 con unas características únicas. Características que vienen como resultado del extremadamente complejo y computacionalmente costoso proceso de minería de Bitcoin.

Cuando los mineros se preparan para generar un bloque, lo hacen tomando en cuenta una serie de parámetros que son otorgados por la red Bitcoin. Uno de estos parámetros es el llamado target o hash target. El target es un número muy grande (256 bits de ancho) que comparten todos los nodos de Bitcoin. Este target es el que indica el límite máximo del valor decimal de un Block ID para un determinado momento. Es decir, el target indica el valor que debe tener un hash de bloque para que este sea aceptado por la red. El punto está en que cuanto menor sea el target, más difícil será generar un hash de bloque válido. Esto se debe a que encontrar el nonce correcto lleva más trabajo.

Así tenemos que el trabajo de minería se reduce a generar un hash de bloque o Block ID que sea menor que el target que ha propuesto la red Bitcoin. Para lograr esto, los mineros deben tomar los siguientes datos: versión, hash del bloque anterior, el Merkle Root, la marca de tiempo del bloque y la dificultad de la red. A todos estos datos se les suma el nonce generado por el minero. El minero tomará todos estos datos y entonces dará inicio al proceso de generar el hash de bloque o Block ID.

Lo importante de este proceso, es que el valor decimal del hash generado por el minero debe ser menor que el target que ha propuesto la red. En caso contrario, el minero debe reiniciar su trabajo. Es decir, el ciclo de tomar todos los datos mencionados anteriormente, generar un nuevo nonce y calcular el hash del bloque, se repetirá hasta que el minero haya encontrado una solución al problema planteado.

Esto lo lleva a calcular en cada iteración un nuevo nonce y con ello un nuevo hash de bloque que deberá verificar. La tarea puede llevarle a calcular miles de millones de nonce y hashes distintos hasta dar con la combinación correcta. Pero una vez que lo ha encontrado, ha conseguido lo que llaman el Ticket de Oro. Es decir, han generado un bloque y ello les permite acceder a la recompensa y a las comisiones que están dentro de ese bloque.

Pero este no es el final del nonce. Cuando el minero ha logrado resolver el hash del bloque, este pasa a la red el bloque resuelto con todos sus datos, incluyendo el nonce. Cuando los nodos reciben esta información, toman los datos antes mencionados incluyendo el hash y el nonce generado por el minero.

De esta forma, los nodos pueden verificar si realmente los mineros han encontrado una solución válida al problema que les ha planteado la red. La diferencia, es que la verificación de este trabajo es muy sencilla, de hecho, no suele tomar siquiera un segundo verificarla. Esto se debe, a que con el nonce generado, es muy sencillo verificar si el hash es correcto. Así que el verdadero trabajo pesado recae sobre los mineros, mientras que los nodos solo verifican que todo está bien y dan el visto bueno. De recibirlo, los nodos incluirán el nuevo bloque en la blockchain y se reiniciará el trabajo de generación de bloques.

Relacionado: ¿Qué es un hash?

El nonce en otras blockchain

Por otro lado, el nonce también resulta ser un valor de gran importancia en otras criptomonedas. Por ejemplo, todos los derivados de Bitcoin, como los son Litecoin o Dash, tienen en su programación la generación y uso de este tipo de número. De hecho, cualquier sistema basado en Proof of Work (PoW) usa nonce para realizar este trabajo.

Sin embargo, las blockchain con protocolo de consenso PoW no son las únicas en usar nonce. Las blockchain que usan el protocolo de Prueba de Participación (Proof of Stake - PoS) también lo usan. Eso pone a criptomonedas como NEO, Binance Coin, Stellar, Decred o Waves a usar este tipo de números aleatorios para su funcionamiento. 

Lo mismo podemos decir de criptomonedas que usan la Prueba de Autoridad (Proof of Authority - PoA) o la Prueba de Tiempo Transcurrido (Proof of Elapsed Time - PoET), esta última ligada al desarrollo de Hyperledger. De hecho, el desarrollo de Hyperledger basa su funcionamiento en la creación de nonce usando sistemas de generación de números aleatorios habilitados por hardware para alcanzar un mayor rendimiento.

Por supuesto, en protocolos como PoS, PoA y PoET, el nonce es usado con otros objetivos y la dificultad de su cálculo es mucho menor. Pero pese a esto, el concepto aplicado es el mismo, un número aleatorio creado para garantizar la seguridad criptográfica de la blockchain.

Como ven, el nonce en un número muy especial. No solo en la tecnología blockchain, sino también en la criptografía que usamos día tras día y que nos asegura una vida digital más privada y segura.