Entrada
Longitud, mayusculas, minusculas, numeros, simbolos, caracteres ambiguos y modo frase memorable.
La API de SafeKey se entiende como un modulo de cliente: recibe reglas, usa aleatoriedad criptografica del navegador y devuelve una contrasena lista para copiar. Menos superficie, menos datos sensibles en transito.
No hace falta enviar una contrasena a un servidor para que sea aleatoria. El navegador moderno ofrece Web Crypto API, que permite obtener bytes criptograficamente fuertes y mapearlos a un alfabeto configurable.
El usuario define longitud, numeros, simbolos, mayusculas y minusculas.
El modulo solicita bytes con crypto.getRandomValues.
Se seleccionan caracteres permitidos y se evita sesgo con rechazo cuando aplica.
La clave se muestra localmente y no se guarda en el servidor.
function securePassword(length = 16) {
const alphabet = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!@#$%&*?';
const bytes = new Uint32Array(length);
crypto.getRandomValues(bytes);
return Array.from(bytes, n => alphabet[n % alphabet.length]).join('');
}
const password = securePassword(20);Para produccion, valida longitud minima, fuerza al menos un caracter por grupo seleccionado y evita alfabetos demasiado pequenos. El ejemplo muestra la idea; la herramienta final debe cubrir requisitos de compatibilidad de cada servicio.
No envies la contrasena generada a analitica, logs, formularios ocultos ni endpoints de diagnostico.
Muestra longitud, grupos activos, boton de copiar y aviso de que la clave no se recupera al cerrar.
Permite excluir simbolos ambiguos o limitar caracteres si el servicio destino tiene reglas antiguas.
length: numero entero, recomendado 16 a 64.uppercase: incluye A-Z cuando el sitio lo permite.lowercase: incluye a-z para mejorar variedad.numbers: incluye 0-9.symbols: incluye caracteres especiales seguros.avoidAmbiguous: elimina O/0, l/1 u otros caracteres confusos.mode: password aleatorio o passphrase.generatedAt: solo para interfaz local, no para almacenar la clave.Usar Math.random: no esta pensado para seguridad criptografica.
Registrar la salida: una contrasena en logs deja de ser secreta.
Forzar patrones humanos: prefijos, sufijos o palabras reducen entropia real.
Ocultar reglas: el usuario debe saber si esta generando con simbolos, longitud suficiente y privacidad local.
La documentacion deja claro que la integracion debe vivir en cliente, usar CSPRNG y evitar que una contraseña aparezca en logs o analitica.
Longitud, mayusculas, minusculas, numeros, simbolos, caracteres ambiguos y modo frase memorable.
Usa crypto.getRandomValues y mezcla con Fisher-Yates, sin Math.random.
Muestra la clave localmente, permite copiar y nunca la envia a endpoints de seguimiento.
length, symbols, avoidAmbiguous, passphrase y entropyBits como señales visibles para el usuario.