¿Hay alguna forma de hash de mi contraseña, si solo me piden que proporcione 5 de muchos caracteres? [duplicar]

68

Hay un sistema que, en un formulario de inicio de sesión, presenta aproximadamente 40 casillas para las letras de contraseña (para ocultar la longitud real de la contraseña), y solo las aleatorias (la misma cantidad cada vez) son editables. Explicación es - para protegerme de los keyloggers. Parece legítimo. ¿Pero significa que mi contraseña se mantiene en texto plano? ¿O hay algún algoritmo hash conocido que permita esto?

Nota: no pregunto si es una buena o mala práctica, pregunto sobre la posibilidad / viabilidad / método de hashing.

    
pregunta Mołot 23.09.2015 - 12:17
fuente

11 respuestas

61

No : en este caso, no hay una forma práctica de cifrar la contraseña.

Para que el sitio web funcione de esta manera, el hash debería permitirle verificar que un subconjunto de 5 caracteres de la contraseña coincida con un valor determinado. Eso significa que podrías forzar la fuerza bruta de esos 5 personajes por su cuenta, lo cual es muy práctico, y una vez que conoces a 5 personajes, es fácil forzar la fuerza bruta del resto. Esto es algo similar a la debilidad de las contraseñas de LANMAN.

Las contraseñas parciales tienen beneficios de seguridad, especialmente contra registradores clave. A veces, las aplicaciones bancarias tienen una contraseña normal que se oculta en el servidor y un código de autenticación adicional, que solo se ingresa parcialmente, y NO se anula en el servidor. Esto se considera completamente aceptable, pero cada vez es menos común ya que la autenticación multifactor es una mejor solución.

En este caso particular, no está claro que esto sea una mala idea. Debe sopesar el riesgo de compromiso del servidor con el riesgo de los registradores de claves del lado del cliente. De hecho, es el cliente el que se encuentra en mayor riesgo . Entonces, a pesar de ir en contra de las mejores prácticas, este sitio web no es tan tonto después de todo.

    
respondido por el paj28 23.09.2015 - 12:38
fuente
53

Como han dicho otros, cualquier intento de resolver este problema con algoritmos de hash está condenado al fracaso.

Sin embargo, creo que vale la pena hablar sobre cómo ING probablemente resuelva esto. (Descargo de responsabilidad: nunca he trabajado para ING, pero he trabajado para otros grandes bancos).

Es probable que ING almacene su contraseña en un Módulo de seguridad de hardware . Esta es una pieza de hardware resistente a la manipulación, que está diseñada para que ni el operador del sistema pueda extraer sus hashes de contraseña. Internamente, es probable que almacene su contraseña en texto sin formato (o algo cercano al texto en claro), pero solo se comunica con el mundo exterior a través de las operaciones "por favor ingrese los caracteres x, y, y", y limita el número de intentos permitidos.

En este escenario, la seguridad de su contraseña depende de que el HSM sea a prueba de manipulaciones. Se han publicado ataques en los HSM , pero la superficie de ataque se reduce en comparación con los hashes almacenados en un RDBMS.

    
respondido por el James_pic 24.09.2015 - 11:12
fuente
13

Una forma en que esto podría implementarse es almacenar aproximadamente un centenar de hashes de contraseñas parciales. Cada vez que el usuario inicie sesión con una contraseña parcial, se marcará como utilizada. La lista de hashes se puede regenerar cada vez que necesite ingresar una contraseña completa.

Este esquema debilita la seguridad contra la fuerza bruta o el análisis criptográfico, pero puede protegerlo del registrador de claves si a menudo tiene que iniciar sesión desde máquinas que no son de confianza.

He visto este esquema usado en una tarjeta de dinero de viaje, ya que los viajeros a menudo necesitan usar la cuenta desde computadoras públicas. Sin embargo, para la banca normal, creo que esto debilita la seguridad. Si su computadora personal normal está infectada con un registrador de claves, solo tomará unos inicios de sesión para recopilar la contraseña completa de las contraseñas parciales.

