En esta página
Un nonce es un valor (normalmente aleatorio o pseudoaleatorio) que se usa una sola vez para aportar unicidad y ayudar a prevenir ataques como los replay attacks (ataques de repetición).
Si solo quieres quedarte con una frase: nonce = “number used once” (número usado una vez).
Qué significa “nonce” en informática
En criptografía y seguridad, un nonce es un número arbitrario que se usa una única vez dentro de una comunicación o proceso criptográfico. Se usa para que un mensaje/operación sea fresco (no reutilizado) y no se pueda “repetir” maliciosamente.
Ojo: en inglés “nonce” también puede referirse a otras cosas fuera de tecnología, pero cuando alguien busca “qué es un nonce” en Google casi siempre se refiere a seguridad/criptografía/web3.
Para qué sirve un nonce (y por qué importa tanto)
Un nonce sirve para introducir una medida de seguridad en sistemas en los que repetir algo sería peligroso. Por ejemplo:
- Evitar ataques de repetición (replay attacks): si alguien captura una petición válida y la reenvía, el nonce ayuda a detectarlo y bloquearlo.
- Mejorar autenticación y protocolos: se usa en retos/respuestas, autenticación y validaciones donde “lo viejo” debe rechazarse.
- Aportar entropía en cifrados (según el modo/algoritmo): en muchos esquemas, repetir nonce con la misma clave puede ser un desastre.
Ejemplo simple para entenderlo en 20 segundos
Imagina un servidor que quiere asegurarse de que una solicitud no es una repetición:
- El servidor genera un nonce único y lo entrega al cliente.
- El cliente lo devuelve firmado/hasheado junto con su solicitud.
- El servidor verifica que:
- el nonce es válido, y
- no se había usado antes (o está dentro de una ventana de tiempo).
Eso reduce muchísimo la posibilidad de que un atacante “reproduzca” la misma solicitud.
Nonce en criptografía: cómo se usa de verdad
En criptografía, el nonce aparece en muchos sitios: autenticación, firmas, cifrados autenticados, protocolos, etc. A menudo incluye aleatoriedad o incluso timestamp, siempre con la idea de que no se repita.
La regla de oro: no repetir nonce (especialmente con la misma clave)
En modos como AES-GCM, reutilizar nonce con la misma clave puede comprometer confidencialidad y autenticidad. En la práctica, una sola reutilización puede ser catastrófica.
Traducción a tierra: si tu sistema cifra datos y por accidente repite nonce, puedes estar abriendo la puerta a que te descifren información o incluso falsifiquen mensajes.
¿Qué hace el nonce en la minería de Bitcoin?
En la minería, cada minero intenta crear un bloque válido. Para ello, debe encontrar un hash del encabezado del bloque que cumpla una condición: ser menor que un “objetivo” (target) definido por la dificultad de la red.
Como el minero no puede “forzar” un hash exacto de forma directa, lo que hace es:
- Toma los datos del bloque (transacciones, hash del bloque anterior, marca de tiempo, etc.).
- Calcula el hash del encabezado del bloque.
- Si el hash no cumple la dificultad, cambia el nonce y prueba otra vez.
- Repite millones/billones de veces hasta que da con un hash válido.
En otras palabras: en Bitcoin, el nonce es la perilla que se gira constantemente para producir hashes distintos hasta que uno “encaje” con la dificultad.
¿Por qué se llama nonce si se repite tanto?
Aunque el minero prueba muchos valores, la idea es que cada intento usa un nonce distinto, es decir, un número “de un solo uso” para ese cálculo concreto. El bloque termina quedándose con un nonce final: el que permitió encontrar el hash válido.
Dato útil para entenderlo rápido
Piensa en el nonce como el número de intento en un juego de “adivina el número”, pero en vez de adivinar un número, estás buscando un hash que empiece con cierta cantidad de ceros (simplificando). La dificultad hace que “ganar” sea cada vez más improbable, por eso el minero necesita muchísimos intentos.
Cómo ayuda esto a la seguridad de Bitcoin
Este proceso vuelve extremadamente costoso (en tiempo y energía) intentar modificar el historial de transacciones, porque cambiar un bloque implicaría rehacer la Prueba de Trabajo y volver a encontrar nonces válidos para bloques posteriores. Esa “carísima dificultad de recalcular” es parte esencial de la seguridad del sistema.
Ejemplo sencillo: cómo el nonce cambia el hash hasta cumplir la dificultad
En minería, el nonce es un campo del encabezado del bloque (block header) que el minero va cambiando para obtener un hash válido según la dificultad de la red. El nonce en Bitcoin es un campo de 4 bytes (32 bits), así que puede tomar muchos valores y se suele incrementar en cada intento.
Imagina (simplificando) que la regla de dificultad fuera:
“El hash del bloque debe empezar por 0000”
OJO: en la realidad Bitcoin no exige “ceros exactos” como regla textual, sino que el hash debe ser menor que un objetivo (target); lo de los ceros es una forma fácil de visualizarlo.
Ahora supongamos que el minero tiene este encabezado (resumen):
- Datos del bloque: versión + prevHash + merkleRoot + timestamp + nBits
- Y un nonce que va cambiando
Cada vez que cambia el nonce, recalcula el hash:
Intento 1Nonce = 1
Hash (ejemplo) = 8f3a… ❌ (no empieza por 0000)
Intento 2Nonce = 2
Hash = a91c… ❌
Intento 3Nonce = 3
Hash = 0b7e… ❌ (casi… pero no)
Intento 4Nonce = 4
Hash = 0000c4d9… ✅ (cumple la condición)
En ese momento, el minero “gana” porque encontró un nonce que hace que el hash del encabezado cumpla la dificultad, y el bloque puede proponerse a la red como válido. En la práctica, esto se repite millones o billones de veces porque el hash es impredecible, así que el minero básicamente está “probando suerte” cambiando el nonce y otros campos modificables del header.
Por eso se dice que en minería el nonce funciona como un “contador de intentos”: cada cambio de nonce genera un hash distinto, y el objetivo es encontrar uno que esté por debajo del target de dificultad.
Nonce en seguridad web: el “nonce” de CSP
En el desarrollo web moderno, “nonce” también es un atributo usado en Content Security Policy (CSP) para permitir scripts inline solo si llevan un nonce que coincida con el indicado por el servidor. Esto mitiga XSS: un atacante no puede ejecutar su script si no adivina el nonce.
Ejemplo rápido de CSP con nonce
- El servidor genera un nonce nuevo por respuesta.
- Lo envía en el header CSP y lo coloca en los
<script nonce="...">que sí se permiten.
Esto funciona solo si el nonce es impredecible y se regenera en cada carga.
Diferencias rápidas: nonce vs token vs hash vs IV
Término
Qué es
Para qué se usa
Nonce
Valor de un solo uso
Unicidad / anti-replay / autorización en CSP
Token
Credencial/llave temporal
Acceso a recursos (sesión/API)
Hash
Huella irreversible
Integridad / verificación
IV
Valor de inicialización
Cifrado (depende del modo)
Preguntas frecuentes sobre nonces
¿Un nonce siempre es aleatorio?
No necesariamente, pero en seguridad suele ser aleatorio o pseudoaleatorio para que no se pueda adivinar.
¿Qué ataque evita un nonce?
Principalmente evita ataques de repetición (replay/playback), donde un atacante reenvía mensajes válidos capturados.
¿Qué relación tiene nonce con OAuth/OpenID?
En muchos flujos se usa para asociar una respuesta con una solicitud concreta y dificultar replay/forgeries (depende del flujo y la implementación).
¿Nonce y CSP es lo mismo que nonce en criptografía?
Comparten la idea (“valor único de un solo uso”), pero el uso práctico cambia: en CSP se usa para permitir scripts legítimos y bloquear inyecciones.
