Crear múltiples contraseñas seguras y fáciles de recordar

6

Recientemente he desarrollado una nueva aplicación web en la que nuestros clientes inician sesión con un nombre de usuario y contraseña. Cuando estemos implementando este sistema, estableceremos los nombres de usuario y las contraseñas nosotros mismos, el cliente no podrá decidir cuál será su contraseña inicial.

Por lo tanto, debo asignar una contraseña a cada uno de nuestros clientes.

El problema es que mi jefe quiere que sea fácil de recordar. Sugirió usar 'apple', 'orange', 'banana', etc. Esto nos dejaría en un gran riesgo de ataque de diccionario y, dado que la aplicación puede mostrar información confidencial, esto sería una preocupación.

En un mundo perfecto, las contraseñas deben tener entre 6 y 8 caracteres de longitud, fáciles de recordar y no deben incluir espacios ni caracteres especiales. Pero también necesitan estar seguros.

¿Cuál es la mejor manera de hacer esto? He visto el x kcd comic con respecto a las palabras aleatorias para contraseñas seguras, pero si acorto la idea de cuatro a solo dos cortas, aleatoria palabras, esto sería seguro? ¿Qué tan segura sería una contraseña generada desde este sitio ?

Mi solución elegida: según la respuesta de Terry, permitiré a los usuarios cambiar su contraseña ellos mismos, ya que creo que este es el mejor curso para nosotros.

    
pregunta bobble14988 18.09.2012 - 12:26
fuente

6 respuestas

14

¿Cuál es exactamente el problema con una contraseña completamente aleatoria?

Los clientes deben cambiar las contraseñas generadas automáticamente al iniciar sesión por primera vez, para que no haya problemas de usabilidad. No es una buena práctica que sus clientes conserven la contraseña inicial, ya que tendría que enviarse a ellos en un formato de texto simple. Para ese propósito, los tokens de inicio de sesión de una sola vez serían mucho más seguros.

Una contraseña que contiene dos palabras del diccionario NO ES segura. Un simple ataque de diccionario probando varias combinaciones de palabras podría descifrar fácilmente tu contraseña.

    
respondido por el Ayrx 18.09.2012 - 12:38
fuente
4

En realidad, es una buena idea usar varias palabras en lugar de una sola contraseña, pero solo porque hay muchas palabras posibles disponibles. Puedes calcular las combinaciones posibles tú mismo:

Random characters:
26 characters in alphabet ^ 8 places = 2.0E11 combinations
52 case sensitive characters ^ 8 places = 5.3E13 combinations

Sentence with words:
135'000 words in dictionary ^ 4 places = 3.3E20 combinations

Esto se debe a los siguientes puntos importantes:

  1. Necesitas un diccionario que sea lo suficientemente grande ("manzana", "naranja" y "plátano" es una broma, por supuesto)
  2. Use suficientes palabras, 4 me parece necesario, especialmente si su oración debe ser legible (grupos más pequeños con sustantivos / verbos).

Si crea oraciones legibles, pueden durar un poco más sin perder la ventaja de recordarlas fácilmente. "El perro salta sobre la cerca azul" no es más difícil de recordar que "perro cerca sobre azul" .

    
respondido por el martinstoeckli 18.09.2012 - 13:32
fuente
3

Aquí hay un tipo de contraseña que es "razonablemente" robusta y sin embargo "razonablemente" fácil de recordar y escribir:

  

Seleccione dos letras minúsculas aleatorias, luego dos dígitos aleatorios, luego dos letras mayúsculas aleatorias, luego dos dígitos aleatorios.

La combinación de mayúsculas y minúsculas y los dígitos permiten que tales contraseñas sean aceptadas por la mayoría de las "reglas de contraseñas". La entropía de tales contraseñas es de aproximadamente 32 bits (porque 26 2 * 10 2 * 26 2 * 10 2 = 4569760000, que está ligeramente por encima de 2 32 ). Eso no es mucho, pero es suficiente para frustrar ataques de diccionario en línea (cuando los atacantes intentan iniciar sesión en su servidor "adivinando" la contraseña, posiblemente con un script). Ofrecen una resistencia no despreciable a los ataques de diccionario fuera de línea (por ejemplo, para un archivo cifrado con contraseña o el almacenamiento de contraseña con hash en una base de datos) SI (y solo si) se emplean con técnicas adecuadas de fortalecimiento de contraseña, es decir, sales y hash lento ( bcrypt ).

Resulta que encuentro tales contraseñas fáciles de recordar. Hay indicios indirectos relativamente convincentes de que soy un ser humano y que mi cerebro funciona, al menos cualitativamente, en la misma línea que cualquier otro ser humano, incluidos los "gerentes". Por lo tanto, es plausible que su administrador también encuentre esas contraseñas fáciles de recordar.