Para fortalecer este esquema desde el análisis de criptoanálisis y la fuerza bruta, las contraseñas parciales deberían almacenarse con un hash muy lento, como PBKDF2 con muchas rondas. Y para obstaculizar la capacidad del atacante de forzar bruscamente los hashes en paralelo de una sola vez, es necesario forzar la contraseña parcial para que se use en el orden específico en que se crearon. Por ejemplo, el uso de la contraseña número n para cifrar la lista de números y la sal para la contraseña parcial n + 1 'obligaría al atacante a resolver la contraseña n ° n antes de que puedan comenzar a trabajar en el n + 1' th.

    
respondido por el Lie Ryan 23.09.2015 - 16:14
fuente
8

Sí : es posible que simplemente tengan todas las combinaciones que van a mostrarte.

Aunque creo que no lo han implementado y están almacenando su contraseña, probablemente encriptada, pero sin hash.

Una mejor combinación de seguridad utilizando este método teniendo en cuenta el espacio de almacenamiento:

  1. Cifre la contraseña de texto sin formato y colóquela en una especie de almacenamiento en frío.
  2. Descifra periódicamente la contraseña para crear nuevos combos y hash estos.

De esta manera, el espacio de almacenamiento se mantiene razonable. Y su contraseña no debe estar en una capa más segura del sistema.

    
respondido por el BAR 24.09.2015 - 11:20
fuente
5

Puede que no esté hash pero puede estar almacenado encriptado. En teoría, podrían haber usado Esquema de umbral con caracteres ASCII permitidos como claves y luego verificar si el resultado se ajusta al resultado. De esta manera (teóricamente) no debería necesitar almacenar una contraseña, solo una solución.

PS. Por ejemplo, consulte enlace

    
respondido por el Marcin Raczkowski 27.09.2015 - 00:16
fuente
4

Supongamos que la contraseña podría tener una longitud de 40 caracteres. Supongamos que los caracteres se pueden interpretar como números c_1, c_2, ... c_40 de algún campo finito adecuado F ( Campo de Galois ) . Supongamos también que F tiene al menos 40 elementos.

Supongamos que calculamos el polinomio de interpolación p para 40 elementos predefinidos de cero de F, de manera que p (a_j) == c_j. Ahora almacenamos 35 coeficientes de este polinomio más un hash (salado) de los otros 5.

Cuando el usuario nos da 5 de los caracteres, podemos aprovechar los 35 coeficientes conocidos para recuperar los 5 coeficientes faltantes y luego calcular el hash. Si alguno de los 5 caracteres es incorrecto, terminaremos con un polinomio diferente y, por lo tanto, un hash diferente. Por lo tanto, es posible que desee almacenar el hash en algún módulo de seguridad de hardware dedicado como James_plc ya señaló.

Así que sí, esto es posible. Sin embargo, si su tienda segura se ve comprometida, es al menos tan fácil de descifrar como una fuerza bruta de 5 letras.

Para otros algoritmos en esta dirección, es posible que desee obtener más información sobre intercambio secreto.

    
respondido por el Udo Klein 27.09.2015 - 09:47
fuente
2
  

¿Significa que mi contraseña se mantiene en texto sin formato?

Es muy probable que esté en texto sin formato o cifrado, pero no es seguro.

Por ejemplo, cuando envía su contraseña por primera vez, podrían hacer un hash y guardar diferentes combinaciones de 5 caracteres de su contraseña y los índices de caracteres a los que se aplican.

Sin embargo, cualquier persona que obtenga acceso a esa información y al algoritmo de hash podría romper fácilmente los hashes de 5 caracteres y volver a ensamblarlos para obtener su contraseña original, por lo que incluso si está hash es un modelo débil.

    
respondido por el Briguy37 24.09.2015 - 17:49
fuente
2

Supongo que puedes almacenar una lista de hashes de todas las combinaciones de cualquier X caracteres, donde X es el número de caracteres que debes proporcionar.

Esto no sería un hash muy fuerte aunque si el resto del hash estuviera formado por caracteres conocidos. Sería posible derivar el resto de los caracteres no deseados de un usuario sal o derivados de alguna manera de los X caracteres proporcionados, pero ese no es el hash más fuerte.

    
respondido por el Ian Newson 24.09.2015 - 20:22
fuente
1

