Passphrase · Aleatoria · Determinista Argon2id · Shamir
La seguridad de una passphrase se mide asumiendo que el atacante conoce el diccionario base utilizado. Es la métrica realista frente a ataques dirigidos:
Calcular la entropía como longitud × log₂(pool de caracteres) sobrestima drásticamente la seguridad real. Un atacante serio no realiza fuerza bruta carácter a carácter: aplica ataques de diccionario con reglas de transformación (leet, mayúsculas, prefijos comunes), exactamente las operaciones que ofrece este generador. Por eso se muestra únicamente la entropía de diccionario.
No. Las opciones de capitalización, leet, prefijo y sufijo no aumentan la entropía real si son deterministas o previsibles. Su único propósito es cumplir requisitos de formato de servicios que exigen, por ejemplo, al menos un número y un símbolo. Los crackers modernos (Hashcat con best64.rule) aplican estas transformaciones automáticamente sobre cada entrada del diccionario.
La única forma de aumentar la seguridad real es añadir más palabras aleatorias.
La opción Numerización (Leet) aplica las siguientes sustituciones sobre las letras de la frase:
| Letra | o | l | z | e | a | s | g | t | b | p |
|---|---|---|---|---|---|---|---|---|---|---|
| Número | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
¿Por qué no añade seguridad? Los atacantes conocen estas transformaciones y las aplican automáticamente. Hashcat, la herramienta de cracking más usada, incluye reglas como best64.rule que convierten password → p4ssw0rd sin esfuerzo adicional. La entropía real de una frase con leet es idéntica a la de la frase original: solo depende del número de palabras aleatorias elegidas del diccionario.
Usa leet únicamente si el servicio exige un número en la contraseña y no quieres añadir un prefijo/sufijo visible.
crypto.getRandomValues()). Elegirlas uno mismo reduce la entropía real a una fracción de la teórica.El tamaño del diccionario y el uso de caracteres locales (ñ, acentos) impactan la seguridad.
| Idioma / Diccionario | Palabras (N) | Entropía por palabra | Ej. 6 Palabras |
|---|---|---|---|
| Español (este generador) Con acentos y 'ñ' | 10.000 | ≈ 13.28 bits | ≈ 79.68 bits |
| Inglés (Diccionario EFF) Sin acentos | 7.000 | ≈ 12.77 bits | ≈ 76.62 bits |
Nota: cada bit de entropía duplica el número de combinaciones posibles (2^H). La diferencia de 3,09 bits entre ambos modelos significa que una frase del diccionario de 10.000 palabras requiere ~8,3 veces más esfuerzo computacional para ser descifrada que una de 7.000.
Este generador no pretende producir contraseñas fáciles de memorizar, sino contraseñas muy fuertes usando el diccionario de 10.000 formas como "alfabeto". Cada palabra aleatoria aporta ≈ 13,28 bits de entropía, así que 6 palabras equivalen a un espacio de búsqueda de 280 candidatos: lo mismo que una contraseña de 6 caracteres elegida de un alfabeto de 10.000 símbolos distintos.
Su caso de uso principal es la Contraseña Maestra del generador Determinista de esta misma herramienta: una frase de 6+ palabras es una semilla con calidad criptográfica suficiente para alimentar la derivación Argon2id. También sirve como clave maestra de un gestor de contraseñas o como clave de cifrado de disco — cualquier caso en el que necesites una única contraseña muy fuerte que sustente todo lo demás.
Para contraseñas que vas a almacenar directamente en un gestor (una por servicio), la pestaña "Aleatoria" ofrece mayor densidad de entropía por carácter y es la opción recomendada.
El checkbox "Auto-limpiar portapapeles" bajo la contraseña generada vacía el portapapeles automáticamente tras los segundos configurados después de cada copia. Esto evita que una contraseña quede expuesta si olvidas limpiar el portapapeles manualmente. La cuenta atrás se muestra en pantalla y el portapapeles se limpia al llegar a cero.
La seguridad de una contraseña no se mide por su complejidad visual, sino por su entropía (H). Este valor representa la incertidumbre o el número de intentos que un atacante debe realizar para adivinarla por fuerza bruta pura, asumiendo que conoce el conjunto de caracteres y la longitud utilizada.
La entropía se mide en bits. Cada bit adicional duplica el número de combinaciones posibles. Una contraseña de 81 bits requiere el doble de potencia computacional para ser descifrada que una de 80 bits.
Con 100 bits de entropía existen 2100 combinaciones. Este es un número inmenso (un 1 seguido de 30 ceros), lo que lo hace matemáticamente inviable para la tecnología actual.
La entropía depende directamente de la longitud de la clave (L) y el número de caracteres disponibles en la base (R). Las bases Base32 y Base64 siguen el estándar RFC 4648:
Aumentar el tamaño de la base hace que cada carácter individual "transporte" más entropía, permitiendo claves más cortas con el mismo nivel de seguridad.
| Nombre de Base | Símbolos (R) | Bits/car. | Ej. 16 chars |
|---|---|---|---|
| Base16 (Hex) | 16 | 4.00 | 64.0 bits |
| Base32 | 32 | 5.00 | 80.0 bits |
| Base58 | 58 | ~5.86 | ~93.7 bits |
| Base62 | 62 | ~5.95 | ~95.3 bits |
| Base64 | 64 | 6.00 | 96.0 bits |
| Base Esp Simple | 74 | ~6.21 | ~99.3 bits |
| Base85 | 85 | ~6.41 | ~102.5 bits |
| Base94 | 94 | ~6.55 | ~104.9 bits |
El checkbox "Auto-limpiar portapapeles" bajo la contraseña generada vacía el portapapeles automáticamente tras los segundos configurados después de cada copia. Esto evita que una contraseña quede expuesta si olvidas limpiar el portapapeles manualmente.
El núcleo del generador es Argon2id (RFC 9106), la función de derivación de claves ganadora de la Password Hashing Competition y la recomendada hoy por OWASP. Transforma una contraseña humana en una secuencia de bits de alta calidad criptográfica. Se ejecuta mediante WebAssembly (librería hash-wasm), 100 % en local, con parámetros fijos: 46 MiB de memoria, 3 iteraciones y paralelismo 1.
La finalidad es imponer un coste computacional asimétrico. Para el usuario legítimo, que ejecuta la derivación una única vez, dura una fracción de segundo. Para un atacante que intenta adivinar la Contraseña Maestra por fuerza bruta, cada intento requiere ese mismo cálculo completo; probar mil millones de candidatos pasa de ser cuestión de segundos a requerir hardware especializado durante meses o años.
La ventaja de Argon2id frente a esquemas más antiguos es que es memory-hard: cada cálculo exige asignar varias decenas de MiB de memoria. Esto neutraliza buena parte de la ventaja del hardware de ataque masivo (GPU y ASIC), cuyo cuello de botella pasa a ser la memoria en lugar de la velocidad de cómputo. Los parámetros son fijos para garantizar el determinismo; cambiarlos alteraría todas las contraseñas derivadas.
Una sal es un valor que se añade a la Contraseña Maestra antes de derivar los bits. En este generador, la sal se obtiene aplicando SHA-256 a la combinación del campo Servicio y el campo Versión (Argon2id exige una sal de longitud mínima, y derivarla así la garantiza de forma determinista). Cambiar cualquiera de los dos produce una secuencia de 512 bits completamente distinta, sin correlación aparente con la anterior.
Aislamiento entre servicios. Con una única Contraseña Maestra, el generador produce una contraseña distinta e impredecible para cada servicio. Si un servicio sufre una filtración, esa información no permite deducir la Contraseña Maestra ni la contraseña de otro servicio.
Protección frente a tablas precomputadas. Incluir un texto específico del servicio en la sal hace inútiles las rainbow tables genéricas. Un atacante tendría que precalcular una tabla específica para cada servicio, lo que, combinado con el coste memory-hard de Argon2id, resulta inviable en la práctica.
Los gestores de contraseñas convencionales guardan una base de datos cifrada con todas las credenciales. Ese archivo puede perderse, corromperse o filtrarse. Un generador determinista funciona de forma distinta: no almacena nada. La contraseña de un servicio se recalcula bajo demanda cada vez que se necesita, a partir de la Contraseña Maestra y el nombre del servicio. El único dato persistente que necesita el usuario es lo que recuerda: su Contraseña Maestra.
Durante el uso, la contraseña generada reside únicamente en la memoria de la pestaña del navegador. Al cerrarla, desaparece. Esta página es un archivo estático que se ejecuta localmente: no envía la Contraseña Maestra ni la contraseña derivada a ningún servidor.
Argon2id produce 64 bytes (512 bits). Cada byte es un número entre 0 y 255, y hay que convertirlos a caracteres del alfabeto permitido.
El alfabeto por defecto contiene 76 caracteres: las 26 letras mayúsculas, las 26 minúsculas, los 10 dígitos y 14 símbolos de uso común (!@#$%^&*()_+-=). Se excluyen caracteres que causan problemas frecuentes en URLs, shells, SQL o sistemas de archivos.
La conversión byte → carácter se hace mediante módulo. Aplicado ingenuamente introduce un sesgo estadístico: como 256 no es múltiplo de 76, los primeros índices aparecen con probabilidad ligeramente superior. El generador descarta cualquier byte con valor igual o superior al mayor múltiplo de 76 por debajo de 256 (228), garantizando que todos los caracteres son equiprobables.
Este descarte consume entropía. Si los requisitos exigen más caracteres de los que la entropía disponible puede producir, se señala con el error "Entropía agotada".
El campo Versión es un número entero que forma parte de la sal. Modificarlo regenera una contraseña completamente distinta, sin relación con las versiones anteriores.
Renovación periódica. Si hay que cambiar la contraseña (política interna, sospecha de exposición…), basta con incrementar el número de versión.
Servicios con políticas restrictivas. En lugar de forzar la composición mediante restricciones manuales, el procedimiento recomendado es incrementar la versión hasta que la contraseña generada cumpla los requisitos del servicio. Como la derivación es determinista, la próxima vez que se necesite basta con probar versiones crecientes desde 1.
El uso de versiones es preferible a las restricciones manuales porque no reduce la entropía: cada incremento sortea una contraseña nueva en el espacio completo de posibilidades.
El panel Contador Caracteres muestra en tiempo real cuántos caracteres de cada categoría (mayúsculas A-Z, minúsculas a-z, dígitos 0-9 y símbolos) contiene la contraseña generada. Es meramente informativo: ayuda a verificar de un vistazo que la contraseña cumple los requisitos del servicio sin necesidad de contarlos manualmente.
Paso 1. Elegir una Contraseña Maestra. Larga, memorable y usada exclusivamente aquí. Una passphrase de 6+ palabras es una opción razonable (mira la pestaña "De Frase"). Si se olvida, no hay forma de recuperar ninguna contraseña derivada.
Paso 2. Introducir el nombre del servicio. Criterio consistente (p. ej. el dominio principal en minúsculas: google.com). El indicador CHK junto a la Contraseña Maestra muestra un hash corto de 4 caracteres para verificar visualmente que se ha tecleado la clave correcta.
Paso 3. Ajustar longitud y versión. Longitud por defecto 16, hasta 64 si el servicio lo permite. Versión inicial 1, solo se modifica si hace falta regenerar.
Paso 4. Generar, copiar y usar. Pulsa el botón Generar (icono de refrescar, junto a la contraseña) o la tecla Enter para lanzar la derivación; tarda una fracción de segundo. Luego copia con el botón contiguo. Al cerrar la pestaña la contraseña desaparece de memoria.
Paso 5. Si el servicio rechaza la contraseña. Incrementar la versión hasta que la generada cumpla los requisitos.
El selector Contraseña / PIN bajo "Tipo de salida" permite generar un PIN numérico en lugar de una contraseña alfanumérica. Al seleccionar PIN, el alfabeto se reduce a los 10 dígitos (0-9), la longitud por defecto baja a 6, y el panel Contador Caracteres se oculta por no ser relevante. La derivación Argon2id funciona igual: misma Contraseña Maestra y mismo Servicio producen el mismo PIN determinista.
El checkbox "Auto-limpiar portapapeles" bajo la contraseña derivada vacía el portapapeles automáticamente tras los segundos configurados después de cada copia. Esto evita que una contraseña quede expuesta si olvidas limpiar el portapapeles manualmente.
El Esquema de Compartición de Secretos de Shamir (SSS, Adi Shamir, 1979) divide un secreto en N fragmentos de forma que cualquier subconjunto de T fragmentos (el umbral) basta para reconstruirlo, mientras que con T−1 o menos es matemáticamente imposible obtener ninguna información sobre el secreto. Es un esquema T-de-N, y su seguridad no depende de la dificultad de ningún problema computacional, sino de un hecho geométrico exacto.
La intuición es sencilla. Por dos puntos pasa una única recta; por tres, una única parábola; en general, T puntos distintos determinan un único polinomio de grado T−1. Shamir invierte esta propiedad: esconde el secreto como el término independiente de un polinomio de grado T−1 y reparte puntos de ese polinomio como fragmentos.
Con T puntos, el polinomio queda fijado y se puede leer su término independiente (el secreto). Con T−1 puntos o menos, quedan infinitos polinomios de grado T−1 compatibles —uno por cada valor posible del secreto—, así que los fragmentos no descartan ninguna posibilidad.
Para repartir un secreto S con umbral T, se construye un polinomio tomando S como término independiente y generando los demás coeficientes al azar con un generador criptográfico:
Los coeficientes a1…aT−1 son aleatorios y secretos; solo existen durante el cálculo. Cada fragmento i es simplemente el valor del polinomio en un punto distinto:
El secreto es el valor en x = 0: S = f(0). Por eso x = 0 nunca se entrega como fragmento. Nótese que el grado del polinomio (T−1) fija el umbral: cuantos más coeficientes aleatorios, más puntos hacen falta para despejarlo.
Reunidos T fragmentos (x1,y1) … (xT,yT), se recupera el secreto evaluando en x = 0 el único polinomio que pasa por ellos, mediante la interpolación de Lagrange:
No hace falta hallar todos los coeficientes: solo interesa el término independiente, así que se evalúa directamente en 0. El resultado es exacto, sin redondeos ni aproximaciones, porque todo el cálculo se hace en aritmética de cuerpo finito (ver §5).
SSS ofrece secreto perfecto (en el sentido de Shannon), no solo «difícil de romper». Con T−1 puntos, para cualquier valor candidato del secreto existe exactamente un polinomio de grado T−1 que pasa por esos T−1 puntos y que en x = 0 vale ese candidato. Todos los candidatos son igual de compatibles con los fragmentos que tiene el atacante.
Consecuencia: poseer T−1 fragmentos no da ninguna ventaja sobre no tener ninguno. Ni con potencia de cómputo infinita se obtiene información, porque la información sencillamente no está presente. Esto distingue a Shamir de un cifrado: no hay clave que «adivinar».
Si los cálculos se hicieran con números reales, los fragmentos filtrarían pistas (por su tamaño o signo) y aparecerían fracciones. Para evitarlo, todo se opera en un cuerpo finito, el de Galois GF(2⁸), que tiene exactamente 256 elementos: justo los valores de un byte (0–255). Suma, resta, multiplicación y división están definidas de forma que el resultado siempre es otro byte, sin desbordamientos ni redondeos.
El secreto se procesa byte a byte: se ejecuta un esquema de Shamir independiente sobre cada byte del secreto y los resultados se concatenan. Por eso la longitud de un fragmento crece con la del secreto, y el reparto admite secretos de cualquier tamaño.
Esta herramienta usa la librería secrets.js de Grempe, cuyos fragmentos son una cadena hexadecimal autodescriptiva:
GF(2⁸)).x del fragmento (su coordenada, de 1 a N).f(x) de cada byte del secreto, en hexadecimal.El identificador permite combinar fragmentos en cualquier orden. El secreto se codifica en UTF-8 antes de repartirse, de modo que admite acentos, ñ y cualquier carácter Unicode sin pérdida.
Permite repartir la confianza y crear copias de seguridad resistentes. Ejemplos: dividir la Contraseña Maestra del modo Determinista en 5 fragmentos guardados en sitios distintos (caja fuerte, un familiar, el banco…), de modo que necesites reunir solo 3 para reconstruirla; o proteger la frase semilla de una cartera. Si pierdes algún fragmento (hasta N−T), sigues pudiendo recuperar el secreto; si alguien encuentra menos de T, no obtiene nada.
Cada fragmento lleva su identificador, pero no incluye el valor de T. Esto tiene una consecuencia crítica derivada de las matemáticas anteriores: si intentas reconstruir con menos fragmentos de los necesarios, la interpolación no da error —encuentra un polinomio de grado menor perfectamente válido— y produce un secreto incorrecto sin avisar.
Esta herramienta detecta la mayoría de esos casos comprobando si el resultado es texto válido (UTF-8) y mostrando un indicador verde (reconstruido) o rojo (no reconstruible). No es infalible, así que apunta siempre el umbral T que usaste: es el único dato que debes recordar además de dónde guardaste los fragmentos.
Todo el cálculo ocurre localmente en tu navegador, con un generador aleatorio criptográfico (crypto.getRandomValues) para los coeficientes. Ni el secreto ni los fragmentos salen jamás de tu equipo y desaparecen de memoria al cerrar la pestaña. Los fragmentos son interoperables con cualquier implementación de secrets.js de Grempe.
El checkbox "Auto-limpiar portapapeles" vacía el portapapeles automáticamente tras los segundos configurados después de cada copia, evitando que un fragmento o el secreto queden expuestos.