Utilidades
UUID y tokens aleatorios
UUID v4, hex, base64 y PIN: de uno en uno o por cientos.
122 bits: 128 bits aleatorios menos 6 bits para la versión y la variante.
Qué es UUID v4
UUID (universally unique identifier) es un identificador de 128 bits que se escribe con treinta y seis caracteres: ocho grupos separados por guiones, por ejemplo
3f2a9c1e-7b4d-4f6a-9e21-8c5d0b7a4e13. La cuarta versión del estándar significa que casi todos sus bits son aleatorios.
De los 128 bits, seis están reservados: cuatro van al número de versión (en el tercer grupo siempre hay un 4), dos para la variante RFC 4122 (el cuarto grupo empieza por 8, 9, a o b). Quedan 122 bits aleatorios: aproximadamente 5,3 × 10³⁶ combinaciones.
La propiedad principal del UUID es que se puede crear en cualquier lugar sin coordinación con un servidor. Dos aplicaciones independientes casi nunca generarán el mismo identificador, por eso es cómodo generarlo en el cliente antes de escribirlo en la base de datos.
Dónde se usan UUID y tokens
- claves primarias de tablas cuando el autoincremento estorba o revela el tamaño de la base;
- identificadores de petición para registros y trazas entre servicios;
- claves de idempotencia para peticiones repetidas a una API;
- nombres de archivos temporales, carpetas y sesiones;
- tokens hex y base64 para enlaces de restablecimiento de contraseña e invitaciones;
- Códigos PIN para verificación local, por ejemplo en un entorno de demostración.
En qué se diferencia un UUID de una cadena aleatoria
Una cadena aleatoria es solo un conjunto de signos sin compromiso. El UUID es un estándar: longitud fija, notación canónica, número de versión y variante dentro, y soporte listo en bibliotecas de cualquier lenguaje. Si el valor debe ser leído por parsers estándar y guardado en una columna uuid, use UUID.
Si lo que necesitas es un token (para un enlace, una clave de API o un nombre de archivo), el formato es más libre. Hex es cómodo porque solo consta de dígitos y letras latinas a–f y no requiere escapado. Base64 es más denso: seis bits por carácter en lugar de cuatro, así que una cadena de la misma resistencia es una cuarta parte más corta.
Cuánta entropía tiene un token
La entropía del token se calcula como longitud × log₂(alfabeto). Para un código PIN el alfabeto son diez dígitos, así que incluso 12 caracteres aportan solo unos 40 bits: ese código protege frente a intentos aleatorios, pero no frente a un ataque dirigido.
| Tipo | Cálculo | Entropía |
|---|---|---|
| UUID v4 | 122 bits aleatorios | 122 bits |
| HEX, 16 bytes | 16 × 8 | 128 bits |
| HEX, 32 bytes | 32 × 8 | 256 bits |
| Base64, 32 caracteres | 32 × 6 | 192 bits |
| PIN, 6 dígitos | 6 × log₂(10) | ≈ 20 bits |
| Cadena propia, 24 caracteres de 32 | 24 × 5 | 120 bits |
Cómo tratar los tokens
- para sesiones y API, al menos 128 bits de entropía;
- para enlaces de un solo uso, una vida corta importa más que la longitud;
- guarda en el servidor el hash del token, no el token en sí;
- no escribas tokens en registros ni en analítica;
- PIN: solo para verificación local, no para acceder a datos.