¿Debo imponer una longitud máxima a las contraseñas?


162

Puedo entender que imponer una longitud mínima a las contraseñas tiene mucho sentido (para salvar a los usuarios de sí mismos), pero mi banco tiene el requisito de que las contraseñas tengan entre 6 y 8 caracteres, y comencé a preguntarme ...

  • ¿No haría esto más fácil para los ataques de fuerza bruta? (Malo)
  • ¿Esto implica que mi contraseña se almacena sin cifrar? (Malo)

Si alguien con (con suerte) algunos buenos profesionales de seguridad de TI que trabajan para ellos está imponiendo una longitud máxima de contraseña, ¿debería pensar en hacer algo similar? ¿Cuáles son las ventajas y desventajas de esto?


16
Es casi seguro que existe una política de "tres golpes y estás fuera", que elimina la amenaza de un ataque de fuerza bruta.
Stu Thompson

23
No hay excusa para esto para sistemas no heredados, como los sitios web modernos.
mparaz

77
No creo que la respuesta sea puramente TI. El tamaño mínimo (6) y un límite máximo de intento es "probable" para eliminar las conjeturas salvajes. Supongo que el tamaño máximo (8) es limitar el número de llamadas (y, en consecuencia, el costo) del soporte para "Vaya, olvido mi código" o "Escribo el código para ayunar" o "Escribo mal uno de los caracteres" etc. Además del papel en que se escribe la contraseña si no la recuerda ..
me llaman Steve

17
La universidad en la que estoy inscrito tiene reglas de contraseña increíblemente estúpidas: solo 8 caracteres, al menos 1 número, pero no al principio o al final de la contraseña, necesita caracteres de más de las 2 filas superiores del teclado, etc. Al final hacen que la fuerza bruta sea más fácil al tener estas reglas -.-. Me doy cuenta de que no eres tan estúpido, ¡pero no hagas reglas tontas como esa! (Solo tenía que sacarlo de mi sistema :))
cwap

17
@call bien si se impone una longitud máxima por eso por lo que recibirá "Olvidé mi contraseña" llamadas de , porque mis contraseñas de sitios-especiales forman de largo, y me limitar a 12 caracteres es una manera segura de garantizar que lo haré No lo recuerdo.
Roman Starkov

Respuestas:


193

Las contraseñas se reducen a 32, 40, 128, independientemente de la longitud. La única razón para una longitud mínima es evitar contraseñas fáciles de adivinar. No hay propósito para una longitud máxima.

El XKCD obligatorio que explica por qué está perjudicando a su usuario si impone una longitud máxima:

El obligatorio XKCD


66
Quizás un banco podría elegir limitar la contraseña porque en los cajeros automáticos no puede ingresar más de, digamos, 8 caracteres.
André Chalella

11
bueno, al menos en los cajeros automáticos, si intentas un ataque de fuerza bruta, se comerá tu tarjeta. Sin embargo, a lo que me refiero es a la contraseña para iniciar sesión en línea.
nickf

39
Lamentablemente, eso supone que las contraseñas siempre están cifradas. Las contraseñas de longitud máxima son un síntoma de las contraseñas almacenadas en texto sin formato.
jevon

14
Suspiro, incluso en PayPal, la "grapa correcta de la batería del caballo" está 8 caracteres por encima de su longitud máxima <censurada> ... escritorio
Roman Starkov

3
@kleinfreund porque si fuera hash, la longitud de la contraseña no les importaría (las funciones hash convierten una cadena de cualquier longitud a una longitud fija).
Vicky Chijwani

75

La longitud máxima especificada en un campo de contraseña debe leerse como ADVERTENCIA DE SEGURIDAD . Cualquier usuario sensible y consciente de la seguridad debe asumir lo peor y esperar que este sitio esté almacenando su contraseña literalmente (es decir, no hash, como lo explica epochwolf).

En ese ese es el caso:

  1. Evite usar este sitio como la peste si es posible. Obviamente no saben nada de seguridad.
  2. Si realmente debe usar el sitio, asegúrese de que su contraseña sea única, a diferencia de cualquier contraseña que use en otro lugar.

Si está desarrollando un sitio que acepta contraseñas, no establezca un límite de contraseña tonto, a menos que quiera que lo asalten con el mismo pincel.

[Internamente, por supuesto, su código puede tratar solo los primeros 256/1024 / 2k / 4k / (lo que sea) bytes como "significativos", para evitar el crujido de contraseñas gigantescas.]


