¿Un hash de un entero de 32 bits produce una mejor sal de hash que el entero?

3

Tengo un escenario en el que ya tengo una tabla de contraseñas de recursos almacenada como hashes de 128 bits sin sal. No puedo forzar a los propietarios a que proporcionen nuevas contraseñas, por lo que estoy tratando de mitigar la situación volviendo a escribir todas las contraseñas con un salt.

Desafortunadamente, solo puedo extraer la sal de los datos existentes, y los únicos datos que puedo garantizar que se mantendrán consistentes son el ID de entero (secuencial) de 32 bits del objeto.

Además de agregar una capa extra de oscuridad, ¿hay algún beneficio en extender la longitud de la sal mediante el hashing de la identificación? ¿Repetir el entero para obtener un valor de 128 bits tendría los mismos resultados? ¿O son ambos enfoques inútiles?

    
pregunta user115439 24.06.2016 - 03:07
fuente

2 respuestas

2

En realidad, la mayoría de las implementaciones de algoritmos como BCrypt generarán un salt por su cuenta, desde la fuente aleatoria del sistema operativo. Esto es lo mejor que se puede hacer y no hay necesidad de derivar una sal de otros parámetros.

Un salt debe ser globalmente único para cada contraseña, de modo que un atacante no pueda encontrar ninguna tabla arco iris precalculada, y tendría que crear una tabla arco iris separada para cada contraseña.

  1. Localmente único: si cada contraseña de su base de datos obtiene un salt diferente, el atacante no puede reutilizar las tablas de arco iris. Hashing the integer (id de usuario) no hará ninguna diferencia en este caso.
  2. Globalmente único: si usa sales únicas en todo el mundo, un atacante no puede encontrar tablas arcoiris ya precalculadas. Encontrar tablas precalculadas para los ID de usuarios es un poco más fácil que encontrarlas para los hashes de enteros, por lo que el hash mejoraría un poco la seguridad.

Una vez más, puedes obtener una sal sin derivarla de otros parámetros, y debes hacerlo. Deje que la función hash lo haga, u obtenga de la fuente aleatoria del sistema operativo.

    
respondido por el martinstoeckli 24.06.2016 - 08:58
fuente
1

Para responder a la pregunta que hizo específicamente ... No, calcular el valor de Int32 para usar como sal no es significativamente más fuerte que usar Int32 directamente. Sería, como ya sospecha, ser más oscuro que la seguridad. Como Martin señaló en su respuesta, la propiedad clave de una sal es que es globalmente única. No obtiene esta propiedad con un int o con el hash de un int, por lo que estaría agregando complejidad a la solución, pero no mucha seguridad.

    
respondido por el Xander 20.07.2016 - 01:38
fuente

Lea otras preguntas en las etiquetas