Importante: cuando digo aleatorio , lo digo en serio. La aleatoriedad apropiada no se puede lograr en la privacidad de un cerebro humano. Usted deberá:

  1. use una computadora para generar dígitos y letras al azar;
  2. dentro de esa computadora, confíe en un PRNG criptográficamente seguro (por ejemplo, /dev/urandom en Linux / FreeBSD / MacOS X o CryptGenRandom() en Windows);
  3. acepta la contraseña. No genere cien contraseñas hasta que llegue a una que le guste, porque esto reduce su entropía. Genere una contraseña y aprendala.

Idealmente, no permitiríamos que los usuarios elijan sus propias contraseñas; Proporcionaríamos una herramienta que les genere contraseñas. Dependiendo de la situación, de forma segura transmitir la contraseña generada por computadora al usuario humano podría ser un desafío, por lo que no siempre estamos en el caso ideal.

Parece demasiado optimista esperar que los usuarios promedio usen y recuerden las contraseñas con una entropía de más de 32 bits.

Si su gerente no es cooperativo, hay un plan alternativo: dígale que escriba su contraseña en un papel y que la guarde en su billetera. Una billetera es relativamente segura: al menos, él la cuida a diario. Esto se encarga de la parte "fácil de recordar", al menos durante los primeros días. Además, eso es lo que el presidente de los Estados Unidos hace por algunos de sus códigos de lanzamiento nuclear (asegúrese de informarle a su gerente también).

No no aplique una regla para cambiar la contraseña cada mes: tales reglas son molestas y convierten a usuarios en enemigos (es decir, más o menos cómplices voluntarios para el atacante).

Asegúrese de que los usuarios sepan que deben informar la pérdida de contraseñas con prontitud y que no serán culpados . De manera realista, una vez que tenga más de una docena de usuarios, se producirá una pérdida de contraseña (independientemente de si la contraseña está almacenada en una billetera o en un cerebro). Lo único peor que una contraseña filtrada es que un usuario oculte la filtración por temor a una sanción.

    
respondido por el Thomas Pornin 18.09.2012 - 14:40
fuente
3
  

El problema es que mi jefe quiere que sea fácil de recordar

Luego pregúntele cómo cuantifica eso y qué tan fácil debería ser ingresar al sistema.

La respuesta ahora ha sido aceptada, sin embargo, hay problemas importantes que nadie está abordando. Sí, las contraseñas deben tener una entropía adecuada para evitar que sean forzadas a la fuerza bruta, sin embargo, como desarrollador de aplicaciones no es su única forma de proteger el sistema. Debe agregar controles adicionales para limitar la frecuencia con la que una cuenta en particular intenta iniciar sesión y, probablemente, limitar el número de inicios de sesión fallidos para una cuenta y desde una dirección remota específica, lo que también implica un mecanismo de informe y un medio de desbloqueo.

Según la respuesta aceptada, NO debe elegir contraseñas para los usuarios. De todos modos, genere una contraseña inicial, pero su aplicación debe obligar al usuario a cambiarla al inicio de sesión para que cumpla con sus requisitos de complejidad, pero que el usuario pueda recordar. Si este es un servicio público, es mejor utilizar openid.

    
respondido por el symcbean 18.09.2012 - 22:28
fuente
2

Si dices 6-8 caracteres, elegiría 8.

La máxima seguridad para una contraseña con solo letras y números en minúscula pero aún así fácil de recordar sería esta:
Use la modificación de vocales y consonantes, por lo que la contraseña siempre es pronunciable .

En PHP esta sería la función:

function generate_pass(){
    $b="euioayj"; // counts as vowel
    $v="qwrtzpsdfghklxcvbnm1234567890qwrtzpsdfghjklxcvbnm"; // count as consonants
    $blen=strlen($b)-1;
    $vlen=strlen($v)-1;

    do{
        $pass=$b[rand(1,$blen)].$v[rand(1,$vlen)]. 
        $b[rand(1,$blen)]. $v[rand(1,$vlen)]. 
        $b[rand(1,$blen)]. $v[rand(1,$vlen)]. 
        $b[rand(1,$blen)]. $v[rand(1,$vlen)];
    } while (!preg_match('/\d/',$pass));
    return $pass;
}
    
respondido por el rubo77 18.09.2012 - 21:00
fuente
-1

Crea una palabra / contraseña universal. Por ejemplo: 12howareyou

Luego, añádale el nombre que primero le llega acerca de dónde necesita la contraseña. Por ejemplo: stackexchange12howareyou o 12howareyoustackexchange. Para este último ejemplo, si conoce la contraseña universal de memoria, podrá escribirla muy rápidamente. Mirando el título del sitio web, la url, o algo más, sabrá el resto de la contraseña, solo necesita agregarla.

12howareyoureddit

12howareyougmail

12howareyoumicrosoft

12como se trata de una palabra importante en la que se encuentra el sitio donde no está publicado

De esta manera, siempre sabrá la contraseña (una parte de ella ya la conoce, la otra parte lo puede saber fácilmente), y nadie puede encontrarla porque no conoce la palabra / contraseña universal ni dónde está ( después, antes del nombre del sitio web),

    
respondido por el Alguem Meugla 06.08.2017 - 01:55
fuente

Lea otras preguntas en las etiquetas