17
También le envío un correo electrónico estándar a dichos sitios web, mencionando que me obligaron a usar una contraseña más corta y menos segura, que también reutilizo en cada sitio web que impone límites tan tontos. Esto les permite saber que se trata de un problema y también podría darle a un Joe Coder algo de influencia para mostrar a los superiores: evidencia de que los usuarios realmente piensan mal del sitio web como resultado de esto.
Roman Starkov

3
No estoy seguro de que deba suponer que una contraseña máxima significa que están almacenando contraseñas de texto sin formato. A veces, truncan la entrada y simplemente pasan los primeros caracteres x al hashing (). (La forma de verificar es establecer una contraseña más allá del límite, luego intente iniciar sesión con una variación de los caracteres de la contraseña más allá de la longitud máxima).
benc

55
@benc seguro, eso es posible, pero el punto es que, como usuario, no tienes forma de saber si esto es lo que están haciendo. Una longitud máxima (especialmente una corta) es una señal de advertencia y creo que es mejor asumir lo peor (o ponerse en contacto con el proveedor para que lo confirme).
tardate

1
Por favor elabora. Esta respuesta es una mera afirmación.
kleinfreund

1
Una contraseña máxima no significa necesariamente que se esté almacenando como texto sin formato; puede ser por razones técnicas, por ejemplo, bcrypt solo permite contraseñas de hasta 72 caracteres.
emorris el

58

Permitir una longitud de contraseña completamente ilimitada tiene un inconveniente importante si acepta la contraseña de fuentes no confiables.

El remitente podría intentar darle una contraseña tan larga que resulte en una denegación de servicio para otras personas. Por ejemplo, si la contraseña tiene 1 GB de datos y pasa todo el tiempo, acéptela hasta que se quede sin memoria. Ahora suponga que esta persona le envía esta contraseña tantas veces como usted esté dispuesto a aceptar. Si no tiene cuidado con los otros parámetros involucrados, esto podría conducir a un ataque DoS.

Establecer el límite superior en algo así como 256 caracteres parece demasiado generoso para los estándares actuales.


35
Todavía puede enviar 1 gb de datos con un límite máximo. El software que hace la limitación casi siempre está detrás del servidor web.
epochwolf

66
Sin embargo, todavía puede soltar todos menos los primeros 256 caracteres antes de hacer algo computacionalmente intensivo. Ejecutar un hash sha en 1 gb de datos llevará mucho más tiempo que el mismo hash en 256 caracteres.
rcreswick

2
@Eyal: todo lo que sucede en el lado del cliente de una aplicación web es inherentemente no confiable; por lo tanto, el hash se convierte en una contraseña equivalente, lo que lo convierte en un ejercicio inútil. (un navegador web probablemente no acepte una entrada de texto de 1 GB, y un cliente personalizado podría enviar una cadena de 1 GB en el campo de formulario "thisisthehashedpassword")
Piskvor abandonó el edificio el

44
@Piskvor: Pero no hay forma de evitar la cadena de 1 GB de todos modos. Un usuario siempre puede solicitar example.com/?password=abcabcabcabc ... y hacer su solicitud tan grande como quiera. DoS estándar.
Eyal

44
@Piskvor y Eyal, afortunadamente, Apache e IIS (y presumiblemente otros servidores maduros) limitan la longitud de los campos pasados ​​a través de URL: boutell.com/newfaq/misc/urllength.html
sampablokuper

21

Primero, no asuma que los bancos tienen buenos profesionales de seguridad de TI trabajando para ellos. Muchos no lo hacen .

Dicho esto, la longitud máxima de la contraseña no tiene valor. A menudo requiere que los usuarios creen una nueva contraseña (argumentos sobre el valor de usar diferentes contraseñas en cada sitio aparte por el momento), lo que aumenta la probabilidad de que simplemente las escriban. También aumenta enormemente la susceptibilidad al ataque, por cualquier vector, desde la fuerza bruta hasta la ingeniería social.


¡Convenido! Miren que la cadena de fallas de seguridad de acceso en línea de los bancos del Reino Unido de los últimos años ...
Stu Thompson

66
Ya uso una contraseña diferente en cada sitio web a través de un esquema que me permite recordarlos a todos, pero todos son bastante largos. Los únicos websies cuyas contraseñas escribo en notas adhesivas son los que imponen las limitaciones de longitud máx idiotas y por lo tanto me obligan lejos de mi contraseña sin embargo único preferente ...
Romano Starkov

@romkyns Supongo que su esquema no utiliza símbolos? Una vez tuve un esquema de este tipo que produjo contraseñas cortas de fuerza bruta, pero tuve que abandonarlo cuando el 10-20% de los sitios que utilicé prohíben caracteres especiales comunes.
Sparr

