Seguridad de hash de contraseña relacionada

2

Supongamos que recibimos una función hash criptográfica (hash) fuerte, una contraseña completamente aleatoria de 15 caracteres pass15, dos valores de sal de un solo carácter, salta, saltb.

Calculamos los hashes hasha, hashb aplicando la función hash a la contraseña pass15 + las sales:

hasha = hash (pass15 + salta)

hashb = hash (pass15 + saltb)

Ahora, digamos que salta, saltb, hash () y hasha son todos públicos. ¿El hashb corre más riesgo de ser resquebrajado que si no se conociera hasha?

Para aquellos que necesitan detalles específicos, vamos con hash () = sha256, pero si es importante, explique por qué es importante este problema.

Mi creencia es que el hashb no es tan fácil de descifrar porque solo es posible un ataque de fuerza bruta para descubrir el hashb, y que el conocimiento público de hasha, salta y saltb no tiene relación.

Simplemente no sé si hay algún método abreviado matemático que pueda utilizar hasha para acelerar el craqueo. No parece teóricamente posible.

** Resumen basado en las respuestas dadas hasta ahora: **

Primero, permítame reformular la pregunta de una manera diferente:

Si tengo una contraseña fuerte y aleatoria de 15 caracteres, los hashes con sal son completamente independientes y seguros de usar como quiera, incluso si las sales son conocidas, son solo caracteres débiles simplemente anexados a la final de la contraseña, y la función hash es rápida, como SHA256?

La respuesta parece ser si. Por lo tanto, podría agregar un% de carácter al final de la contraseña, hacer un hash y usar ese hash como mi ID de usuario. Sería difícil de recordar y probablemente demasiado largo como una identificación de usuario, pero sería seguro hacerlo.

También podría agregar un solo carácter de $ al final de la contraseña, hacer hash y usar el hash como contraseña de mi computadora portátil, y sería seguro hacerlo, aunque estoy utilizando públicamente el% hash como mi identificación de usuario La lista continúa para lo que podría hacer con la contraseña de 15 caracteres y una sal agregada. Por ejemplo, podría agregar el nombre de dominio de cualquier sitio, hacer hash del resultado y usar el hash como mi contraseña para el sitio.

El último concepto es la base para programas como PwdHash y PasswordMaker.

La suposición ha sido que (al menos para mí) las contraseñas generadas por tales programas se mantienen mejor en secreto como contraseñas, no sea que la función hash se "rompa" o se comprometa. Pero parece que mientras la contraseña segura se mantenga en secreto, cualquier hash salado es seguro de usar individualmente como yo quiera, y que la publicación de un hash para el mundo de ninguna manera ponga en peligro la seguridad de cualquiera de los otros hashes. p>

Simplemente estaba preguntando si alguien sabe de alguna debilidad con este pensamiento. La respuesta hasta ahora es no, los hashes individuales pueden usarse como yo quiera.

Para aquellos que se estén preguntando acerca de CÓMO es seguro, aquí hay una respuesta rápida basada en matemáticas (mantuve las matemáticas visibles para que pueda seguirlas con su calculadora):

Creo que en este momento algunos programas pueden usar la tarjeta gráfica de una computadora para calcular alrededor de 1 billón de hashes SHA256 por segundo, 1E9 por segundo (dentro de un orden de magnitud al menos).

Este es el argumento por el que SHA256 es deficiente para las contraseñas, y DEBEMOS estar usando hashes más lentos, como Bcrypt.

Ahora, toma una contraseña aleatoria de 15 caracteres. La cantidad de contraseñas posibles entre mayúsculas, minúsculas y números en la contraseña sería 62 ^ 15 = 7.7E26 contraseñas posibles.

Usando SHA256 como función hash, la cantidad de segundos que tomaría, en promedio descifrar esta contraseña sería la mitad del tiempo para enumerar todas las contraseñas posibles:

7.7E26 / 1E9 / 2 = 7.7E17 / 2 = 3.9E17 segundos

El número de años para descifrar la contraseña sería:

