En el desarrollo de software, te encuentras constantemente con cadenas como 550e8400-e29b-41d4-a716-446655440000. UUID, contraseñas, hashes, tokens, claves API… todas parecen similares, pero su propósito de diseño es fundamentalmente diferente.
Comparación de los 8 tipos
| Tipo | Uso principal | ¿Secreto? | ¿Reversible? | Generación | Característica |
|---|---|---|---|---|---|
| UUID | Identificación única | No | — | Aleatorio / tiempo | ID sin colisiones |
| Contraseña | Autenticación | Sí | Solo el dueño | Humano | Secreto memorizado |
| Hash | Verificación | No | Irreversible | Función matemática | Huella digital |
| Token | Auth / autorización | Sí | Depende | CSPRNG | Expira |
| Clave API | Auth de servicio | Sí | — | CSPRNG | Contraseña de máquina |
| Salt | Refuerzo de hash | No | — | CSPRNG | Defensa rainbow table |
| Nonce | ID de un solo uso | No | — | CSPRNG | Prevención de replay |
| Firma | Detección de alteración | No | Irreversible | Cálculo cripto | HMAC, RSA |
UUID — Una etiqueta sin colisiones
UUID genera IDs que no colisionan en todo el mundo. No tiene relación con la seguridad — su único trabajo es la identificación. UUID v4 usa 122 bits de entropía.
Casos de uso: Claves primarias en bases de datos, IDs de objetos en sistemas distribuidos, nombres de archivos para subidas, IDs de rastreo.
UUID v1 incluye timestamp y MAC — usa v4 para IDs públicos. Nunca reutilices un UUID como token de sesión.
→ Nutzen Sie unseren kostenlosen UUID-Generator
Contraseña — El único secreto humano
La contraseña es el único tipo diseñado para la memorización humana. Almacenamiento solo con algoritmos lentos: bcrypt, Argon2 o scrypt. ¿Por qué «lentos»? Cuando un atacante intenta miles de millones de hashes por segundo, un algoritmo que tarda 0.1s por cálculo aumenta el coste del ataque exponencialmente.
La fortaleza = conjunto de caracteres × longitud. correct horse battery staple supera a P@ssw0rd. Usa siempre un gestor de contraseñas.
→ Nutzen Sie unseren kostenlosen Passwort-Generator
Hash — Una huella digital
Una función hash transforma datos de cualquier longitud en un valor de longitud fija — de forma irreversible. Es una huella digital de datos. SHA-256 comprime tanto «hello» como un archivo de 1 GB en 256 bits.
Casos de uso: Almacenamiento de contraseñas, checksums de archivos, IDs de commits en Git, blockchain.
MD5 y SHA-1 tienen ataques de colisión prácticos — usa SHA-256+. Para contraseñas, usa bcrypt/Argon2 (SHA es «demasiado rápido»).
→ Nutzen Sie unseren kostenlosen Hash-Generator
Token — Un pase temporal
Un token demuestra temporalmente «esta persona está autenticada». El ejemplo más famoso es JWT, que contiene header, payload y firma en Base64.
Casos de uso: Gestión de sesiones web, tokens OAuth 2.0, enlaces de verificación por email, auth stateless en SPAs.
El payload de JWT es Base64 — no cifrado. Nunca pongas contraseñas en un JWT. TTL corto (15 min – 1 hora) + refresh tokens.
→ Nutzen Sie unseren kostenlosen Token-Generator
Clave API — Una contraseña para máquinas
Una clave API permite que una aplicación diga «soy un usuario autorizado». No necesita ser memorizada: puede ser larga y aleatoria (128–256 bits). El riesgo principal es la filtración en código fuente.
Guarda las claves en .env y añádelo a .gitignore. El Secret Scanning de GitHub puede revocar algunas claves automáticamente.
→ Nutzen Sie unseren kostenlosen API-Schlüssel- und Token-Generator
Salt, Nonce y Firma — Los especialistas entre bastidores
Estos tres son componentes que refuerzan otros mecanismos.
Salt
Valor aleatorio por usuario al hacer hash de contraseñas. Misma contraseña + salts diferentes = hashes diferentes. No necesita ser secreto — bcrypt y Argon2 lo gestionan automáticamente.
Nonce
«Number used ONCE» — valor desechable para prevenir ataques de replay. WordPress wp_nonce_field() es un ejemplo conocido.
Firma
Demuestra que los datos no han sido alterados. HMAC combina una clave secreta con un mensaje. Los webhooks de Stripe y GitHub usan firmas HMAC.
Ejes de diseño
| Tipo | ¿Secreto? | ¿Recuperable? | ¿Unicidad? | ¿Expira? | ¿Humano? |
|---|---|---|---|---|---|
| UUID | × | × | ◎ | × | × |
| Contraseña | ◎ | ◎ | △ | × | ◎ |
| Hash | × | × | △ | × | × |
| Token | ◎ | △ | ◎ | ◎ | × |
| Clave API | ◎ | × | ◎ | △ | × |
| Salt | × | × | △ | × | × |
| Nonce | × | × | ◎ | ◎ | × |
| Firma | × | × | — | — | × |
Modelo de ataque
| Tipo | Ataque | Defensa |
|---|---|---|
| UUID | Colisión | Entropía suficiente |
| Contraseña | Fuerza bruta | Hash lento + salt + longitud |
| Hash | Preimagen | SHA-256+ |
| Token | Replay | TTL corto + HTTPS |
| Clave API | Filtración | Env vars + rotación |
| Nonce | Replay | Un solo uso |
| Firma | Alteración | Gestión de clave |
Flujo de decisión
- Propósito — ¿Identificación? ¿Autenticación? ¿Verificación? ¿Temporal?
- Amenaza — ¿Colisión? ¿Adivinación? ¿Filtración? ¿Replay?
- Entropía — 122 bits UUID, 256 bits tokens
- Generación —
Math.random()nunca; móduloscrypto - Almacenamiento — ¿Texto plano? ¿Hash? ¿Variable de entorno?
Resumen
- Identificación: UUID
- Autenticación: Contraseña, Clave API
- Verificación: Hash, Firma
- Auth temporal: Token, Nonce, Salt
Pueden verse iguales, pero su propósito es completamente diferente. «No mires la cadena — mira el propósito.»

Schreibe einen Kommentar