sin caracteres especiales, no, pero siempre agrega números y caracteres en mayúscula, porque sabía que algunos sitios lo exigen. Ojalá hubiera sabido sobre los límites de longitud máxima cuando se me ocurrió ... ¡Pero los esquemas (más simples) que inventé para parientes cercanos han funcionado perfectamente hasta ahora!
Roman Starkov

1
@romkyns otros problemas con tales esquemas: sitios que comparten contraseñas. Si su esquema es algo así como nameofwebsitefO0 (googlefO0 yahoofO0, etc.), ¿cómo recuerda que se supone que debe usar "yahoofO0" en flickr.com o stackoverflowfO0 en askubuntu.com? sitios que caducan contraseñas. entonces necesita extender el esquema para incluir una parte que pueda cambiar. pero eso falla si la regla de vencimiento verifica las subcadenas.
Sparr

13

OWASP Authentication Cheat Sheet desaconseja establecer una longitud máxima de contraseña de menos de 128 caracteres.

https://www.owasp.org/index.php/Authentication_Cheat_Sheet

Citando todo el párrafo:

Las contraseñas más largas proporcionan una mayor combinación de caracteres y, en consecuencia, dificultan que un atacante adivine.

La aplicación debe exigir la longitud mínima de las contraseñas. Las contraseñas de menos de 10 caracteres se consideran débiles ([1]). Si bien la aplicación de longitud mínima puede causar problemas al memorizar contraseñas entre algunos usuarios, las aplicaciones deberían alentarlos a establecer frases de contraseña (oraciones o combinaciones de palabras) que pueden ser mucho más largas que las contraseñas típicas y aún más fáciles de recordar.

La longitud máxima de la contraseña no debe establecerse demasiado baja, ya que evitará que los usuarios creen frases de contraseña. La longitud máxima típica es de 128 caracteres. Las frases de contraseña de menos de 20 caracteres generalmente se consideran débiles si solo consisten en caracteres latinos en minúsculas. ¡Cada personaje cuenta!

Asegúrese de que cada carácter que escriba el usuario esté realmente incluido en la contraseña. Hemos visto sistemas que truncan la contraseña a una longitud menor que la que proporcionó el usuario (por ejemplo, truncada a 15 caracteres cuando ingresaron 20). Esto generalmente se maneja configurando la longitud de TODOS los campos de entrada de contraseña para que sea exactamente la misma longitud que la contraseña de longitud máxima. Esto es particularmente importante si la longitud máxima de su contraseña es corta, como 20-30 caracteres.


11
Esta fuente no desalienta los límites máximos de longitud de contraseña, desalienta los límites bajos (menos de 128 caracteres) de longitud máxima de contraseña.
Mateo

9

Una razón que puedo imaginar para imponer una longitud máxima de contraseña es si la interfaz de usuario debe interactuar con muchos backends del sistema heredados, uno de los cuales impone una longitud máxima de contraseña.

Otro proceso de pensamiento podría ser que si un usuario se ve obligado a usar una contraseña corta, es más probable que invente galimatías aleatorias que una frase o apodo fácil de adivinar (por sus amigos / familiares). Por supuesto, este enfoque solo es efectivo si el frontend impone mezclar números / letras y rechaza las contraseñas que tienen palabras de diccionario, incluidas las palabras escritas en l33t-speak.


1
Si bien es comprensible, los sistemas heredados a veces tienen que dictar el diseño. Siempre que sea posible, NO deberían influir en ello. Lo último que desea en un nuevo sistema es uno con una política de seguridad diseñada antes de que los ataques de seguridad modernos fueran incluso comunes. O peor, un software más nuevo pero diseñado incorrectamente en primer lugar. Un sistema corporativo existente puede usar HTTP, pero eso no es justificación para no usar SSL en un nuevo sistema o extensión. Del mismo modo, las políticas de contraseñas no deberían seguir siendo vulnerables solo porque los ÚLTIMOS chicos lo hicieron mal. Y si se mantienen, será mejor que se haga un ENORME estudio de costo / beneficio.
Katastic Voyage

6

Una razón potencialmente válida para imponer una longitud máxima de contraseña es que el proceso de hash (debido al uso de una función de hash lenta como bcrypt) lleva demasiado tiempo; algo que podría ser abusado para ejecutar un ataque de DOS contra el servidor.

Por otra parte, los servidores deben configurarse para descartar automáticamente los controladores de solicitudes que tardan demasiado. Así que dudo que esto sea un gran problema.


4