3.9E17 / 60/60/24/365 = 1.2E10 años, o 12 mil millones de años, solo un billón de años menos que la edad del Universo.

Por lo tanto, pasar de un hash SHA256 público a la contraseña original de 15 caracteres con salado probablemente tomaría más tiempo del que tengo en esta Tierra.

Incluso teniendo en cuenta las mejoras en el hardware (ignorando la posibilidad de las computadoras cuánticas), la brecha en la tecnología para solucionarlo en un año significa que necesitamos computadoras que son 10 mil millones de veces más rápidas.

Por lo tanto, debería sentirme libre de usar hash SHA256 con sal, sin embargo, la forma en que elija siempre que la base del hash sea una contraseña aleatoria de 15 caracteres o más.

    
pregunta Ken Clubb 27.07.2014 - 16:42
fuente

2 respuestas

4

Supongo que tu pregunta es:

  

¿Puede un atacante encontrar pass15 más fácilmente si conocen tanto hasha como hashb que si solo saben hashb?

Si esa función hash es realmente buena, debería tener una buena uniformidad . Eso significa que cualquier entrada dada a la función se asignará a una salida independientemente de cómo se asigne una entrada similar.

Esto significa que saber cómo se asignan pass15 + salta no debe llevar a ningún conocimiento adicional de cómo se asignan pass15 + saltb.

Un atacante tendría que usar fuerza bruta ya sea hasha o hashb para descubrir el pase15.

En la práctica, las diferencias que pueden ocurrir entre las sales son:

  • Sales únicas frente a comunes: una sal única por cliente significa que a un atacante le lleva más tiempo romper un conjunto de hashes que si se comparte entre las entradas de ese conjunto. Este es el aspecto más importante de las sales.
  • Sales largas vs cortas: si la sal es común, es menos probable que una sal más larga ya esté asociada a las contraseñas en una tabla porque habría tardado más en computar las entradas de la tabla arco iris de una longitud suficiente. Este es un factor muy pequeño en comparación con la singularidad de las sales o el uso de funciones hash correctas y lentas.
  • Duración desde la cual se descubrió su sal: una sal debe ser privada. Si su db se ha filtrado, debería poder establecer un límite inferior en el tiempo que le tomará a un atacante descifrar, p. 1% de las contraseñas de sus usuarios, para que sepa cuánto tiempo puede esperar antes de restablecer todas las contraseñas de sus usuarios.
respondido por el Steve DL 27.07.2014 - 16:56
fuente
0
  

Ahora, digamos que salta, saltb, hash () y hasha son todos públicos. Es   ¿Hashb más en riesgo de ser resquebrajado que si no se conociera hasha?

Dejando de lado por un minuto que la contraseña tiene 15 caracteres de alta entropía (lo que es bueno), y que sha256 es un algoritmo de hashing rápido (que es malo) ...

Dar GashA al mundo es revelar información que debería ser privada. Este hash podría ser brutalmente forzado, dejando al atacante con la contraseña de SaltA +. Como SaltB y Hash () también son de conocimiento público, el atacante podría crear HashB con Hash (SaltB + Password).

  

Mi creencia es que el hashb no es menos crackeable porque solo un bruto   ataque de fuerza es posible descubrir hashb, y que el público   el conocimiento de hasha, salta y saltb no tiene relación.

Tienes razón en que solo un ataque de fuerza bruta podría revelar HashB, pero el ataque no tiene que ser contra HashB, podría ser contra HashA.

  

Simplemente no sé si hay algún método abreviado matemático que podría   Utiliza hasha para acelerar el agrietamiento. No parece teóricamente   posible.

No conozco ninguna matemática que debilite la seguridad de HashB al conocer HashA. Es solo una cuestión de información privada que se hace pública. Las sales pueden ser consideradas públicas, pero el hash debe ser privado.

Editar : después de volver a leer la pregunta, me doy cuenta de que esta respuesta es específica solo para la implementación de la divulgación de hash propuesta. Pido disculpas si esto no es lo que estás buscando.

    
respondido por el David Houde 27.07.2014 - 16:55
fuente

Lea otras preguntas en las etiquetas