¿Cuál es la mejor longitud para las contraseñas generadas aleatoriamente? (Seguridad vs. compatibilidad)

10

Generalmente se recomienda usar una contraseña única para cada servicio en línea, un generador de contraseña aleatorio para crearlos y un administrador de contraseñas para almacenarlos.

Empecé a reemplazar todas mis contraseñas en línea con esta técnica, pero algunos sitios tienen ciertas reglas con respecto a la longitud de una contraseña.

Desafortunadamente, a veces, un sitio web no se programará para comunicar el número de caracteres máximo permitido y simplemente eliminará el desbordamiento si se copia en el campo de contraseña. Debido a esto, ya tuve algunos problemas para recuperar el control de una cuenta, ya que no sabía cuántos caracteres se guardaron como contraseña.

¿Hay algún número específico de caracteres que probablemente funcionará en la mayoría de los sitios / programas backend y que todavía se considera relativamente seguro para las contraseñas generadas al azar, de modo que solo puedo usar una configuración de longitud de generador de contraseña para tantos sitios como sea posible?

    
pregunta Prototype700 21.10.2017 - 00:12
fuente

4 respuestas

9

Si sus contraseñas son n caracteres extraídos al azar, con la misma probabilidad, de un conjunto de 95 caracteres (que se trata de todos los caracteres imprimibles en ASCII menos espacio), entonces cada carácter le proporciona aproximadamente 6,6 bits. de entropía, por lo que la fuerza de una contraseña aleatoria con caracteres n es 6.6 × n . Entonces:

  • Una contraseña de 10 caracteres le da una fuerza de aproximadamente 66 bits;
  • Una contraseña de 12 caracteres le da una fuerza de aproximadamente 79 bits;
  • Una contraseña de 14 caracteres le da una fuerza de aproximadamente 92 bits;
  • Una contraseña de 20 caracteres te da una fuerza de 132 bits.

En mi opinión, podría elegir sensatamente cualquiera de estas longitudes dependiendo de la aplicación. Por ejemplo, si usa una contraseña de 66 bits para un servicio en línea de bajo valor, su contraseña seguirá siendo mucho más fuerte que casi todos los que usan ese servicio. Pero si estamos hablando de una contraseña que se utiliza para obtener una clave de cifrado en el software que ejecuta en su propio hardware, debería considerar algo más sólido.

Para agregar algunos pensamientos adicionales, vale la pena considerar dos tipos de ataque:

  1. Un ataque dirigido a un sitio web (u otro servicio protegido por contraseña) en el que se haya inscrito;
  2. Un ataque contra usted específicamente .

En el escenario # 1, el cracker de contraseñas dividirá su poder de cómputo para descifrar tantas contraseñas de usuario como sea posible , con la esperanza de encontrar la fruta más baja, usuarios que tienen Contraseñas muy débiles. Creo que una contraseña de 64 a 80 bits es suficiente para defender sus contraseñas contra tales ataques.

En el escenario # 2, el atacante dedicará todo su poder computacional para descifrar específicamente la contraseña de su . En ese caso, un poderoso adversario podría (¡o quizás no!) Ser capaz de descifrar una contraseña de 66 bits, y por lo tanto podría justificar el hecho de que tenga 19-20 caracteres (para que coincida con el 128 Fuerza de seguridad de bits de la mayoría de los cifrados).

Y siempre ten en cuenta que si tu contraseña es lo suficientemente fuerte, eso solo significa que el atacante # 2 va a probar una debilidad diferente. No se moleste en hacer que su contraseña sea inoportuna si tiene grandes agujeros en otros lugares.

    
respondido por el Luis Casillas 21.10.2017 - 01:15
fuente
4

Me diferiré de las otras respuestas (hasta ahora) y sugeriré que si está generando una contraseña aleatoria única por sitio web, no necesita una contraseña realmente larga.

Permite reflexionar sobre las amenazas a las contraseñas. Solo veremos el lado del servidor (es decir, no tendremos en cuenta cosas como el malware de registro de pulsaciones de teclas en la PC, ya que la longitud de la contraseña no ayuda mucho)

Básicamente, los ataques, para los que la longitud de la contraseña es relevante, se dividen en dos categorías. Fuerza bruta en línea y fuerza bruta fuera de línea.

En la fuerza bruta en línea, el atacante intenta adivinar su contraseña contra el sitio web, por lo que envía una solicitud por intento. En realidad, muchos sitios se bloquearán después de una cantidad de solicitudes incorrectas, pero para esto supongamos que no lo hacen

Ahora asuma que el atacante puede hacer 1000 conjeturas por segundo. Si ha elegido (por ejemplo) una contraseña aleatoria de 8 caracteres con caracteres superior, inferior y numéricos, hay 62 ^ 8 opciones. A ese ritmo, estamos hablando de la muerte térmica del universo antes de que lo adivinen.

