¿Por qué verificar si otro usuario ya usa una contraseña?

17

Esto proviene de una broma originalmente en francés :

  

Ingresa tu contraseña.

     

carrot

     

Lo sentimos, tu contraseña debe tener más de 8 caracteres.

     

carottegéante
  ( zanahoria gigante )

     

Lo sentimos, tu contraseña debe contener un número

     

1carottegéante
  ( 1 zanahoria gigante )

     

Lo sentimos, su contraseña no debe contener caracteres acentuados

     

50putaindecarottesgeantes
  ( 50 malditas zanahorias gigantes )

     

Lo sentimos, su contraseña debe contener al menos una letra mayúscula

     

50PUTAINdecarottesgeantes
  ( 50 zanahorias gigantes DAMN )

     

Lo sentimos, su contraseña no debe contener dos letras mayúsculas consecutivas

     

5OPutainDeCarottesGeantesQueJeVaisTeMettreAuCulSiTuNeMedonnesPasImmediatementUnAcces!
  ( 50 malditas zanahorias gigantes que pondré en tu culo si no me das acceso de inmediato »)

     

Lo sentimos, su contraseña no debe contener caracteres de puntuación

     

AttentionMaintenantJeVaisAllerTeTrouverEtTeMettreVraimentLes50CarottesGeantesSiTuContinues   ( Precaución, iré a buscarte y realmente pondré 50 zanahorias gigantes si esto continúa )

     

Lo sentimos, esta contraseña ya está en uso.

Pero hablando con un amigo:

  • dije:

      

    Esto es solo una broma construida: hay un error tipográfico en la tercera respuesta: ne s oit pas .. y, en absoluto, no conozco ninguna creación de usuario motor que comprueba las contraseñas ya usadas .

  • Mi amigo responde:

      

    Tienes razón, es una broma, pero puedes configurar PAM para hacer tal comprobación:
    password required pam_pwcheck.so nullok remember=N

¡Bien, no entiendo!

Cualquier persona no autorizada podría verificar si se usa una contraseña simplemente creando una nueva cuenta (falsa)

¿Cuál podría ser el objetivo de este tipo de verificación?

    
pregunta F. Hauri 19.01.2014 - 14:06
fuente

3 respuestas

26

No entiendes qué hace remember para pam_pwcheck ; consulte la página de manual :

  

remember=XX

     

Recuerde las últimas contraseñas XX y no permita que el usuario reutilice ninguna de estas para los próximos cambios de contraseña XX. XX es un número entre 1 y 400.

Con esta opción, pam_pwcheck rechazará los intentos de reutilizar una contraseña que fue utilizada previamente por el mismo usuario . No hace nada usuarios cruzados; no le advertirá si su contraseña de elección es utilizada por otra persona o no.

De hecho, tal verificación sería costosa si se implementara el hashing de contraseña adecuado (con las sales y muchas iteraciones de lentitud, tomaría varios minutos "probar" la contraseña putativa para miles de otros usuarios). Como usted dice, advertir a los usuarios sobre cómo una contraseña potencial ya está siendo utilizada por otro usuario sería, por sí solo, un grave problema de seguridad; pero también significaría que las contraseñas no se almacenan correctamente, y eso es otro problema de seguridad grave.

    
respondido por el Thomas Pornin 19.01.2014 - 14:59
fuente
5

pam_pwcheck solo recuerda las contraseñas de un usuario determinado, como dice la otra respuesta.

La otra parte de la pregunta es: "¿Cuál podría ser el objetivo de este tipo de verificación?"

De hecho, hay sistemas que verifican todas las contraseñas existentes. Por lo general, dichos sistemas almacenan contraseñas en texto simple o un hash sin sal que no depende del nombre de usuario o cualquier otra cosa que impida que se encuentre una coincidencia rápidamente. Me he encontrado con esto como usuario, como una solicitud de funcionalidad (que he rechazado como imposible de hacer con cualquier medio razonable de almacenamiento de la contraseña, además de ser inherentemente defectuosa) o como una objeción para corregir el uso de almacenamiento de texto plano.