No puedo ver por qué el algoritmo de autenticación no pudo almacenar todas las combinaciones de subcadenas de su contraseña como hashes en la lista ordenada de las posiciones de caracteres, por lo que si su contraseña era:

contraseña

luego habría una tabla de (clave, hash) donde se encontraban las claves, por ejemplo,

'1' solo para la primera letra '1,2' solo para primera y segunda letra '4,5,6' solo para la cuarta, quinta y seis letras

y almacene en esas claves el hash de una cadena de las letras indicadas, por lo que contra

'4,5,6' sería el hash ('swo') de la contraseña de ejemplo.

El problema con esto, por supuesto, es que revertir los hashes sería simple a menos que estuvieran salados con una sal por usuario, e incluso entonces sería relativamente sencillo forzar bruscamente los hashes de secuencias cortas por razones obvias si la venta fuera comprometido (mantener la sal en secreto sería una solución para esto).

Aunque no estoy seguro de cómo lo harían ...

Pregunta interesante.

    
respondido por el David Scholefield 23.09.2015 - 12:30
fuente
1

La respuesta es que, desde el punto de vista de la seguridad, es una mala idea, pero que es técnicamente posible que esté bloqueada.

Si es un subconjunto aleatorio de su contraseña completa lo que ingresa (como primero, segundo, quinto, sexto y último carácter una vez, y una selección aleatoria diferente la próxima vez) puede lograr esto al (en el guardado inicial ) rompiendo la contraseña en subconjuntos predeterminados y luego hash.

Esencialmente, esta es solo una forma elegante de hacer que los usuarios ingresen múltiples contraseñas sin saber que es lo que están haciendo. Luego, el usuario sabe qué contraseña debe ingresar en función de las casillas disponibles.

Si bien hay cosas que podría hacer para compensarlo (imponer contraseñas iniciales mucho más largas, 3 intentos de inicio de sesión estrictos / día, aumentar el número de contraseñas múltiples guardadas y cambiar a uno nuevo después de cada intento de inicio de sesión y no permitir la repetición hasta un inicio de sesión exitoso, etc.), esto en general haría que sus contraseñas sean más cortas (en su caso, 5 caracteres) y, por lo tanto, más débiles.

Además, la protección que obtendría de los keyloggers en cualquier caso sería mínima. Solo requeriría que el keylogger realmente vea varios de sus inicios de sesión y descubra cuál es su contraseña completa. Una mejor seguridad para el registro de claves sería utilizar la autenticación de dos factores, que no tiene por qué ser complicada o costosa. Cuando el usuario inicie sesión, simplemente preséntele un código que pueda escribir e ingresar para iniciar sesión la próxima vez.

    
respondido por el theinvisibleduck 24.09.2015 - 19:54
fuente
-1

sí Me recuerda el protocolo de prueba de conocimiento cero. La contraseña no puede ser interceptada porque el usuario nunca la transmite o incluso la ingresa por completo. (No puede aprender la contraseña del protocolo). Pero el secreto debe ser lo suficientemente fuerte. Si pregunta un carácter, por supuesto, después de haber visto cada posición, conozca la contraseña. Lo mismo vale para el hashing. Si el hash es débil, se puede romper.

Editar: Creo que el hash en este caso no es un hash md5 o similar, en este caso con el hash se entiende el secreto que contiene la contraseña. En la documentación de conocimiento cero a menudo hay un gráfico de color o un polinomio grande. No recuerdo los detalles.

Tal vez piense en ello como factorización principal. Supongamos que tiene una lista de números primos y almacenes (Producto: i: p [i] ^ i) (por ejemplo, 504) en la base de datos y le pregunto el tercer factor primo ... en caso de que responda 2, puede verificar fácilmente que es el tercer número ... como 504 == 7 * 3 * 3 * 2 * 2 * 2 ahora pasa a números primos grandes como en cifrado fuerte.

    
respondido por el Wouter 23.09.2015 - 23:24
fuente

Lea otras preguntas en las etiquetas