¿Rehashing un hash débil con un algoritmo fuerte lo hace fuerte?

22

Imagina la siguiente situación. Estamos haciendo una aplicación web que debería ser realmente segura

Ahora las cuentas / usuarios no son agregados directamente por nosotros, pero reciben una carta con un código de acceso. Obtenemos un archivo de vez en cuando que contiene un hash SHA-1 sin sal de este código de registro y otra información realmente básica.

Teniendo en cuenta que SHA-1 se considera hoy en día como una responsabilidad, y el software que genera estos hashes no está bajo nuestro control (también es probable que el software antiguo no sea capaz de hashes mejores)

¿Sería una solución el hash del hash recibido usando Bcrypt? Esto debería solucionar el problema de que sea inseguro / demasiado rápido si tengo razón. ¿También debo añadir un pimiento?

¿Hay otros problemas que pueda haber pasado por alto? ¿O deberíamos rechazar el problema y hacer que reparen su software para mejorar las funciones de hash?

Aclaración:

Nuestro cliente es un empleado de una empresa y necesita aprobación para este proyecto.

El tercero hizo un sistema para la compañía de nuestro cliente que maneja información confidencial sobre los clientes de la compañía de nuestros clientes. Quieren dar a algunos de sus clientes la posibilidad de iniciar sesión en nuestra aplicación, esto tiene que pasar por su sistema porque eso es lo que saben los empleados de nuestro cliente y si tuvieran que agregar usuarios manualmente en nuestra aplicación, nuestro cliente no obtendría la aprobación. .

También si hay alguna fuga o incumplimiento (aunque técnicamente tenemos acceso 0 a cualquier información confidencial, incluso en nuestra propia aplicación no hay ningún nombre o información de identificación sobre el usuario), esto podría atraer una atención negativa no deseada que lastimar tanto al cliente como a nosotros.

El problema es que el sistema que hizo el tercero solo puede hacer Hashes SHA-1 sin sal. Así que mi pregunta es tratar de ver si podemos solucionar esto. O si nos vemos obligados a decirle a mi cliente que obligue al tercero a implementar un mejor sistema de hash, que tal vez solo respondan con "no", no queremos. O podría costar mucho más dinero.

Espero haberlo explicado un poco mejor y seguir siendo vago. :)

    
pregunta Jester 28.11.2016 - 11:53
fuente

4 respuestas

15

Sí, hash de nuevo con bcrypt es una buena idea. Sin embargo, tenga en cuenta que no le dará más entropía a su código de inicio de sesión, solo hará que se demore más tiempo en descifrar. Por lo tanto, para empezar, si se trata de una entropía muy baja, es posible que necesite un factor de costo muy alto para que no sea posible descifrarla.

En una nota al margen, en general, es mejor utilizar solo una función hash buena que jugar con muchas, como se explica en las respuestas a esta pregunta . Pero no tiene esa opción, por lo que los argumentos no son realmente válidos para su caso.

En cuanto al uso de un pimiento, recomendaría simplemente cifrar los hashes en su lugar. Da el mismo tipo de protección, pero ofrece más flexibilidad. Pero no es un reemplazo para la salazón.

This and this puede ser una lectura interesante para usted. Además, Roshan Bhumbra tiene un sugerencia interesante acerca de rehashing con una sola función después del primer inicio de sesión.

    
respondido por el Anders 28.11.2016 - 12:56
fuente
5

Cifrado en tránsito

En su sistema actual, parece que la contraseña de facto es el "hash SHA-1 de este código de registro", ya que la posesión de un hash coincidente es suficiente para crear un archivo válido, aunque no está claro si permite al atacante explotar algo directamente Sin embargo, en este sentido, no es menos seguro que simplemente enviar una contraseña de texto simple, lo cual es apropiado siempre y cuando "obtenga un archivo" a través de un canal seguro y cifrado, es decir, https / sftp / etc. adecuados.

Cifrado en almacenamiento

Un riesgo de este sistema es que si un atacante puede obtener una copia de ese archivo, puede obtener las contraseñas completas de los usuarios. SI necesita almacenar estos hash, entonces tiene razón en que sería razonable hacerlos con bcrypt para el almacenamiento, y el problema principal es que debe asegurarse de eliminar inmediatamente el SHA recibido. -1 hash y ninguna copia (p. Ej., Archivos temporales, copias de seguridad, cachés, etc.) permanecen en el almacenamiento.

    
respondido por el Peteris 28.11.2016 - 12:49
fuente
2

Veo otra opción que no parece haber sido mencionada, aunque esto funcionaría mejor si el sistema que genera el hash pudiera usar un Bcrypt.

Solo necesita actualizar el hash cuando el usuario inicie sesión. Aunque esto significa que tendrá dos algoritmos de hashing diferentes en uso al mismo tiempo, soluciona el "problema" mencionado por @Anders con respecto al uso de dos algoritmos en un valor.

Puede almacenar un valor junto al hash para decirle a la aplicación de qué tipo es, y si es el hash SHA-1, puede hacer un hash de la contraseña que acaba de ingresar (siempre que sea correcta) y guardarla.

    
respondido por el Roshan Bhumbra 28.11.2016 - 21:11
fuente
2

Si los hash originales no tienen sal, entonces simplemente puede aplicar cualquier algoritmo de hash con sal al hash sin sal original que haya recibido.

Sin embargo, es importante que esté claramente marcado en su base de datos que estos hash están usando el algoritmo de hash combinado. No es del todo improbable que en una fecha posterior tenga diferentes usuarios en su base de datos protegidos con diferentes algoritmos hash. En ese momento, es importante que conozca la función correcta que debe usar cada usuario en su base de datos.

Es posible actualizar los hash almacenados en su base de datos la próxima vez que el usuario inicie sesión. Aunque puede que no sea importante porque bcrypt es solo un poco más seguro que SHA1 seguido de bcrypt.

Si los hashes originales están salados, se vuelve más complicado. En ese caso, aún puede aplicar dos capas de hash, pero en ese caso es muy importante almacenar todas las sales y solo el último valor de hash.

    
respondido por el kasperd 28.11.2016 - 22:20
fuente

Lea otras preguntas en las etiquetas