Ahora alguien podría decir "¿qué pasaría si el atacante consigue una botnet para adivinarlo, puede ir mucho más rápido?", sugeriría que lo hiciera prácticamente en cualquier sitio antes de hacer esto lo suficientemente rápido como para ser práctico.

Ok, hablemos de la fuerza bruta sin conexión ya que es más relevante para la longitud de la contraseña. Aquí el atacante ya tiene una copia de su hash de contraseña, por lo que es probable que hayan comprometido la seguridad de ese sitio bastante a fondo. Aquí puede argumentar que desea que la contraseña dure lo suficiente para que el sitio se dé cuenta de que se ha procesado y le permite restablecer su contraseña.

Decir exactamente cuánto tiempo es un poco complicado ya que depende mucho de cómo el sitio almacena sus contraseñas. Si usan MD5 sin sal, eso es una gran diferencia que si usan bcrypt con un alto factor de trabajo.

Sin embargo, una cosa a considerar en todo esto es el impacto. ¿Cuál es el impacto de esta contraseña está siendo descifrado? Bueno, si ha usado un valor aleatorio único para cada sitio, es probable que el impacto sea bastante limitado. Esperaría que todos sus sitios de alto valor utilicen 2FA para que la contraseña por sí sola no llegue al atacante ni a los sitios de bajo valor. ¿Cuáles son las consecuencias del compromiso?

Todo ese análisis no responde realmente a tu pregunta, pero como regla general te sugiero que incluso utilices 10-12 caracteres con Upper, Lower y numeric, y las contraseñas son realmente aleatorias (eso es lo importante bit) es probable que a) esté bien yb) no tenga problemas con las restricciones del sitio.

Por este artículo sobre el descifrado de contraseñas un numérico superior, inferior, de 10 caracteres la contraseña demoraría 83 días para que una "Súper computadora o botnet" se dañe. Lo que tiene que preguntarse es si es probable que un atacante invierta ese costo para romper una contraseña única donde ya ha comprometido la seguridad del sitio de destino para obtener el hash ...

    
respondido por el Rоry McCune 21.10.2017 - 18:18
fuente
2

A partir de mi uso y prueba personal ad-hoc, he encontrado 20 caracteres aleatorios, usando la parte superior / inferior / dígitos más algunos especiales cuidadosamente seleccionados (@ # $ ._ sin incluir el paréntesis), para ser una buena opción. mezclar:

  • Buena longitud: es menos probable que se trunque en silencio (una vez que obtiene más de 20, más sitios comienzan a truncar en silencio), tal como ha visto, o si no los rechazan como "demasiado largos", solían ser 20 demasiado grande para este propósito, pero el paisaje ha cambiado en los últimos años)
  • Muy buen tamaño del espacio de teclado ((26 + 26 + 10 + 5) ^ 20 = 3.32x10 ^ 36) - ciertamente exceso de habilidad incluso para los viajeros en el tiempo de estados nacionales desde el futuro cercano, pero pretenden abarcar casi todos los modelos de amenazas potenciales (incluida la consideración de la Ley de Moore y los recursos a nivel de estados nacionales) para casi todos, sin ser demasiado largo
  • Cumple con los requisitos de complejidad más ingenuos / heredados (incluido el requisito de al menos un carácter especial)
  • Cumple con muchos requisitos de " non -complejidad" (caracteres prohibidos)

En otras palabras, este es un enfoque que creo que se ajustaría a la mayoría de los modelos de amenazas y casos de uso.

No tengo datos formales que respalden esta afirmación más que mi propia experimentación con mis propios inicios de sesión a lo largo de los años, pero esa es mi opinión. Es posible que tengas que jugar con la lista de ofertas especiales a lo largo del tiempo, pero entiendes la idea.

Editar para agregar una línea de comando de ejemplo:

echo $(tr -d -c 'A-Za-z0-9@#$._' </dev/urandom | head -c 20)
    
respondido por el Royce Williams 21.10.2017 - 04:24
fuente
1

Lamentablemente, no existen estándares para las contraseñas permitidas, ni similitudes entre los sitios web. Los desarrolladores ponen en las restricciones que imaginan que podrían ayudar con la seguridad, otros ponen restricciones basadas en reglas externas (pero también completamente arbitrarias). Esto significa que si descubrió que las contraseñas de 14 caracteres alcanzan el punto álgido, todavía tendrá que enfrentar otras reglas incompatibles: un número de mayúsculas, minúsculas, dígitos o símbolos, y tendrá conjuntos de caracteres restringidos que no son compatibles entre sí. Algunos sitios permiten solo unos pocos caracteres especiales (o ninguno) con la esperanza de evitar ataques de inyección de SQL; otros requieren caracteres especiales diferentes porque piensan incorrectamente que un conjunto de caracteres más amplio mejora la seguridad.

Su mejor opción es hacer que su generador sea configurable y ver cada sitio como una fuente de reglas independiente.

    
respondido por el John Deters 22.10.2017 - 00:41
fuente