secure remember plus password online norton google generate easy security passwords

security - remember - password generator plus



¿cómo se computa la complejidad de la contraseña? (6)

Consulte también ¿Cuál es la mejor manera de verificar la fortaleza de una contraseña?

Algunas aplicaciones (o sitios web) calculan la complejidad de una contraseña cuando la escribe. Por lo general, muestran una barra roja que se vuelve naranja, luego verde, y aún más verde a medida que su contraseña se hace más larga, y contiene más clases de caracteres (es decir, minúsculas, mayúsculas, signos de puntuación, dígitos ...)

Aquí está el algoritmo que uso.

private int GetPasswordComplexity(string password) { if (password.Length <= 4) return 1; int complexity = 0; int digit = 0; int letter = 0; int cap = 0; int other = 0; for (int i = 0; i < password.Length; i++) { if (char.IsDigit(password[i]) && i!=password.Length-1) digit = 1; else if (char.IsLower(password[i])) letter = 1; else if (char.IsUpper(password[i]) && i!=0) cap = 1; else other = 1; } complexity = digit + letter + cap + other; if (password.Length <= 7) complexity = Math.Min(3, complexity); return complexity; }

Me preocupa el hecho de que mi algoritmo calificaría "Password1!" como "muy fuerte" y "] @ feé: m" como "débil" porque solo tiene 7 caracteres de largo.

EDITAR: He actualizado ligeramente el algoritmo para ignorar las letras mayúsculas y los dígitos cuando son, respectivamente, el primer y el último carácter de la contraseña.

¿Alguien aquí tiene experiencia con este tipo de problemas? ¿Cómo agregarías un diccionario para detectar palabras comunes?


También debe verificar contra un diccionario. Creo que Apple hace esto en su comprobador de contraseñas incorporado.


Usar algo como cracklib es muy bueno si puede permitirse el tiempo de verificar contra todas las posibles reglas. Si solo quieres algo rápido, digamos para un medidor de fuerza basado en JavaScript, entonces considera estimar el número de posibles conjeturas que se requerirían para un ataque de fuerza bruta. Para cada tipo de carácter visto actualice un multiplicador basado en el número de caracteres potenciales de ese tipo. Entonces, si solo tiene dígitos, entonces el multiplicador sería 10. Si solo tiene minúscula, entonces el multiplicador es 26. Si ambos, entonces el multiplicador es 36, es decir, para cada carácter de la contraseña, un ataque de fuerza bruta necesita probar hasta 36 personajes diferentes. Una contraseña que contenga caracteres en mayúscula y minúscula, dígitos y puntuación, entonces tendría un multiplicador de 10 + 26 + 26 + 32 = 94 (más o menos dependiendo de la puntuación permitida).

Para estimar el número promedio de permutaciones que tomaría un método de fuerza bruta, eleve el multiplicador a la potencia igual a la cantidad de dígitos en la contraseña. Esto le da una cantidad promedio de conjeturas que tomaría romper la contraseña usando un ataque de fuerza bruta. Supongamos que cada conjetura toma un ciclo de CPU y, dado el procesador más rápido, calcule cuánto tiempo llevaría romper una contraseña dado un cierto número de permutaciones. Por ejemplo, si mi multiplicador fuera 10 y la contraseña tuviera 10 caracteres, entonces tendría 10,000,000,000 combinaciones posibles. En el procesador 3GHz, esto debería tomar 10/3 * k o 3k segundos (donde k es el número de ciclos por adivinar, típicamente pequeño). Claramente, esta es una contraseña débil.

Ahora, establezca algunos rangos que representen fortalezas de contraseña razonables. Por ejemplo, si cree que una contraseña de 8 caracteres con caracteres en minúsculas y minúsculas es mínima para la fuerza media, entonces su corte sería de 52 ^ 8 o aproximadamente de 1.5 años en un procesador 3GHz (suponiendo que k = 1). Si agrega dígitos, entonces el límite se convierte en 62 ^ 8 o aproximadamente 8 años en un procesador 3GHz.

Para ponerlo en uso, solo necesita realizar un seguimiento de los tipos de caracteres que ve, construir el multiplicador adecuado, calcular las permutaciones esperadas en función de la longitud de la contraseña y compararlo con los límites predefinidos para determinar qué fuerza tiene la contraseña.



¡Este enlace hace exactamente esto, con una explicación detallada de los criterios que se utilizan!


Recomiendo usar cracklib para esto.


Simplemente no pondría una bandera cuando vea un dígito, capital, etc., pero déles puntos. Algo así como un sistema de puntuación. Una letra normal cuenta 1, un dígito 2 y un carácter especial 3.

Ahora su número total representa tanto la cantidad de caracteres como la forma en que se crea la contraseña. Solo tiene que trazar líneas para lo que es débil y lo que es fuerte.