Creo que tienes mucha razón en ambos puntos. Si están almacenando el hash de las contraseñas, como deberían, entonces la longitud de la contraseña no afecta su esquema de base de datos en absoluto. Tener una longitud de contraseña abierta arroja una variable más que un atacante de fuerza bruta tiene que tener en cuenta.

Es difícil ver alguna excusa para limitar la longitud de la contraseña, además del mal diseño.


3

El único beneficio que puedo ver para una longitud máxima de contraseña sería eliminar el riesgo de un ataque de desbordamiento de búfer causado por una contraseña demasiado larga, pero hay formas mucho mejores de manejar esa situación.


1
Debería haber una longitud máxima de entrada, sí, pero definitivamente no debería ser <64. Una longitud máxima de 8 o 12 es simplemente ridícula.
Dan Bechard

2

Ignora a las personas que dicen que no validen contraseñas largas. Owasp dice literalmente que 128 caracteres deberían ser suficientes. Solo para dar suficiente espacio para respirar, puede dar un poco más de 300, 250, 500, si lo desea.

https://www.owasp.org/index.php/Authentication_Cheat_Sheet#Password_Length

Longitud de la contraseña Las contraseñas más largas proporcionan una mayor combinación de caracteres y, en consecuencia, dificultan que un atacante adivine.

...

La longitud máxima de la contraseña no debe establecerse demasiado baja, ya que evitará que los usuarios creen frases de contraseña. La longitud máxima típica es de 128 caracteres . Las frases de contraseña de menos de 20 caracteres generalmente se consideran débiles si solo consisten en caracteres latinos en minúsculas.


No es relevante para la discusión. La pregunta es si hay algún beneficio en limitar la longitud, no si 128 es suficiente.
vikki

1

El almacenamiento es barato, ¿por qué limitar la longitud de la contraseña? Incluso si está encriptando la contraseña en lugar de simplemente cifrarla, una cadena de 64 caracteres no tomará mucho más que una cadena de 6 caracteres para encriptar.

Lo más probable es que el sistema bancario esté superponiendo un sistema anterior, por lo que solo pudieron permitir una cierta cantidad de espacio para la contraseña.


9
A menos que exista una razón muy válida, las contraseñas deben tener hash. Los hashes resultan en cadenas de longitud fija. No hay argumentos de espacio para hacer, a menos que el sistema esté almacenando la contraseña real, lo que podría decirse que es una idea terrible.
Stu Thompson

8
Cifrar contraseñas es una idea terrible. Un empleado inescrupuloso es todo lo que necesita para filtrar miles de millones de contraseñas. Ahorre el problema al nunca almacenarlos en primer lugar.
Roman Starkov

1

Mi banco también hace esto. Solía ​​permitir cualquier contraseña, y tenía una de 20 caracteres. Un día lo cambié, y he aquí que me dio un máximo de 8 y eliminó los caracteres no alfanuméricos que estaban en mi contraseña anterior. No tenía ningún sentido para mí.

Todos los sistemas de back-end del banco funcionaban antes cuando estaba usando mi contraseña de 20 caracteres con números no alfanuméricos, por lo que el soporte heredado no puede haber sido la razón. E incluso si lo fuera, deberían permitirle tener contraseñas arbitrarias y luego crear un hash que se ajuste a los requisitos de los sistemas heredados. Mejor aún, deberían arreglar los sistemas heredados.

Una solución de tarjeta inteligente no me iría bien. Ya tengo demasiadas cartas como están ... No necesito otro truco.


Cortan un espacio de teclas importante que se alarga hasta el momento de los ataques de fuerza bruta cuando (y quiero decir CUANDO) su base de datos de hashes es robada (suponiendo que incluso sal / hash / estiramiento, lo que estoy seguro de que no). Hora de cambiar de banco.
Chris Gomez

1

Si acepta una contraseña de tamaño arbitrario, se supone que se está truncando a una longitud de cortina por razones de rendimiento antes de que se divida. El problema con el truncamiento es que a medida que el rendimiento de su servidor aumenta con el tiempo, no puede aumentar fácilmente la longitud antes del truncamiento, ya que su hash sería claramente diferente. Por supuesto, podría tener un período de transición en el que ambas longitudes se calculan y comprueban, pero esto utiliza más recursos.


1

Trate de no imponer ninguna limitación a menos que sea necesario. Tenga cuidado: puede y será necesario en muchos casos diferentes. Tratar con sistemas heredados es una de estas razones. Asegúrese de probar bien el caso de contraseñas muy largas (¿puede su sistema manejar contraseñas largas de 10 MB?). Puede encontrarse con problemas de denegación de servicio (DoS) porque las funciones clave de defivación (KDF) que usará (generalmente PBKDF2, bcrypt, scrypt) tomarán mucho tiempo y recursos. Ejemplo de la vida real: http://arstechnica.com/security/2013/09/long-passwords-are-good-but-too-much-length-can-be-bad-for-security/