Y el objetivo es doble:

  1. Dado que las contraseñas deberían ser difíciles de adivinar, lo ideal sería que fuesen casi aleatorias en términos de imprevisibilidad (el problema de recordar la contraseña es otro asunto *, y a menudo se olvida cuando las personas desarrollan un nuevo entusiasmo para la seguridad de la contraseña). Como intuitivamente, aleatorio significa que hay poco en el modo de repetición (algo que alguien aquí probablemente sabrá es una falacia pero ciertamente una falacia que se sostiene), entonces la repetición es, por lo tanto, una mala señal.

  2. Más razonablemente, si alguien más está usando la contraseña, es probable que sea una contraseña débil que no pudimos detectar (p. ej., usar los detalles de una oficina de la empresa como el número de teléfono para crear la contraseña de una manera que otra el empleado podría intentarlo pero, de lo contrario, pasa las pruebas de resistencia), eso podría ser adivinado, ya que esencialmente el usuario lo ha adivinado.

Las fallas con el primer pensamiento son la falla de no entender la repetición en la aleatoriedad, y al esperar una contraseña completamente aleatoria, a menos que esté respaldada por una política que permita recordar con seguridad la contraseña difícil de recordar.

Las fallas con el segundo pensamiento son:

  1. Necesitamos almacenar la contraseña de forma relativamente insegura para poder realizar la comprobación en primer lugar.
  2. Acabamos de filtrar una contraseña a alguien.
  3. Es probable que hayamos identificado una contraseña débil, pero no avisamos a la persona que realmente la usa.

Pero aún así, esas fallas no significan que no suceda. Después de todo, hay otra falla en el sistema en la broma; rechazando carottegéante por el diacrítico. Hay razones técnicas para rechazar los signos diacríticos en varios lugares (aunque, a menos que tenga que interactuar con el código de otras personas, esos motivos son absolutamente inexcusables en el código moderno), pero he visto de manera bastante extraña que los sistemas que aceptaban los signos diacríticos lo rechazaban. nombres de usuario! Igualmente muchos sistemas rechazan espacios en contraseñas, y así sucesivamente. En general, lo atribuyo a la programación de la carga de culto; alguien más lo hizo, así que lo copias. Hasta cierto punto, esto no es del todo irracional; Ciertamente copio lo que hacen aquellos que saben mejor que yo cuando se trata de seguridad, por lo que no culparía por completo a alguien por copiar ciegamente tales políticas. Aún así, solo se necesita una breve pausa para darse cuenta de que no hay forma de que aceptar "jdiwmfojkslofklo" pero no aceptar "ﬤסּוּ ﭞﻘﺪ ӐӓҾӌȕ" mejore nada, y de hecho reduce el rango de posibles contraseñas para atacar.

De todos modos, la regla que tienen algunos sistemas contra los espacios nos da un enfoque para traducir la broma al inglés; haz que la segunda contraseña intente "zanahorias gigantes" con un espacio.

* Para eso son las notas post-it, ¿no?

    
respondido por el Jon Hanna 19.01.2014 - 17:06
fuente
-2

Nunca debe almacenar las contraseñas de los usuarios en la puerta de enlace.

La forma más común es tomar un hash de la contraseña y almacenar solo este hash. En este ámbito, podría decir que hay colisión, pero no debería.

La mejor manera de saltear es concatinar username.password y tomar un hash de esta combinación:

  

username / md5sum (str (username) + str (contraseña))

Ver, md5sum no es un seguro .

Mejor toma un sha256:

  

username / sha256sum (str (username) + str (contraseña))

Es un esbozo de solución, es posible que encuentre uno más robusto e inteligente.

    
respondido por el Anomalous Awe 23.01.2014 - 03:51
fuente

Lea otras preguntas en las etiquetas