¿Qué es el Nonce?

Seguramente hayas escuchado en alguna conversación sobre criptografía o Bitcoin la palabra “Nonce“. Tal vez aún no sepas qué es o qué importancia tiene. En este artículo te lo contaremos todo sobre qué es el Nonce.

El nonce, en pocas palabras es un número de un solo uso. Este número es aleatorio y con unas características únicas para ser utilizado en sistemas criptográficos. El nonce no debe seguir ningún patrón reconocible. Porque en caso contrario, resultaría muy sencillo romper los sistemas criptográficos.

Se trata de un campo de 32 bits o 4 bytes. Su valor se establece de forma que el hash del bloque al que pertenece cuente con una ristra de ceros. Los otros campos del número no se pueden cambiar, ya que tienen un valor definido. Si se produce un solo cambio en el bloque, el valor de hash quedará totalmente cambiado. Para calcular el hash correcto se prueban diversas combinaciones de nonce hasta encontrar un valor que lleve al mismo hash. A continuación te explicamos más detalladamente qué es este número.

¿Cómo funciona?

La dificultad de Nonce aparece a la hora de implementarlo. Esto se debe a que es un número de un solo uso. Da igual si es el número 7 o 34 565, lo importante es que se genere aleatoriamente.

Para garantizar que dicho número jamás se repita durante en el sistema criptográfico se debería añadir una variante de tiempo que impida la repetición. Sin embargo todo esto es mucho más complejo de lo que parece.

Estos números son generados por un generador de números aleatorios. Dicho generador puede ser de software o hardware. La tarea de ambos es la de crear números aleatorios únicos en todo momento. Cada número aleatorio generado es tomado posteriormente para ser usado en una función criptográfica específica.

Cuando el número llega a la función esta lo utiliza dentro de su programación. A partir de él genera una clave y un ciclo de uso único para ese número. Una vez usado, este número no volverá a usarse jamás. Esto no es tarea fácil, ya que se trata de lograr que este número no se vuelva a repetir nunca más mientras exista la criptografía. No es tan fácil como decir “hay infinitos números”, la generación del nonce es mucho más compleja.

En todas las criptomonedas se utiliza la criptografía a gran escala y esto significa que el nonce es importante en todas las criptomonedas. En Bitcoin por ejemplo, el nonce se utiliza en la generación de un Block ID o hash de bloque en Bitcoin mediante Proof of Work (PoW). Esta no es su única función, ya que además, sirve para verificar que la prueba se ha realizado correctamente.

¿Cómo se genera el Nonce?

Ahora veremos el por qué es tan complicado generar un número aleatorio y por qué no es tan fácil como elegir cualquiera. El problema está en que ese número aleatorio es clave para la seguridad digital. No podemos elegir cualquier número. La generación de este número y su utilización garantiza la seguridad de cada función criptográfica.

Por esto la función entera debe ser totalmente aleatoria. No puede seguir ningún patrón reconocible. En el caso contrario sería realmente fácil romper la seguridad criptográfica de la que gozamos en nuestras vidas digitales.

En el caso de Bitcoin, la generación del nonce comienza con los mineros. Cuando estos se preparan para la generación de un nuevo bloque toman en cuenta un conjunto de parámetros otorgados por la red Bitcoin. Entre dichos parámetros se encuentra el Target o Hash rate. Este es un número considerablemente grande que comparten todos y cada uno de los nodos de Bitcoin. Este número indica el límite para un valor decimal de un bloque.

En pocas palabras el Hash rate nos indica el valor necesario para que el bloque se acepte en la red. La complejidad comienza cuando entendemos que mientras más pequeño sea el target, más complicada será la generación de un hash válido. Todo esto apunta a que encontrar el nonce es más costoso de lo que esperábamos, ¿Verdad?.

El trabajo para la generación continúa. Lograr esto requiere de grandes cantidades de recursos de cómputo y también de tiempo. Para que los mineros puedan generar un hash de bloque menor que el targed ofrecido por la red de Bitcoin, estos deben buscar los siguientes datos: hash del bloque anterior, la marca del tiempo del bloque, la dificultad de la red, la versión y el Merkle Root. Claro está, todos estos datos más el nonce. Con todos estos datos el minero podrá generar el bloque ID

Si por alguna razón el valor generado por el minero no es menor que el target tenemos un problema, ya que el minero debe reiniciar su trabajo. Si esto sucede el minero tendrá que calcular un nuevo nonce cada vez que falle. Así sucesivamente hasta que encuentre la solución al problema planteado.

Una vez haya encontrado la solución se envía toda la información a los nodos para que estos verifiquen si es correcta. Así los nodos se aseguran de que el minero ha encontrado una solución correcta para el problema. Esta verificación es mucho más fácil que la resolución del problema y todo gracias al nonce. A través de él es muy sencillo verificar si el hash es correcto y esto suele tomar menos de un segundo.

En una red blockchain como la de Bitcoin, basada en proof-of-work o prueba de trabajo el nonce funciona en combinación con el hash como un elemento de control para evitar la manipulación de la información de los bloques.

El nonce garantiza que los hash antiguos no se pueden volver a utilizar, ya que la alteración de cualquier elemento dentro de un bloque altera todo el hash y toda la estructura del bloque.