0

¿Debería haber una longitud máxima? Este es un tema curioso en TI, ya que las contraseñas más largas suelen ser más difíciles de recordar y, por lo tanto, es más probable que se escriban (un GRAN no-no por razones obvias). Las contraseñas más largas también tienden a olvidarse más, lo que, aunque no es necesariamente un riesgo para la seguridad, puede generar problemas administrativos, pérdida de productividad, etc. Es probable que los administradores que creen que estos problemas son apremiantes impongan longitudes máximas a las contraseñas.

Personalmente, creo en este tema específico, para cada usuario lo suyo. Si crees que puedes recordar una contraseña de 40 caracteres, ¡más poder para ti!

Dicho esto, sin embargo, las contraseñas se están convirtiendo rápidamente en un modo de seguridad desactualizado, las tarjetas inteligentes y la autenticación de certificados resultan muy difíciles de imposibles, ya que usted declaró que es un problema, y ​​solo una clave pública debe almacenarse en el servidor clave en su tarjeta / computadora en todo momento.


La gente puede recordar fácilmente una letra de una canción favorita, un verso de la biblia u otro dicho. Esos son muy largos en comparación con una contraseña típica. ¡Acabo de probar uno y llegué con 79 caracteres! (De acuerdo, la posibilidad de un error aumenta cuanto más larga sea una frase de contraseña. Incluso peor cuando un sitio web ESTUPIDO no le muestra el último carácter que ingresó en el cuadro de contraseña.)
Katastic Voyage

0

Las contraseñas más largas, o frases de contraseña, son más difíciles de descifrar simplemente en función de la longitud y más fáciles de recordar que requerir una contraseña compleja.

Probablemente sea mejor ir por una longitud mínima bastante larga (10+), restringiendo la longitud inútil.


0

Los sistemas heredados (ya mencionados) o la interfaz de los sistemas de proveedores externos pueden necesitar un límite de 8 caracteres. También podría ser un intento equivocado de salvar a los usuarios de sí mismos. Limitarlo de esa manera dará como resultado demasiadas contraseñas pssw0rd1, pssw0rd2, etc. en el sistema.


0

Una de las razones por las que las contraseñas pueden no estar cifradas es el algoritmo de autenticación utilizado. Por ejemplo, algunos algoritmos de resumen requieren una versión de texto sin formato de la contraseña en el servidor, ya que el mecanismo de autenticación implica que tanto el cliente como el servidor realicen los mismos cálculos matemáticos en la contraseña ingresada (que generalmente no producirá el mismo resultado cada vez que la contraseña se combina con un 'nonce' generado aleatoriamente, que se comparte entre las dos máquinas).

A menudo esto se puede fortalecer ya que el resumen se puede calcular en parte en algunos casos, pero no siempre. Una mejor ruta es que la contraseña se almacene con cifrado reversible; esto significa que las fuentes de la aplicación deben protegerse ya que contendrán la clave de cifrado.

Digst auth está ahí para permitir la autenticación en canales que de otra manera no estarían encriptados. Si usa SSL o alguna otra encriptación de canal completo, entonces no hay necesidad de usar mecanismos de autenticación de resumen, lo que significa que las contraseñas se pueden almacenar en hash (ya que las contraseñas se pueden enviar en texto sin formato a través del cable de forma segura (para un valor dado de seguridad).


-4

Solo 8 contraseñas largas de char suenan simplemente mal. Si debería haber un límite, al menos 20 caracteres es una mejor idea.


3
Pero esa es la cuestión: no debería haber un límite en absoluto.
Luke Stevenson

-4

Creo que el único límite que debería aplicarse es como un límite de 2000 letras, o algo más increíblemente alto, pero solo para limitar el tamaño de la base de datos si eso es un problema


9
Las contraseñas deben estar en hash ... Y el tamaño de la base de datos no sería un problema si la contraseña está en hash.
epochwolf

44
@epochwolf: puedo pensar en una razón por la cual las contraseñas no siempre deben estar cifradas (porque lo descubrí yo mismo hoy): una contraseña que debe enviarse a un tercero en nombre del usuario no puede almacenarse como un hash valor. [Por ejemplo, una aplicación que necesita almacenar credenciales para enviar correos electrónicos a través de un dominio externo.]
Kenny Evitt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.