El mejor esquema de almacenamiento de contraseñas para alta entropía, contraseñas únicas que son resistentes a fallas [cerrado]

4

¿Cuál es la mejor, la forma más segura y fácil de:

  • almacene contraseñas seguras y únicas para cada servicio que requiera autenticación
  • haga que el sistema sea resistente (se evita la pérdida total de seguridad, se contienen las violaciones) a múltiples puntos potenciales de falla, incluyendo:
    1. pérdida de la lista de contraseñas
    2. pérdida de cualquier contraseña maestra que proteja la lista de contraseñas - pérdida de una contraseña
    3. pérdida de dos o más contraseñas que se pueden vincular a la misma persona
    4. keyloggers
pregunta 26.10.2011 - 13:44
fuente

3 respuestas

5
  

@bstpierre No me di cuenta de que la validez de un sistema de seguridad implica una explicación extensa. Esta es una propuesta para abordar un problema del mundo real de la manera más simple y sólida posible.

La extensión de la explicación para que un sistema sea implementado directamente por humanos es muy importante. La mayoría de las personas que conozco no están dispuestas a elegir una buena contraseña de soltero , sin importar la forma en que lo hace la propuesta.

Pero seamos generosos y supongamos que un usuario puede manejar la complejidad. El esquema todavía tiene varios problemas que evitan que sea utilizable.

Primero, genera contraseñas como -----A1A8+QdjkD(* . ¿Qué sucede cuando debe tener una cuenta en algún sitio web de braindead que requiera una contraseña alfanumérica de 6-8 caracteres? (Respuesta: necesitará un algoritmo de reconstrucción secundario o un tercero sal y un algoritmo de hashing alternativo que genere (posiblemente cortas) cadenas alfanuméricas. También necesitará algún mecanismo para marcar las contraseñas débiles.) Ya tiene que recordar 7 trozos de información para reconstruir la contraseña (sin contar el algoritmo, supongo que, por el bien de los argumentos, tiene este automatizado). Y se pone aún peor, porque después de resolver este problema, se encontrará con un servicio aún más inteligente que requiere un nuevo conjunto de recetas.

Otro problema es el paso de usar la primera mitad de la contraseña "de la siguiente línea". Si pierde la lista, puede reconstruir el par de "palabras" para cada sitio, pero no podrá reconstruir la contraseña correcta a menos que obtenga el orden correcto de los sitios. (OMI, este paso es una ofuscación innecesaria: si alguien tiene la lista y conoce el algoritmo, no hay ningún valor agregado para usted).

Y luego confías en el hash del "nombre de servicio". ¿Qué cadena específica estás usando para esto? El nombre del servidor? ¿Qué sucede cuando GigaBank adquiere MegaBank y sus cuentas pasan de wwws.mega.example.com a wws1.giga.example.com? Supongo que es bastante fácil simplemente cambiar sus contraseñas cuando cambia el nombre del servicio, pero es otra molestia.

¿Cómo maneja los cambios forzados de contraseña? Un sistema que conozco parece recordar sus dos últimas contraseñas, por lo que no puede volver a usarlas. Podría modificar su esquema para incluir una octava porción de información: un "número de secuencia"; esto se agregaría (o se agregaría o insertaría en alguna posición arbitraria, pero esta cantidad de variación equivale a recordar una novena parte de la información). Esto se convierte en una molestia en los sistemas que requieren que cambie su contraseña cada 60 o 90 días.

¿Cómo rastrea los nombres de usuario? ¿Los memorizas o están escritos?

¿Qué sucede si tiene varias cuentas con un solo servicio? Su algoritmo garantiza (por diseño) que un servicio dado genera exactamente una contraseña. Por ejemplo, quizás tenga que iniciar sesión en cuentas separadas en su banco o correduría.

¿Cómo está almacenando la "contraseña muy larga" utilizada para generar los hashes? Esto debe almacenarse en algún lugar, separado de la lista de contraseñas.

  

Si tiene una solución más elegante que cumpla con los criterios de diseño, ¡comparta! Me encantaría usarlo

No tengo otra solución que se ajuste a tus criterios.

En un momento utilicé un esquema de reconstrucción basado en el nombre del sitio web y un par de bits de información. Se derrumbó rápidamente debido a las razones descritas anteriormente y comencé a usar keepassx con una contraseña maestra fuerte. Ahora, en cada servicio utilizo una contraseña única de longitud máxima generada aleatoriamente con el conjunto máximo de caracteres permitido.

Su pregunta describe los riesgos asociados con este sistema.

Editar : un único punto de error que no vi en mi análisis inicial es su cuenta de correo electrónico. A menos que esté usando varias cuentas de correo electrónico independientes, con una cuenta separada para cada servicio, su correo electrónico es un punto único de falla para múltiples servicios debido a la forma en que funciona la mayoría de los sistemas de recuperación de contraseñas. Si la contraseña de su cuenta de correo está comprometida (ingeniería social, keylogger, etc.), muchos de sus servicios también estarán comprometidos.

    
respondido por el bstpierre 27.10.2011 - 03:36
fuente
7

Si bien esa técnica puede funcionar para usted y le dará una fuerza razonable (desde mi rápida revisión), el simple problema que tendría al menos el 95% del planeta es:

Es demasiado complicado

Los humanos (en general) simplemente no recordarán esas reglas, y perderán el pedazo de papel

Entonces, si bien una respuesta rápida a la pregunta específica puede ser "se ve bien", su aplicabilidad es mínima.

    
respondido por el Rory Alsop 26.10.2011 - 14:17
fuente
4

Como se señaló, esta técnica es demasiado complicada y requiere una gran cantidad de tiempo para ingresar la contraseña (debe recordar la sal, el relleno, el separador y, por lo tanto, aplicarlos al hash).

¿Por qué no usar frases de paso simples (por supuesto, diferentes para diferentes servicios) como sugiere xkcd (vea también esta pregunta )? Tienen una alta entropía, son fáciles de recordar y de escribir.

    
respondido por el random stranger 26.10.2011 - 17:44
fuente

Lea otras preguntas en las etiquetas