Hacer un hash público

4

¿Tiene algún sentido en absoluto saltear un hash que podría estar disponible públicamente?

Realmente no tiene sentido para mí, pero ¿alguien realmente hace eso?

ACTUALIZACIÓN: más información:

Un conocido mío tiene una función de hash salado común que utiliza a lo largo de su código. Así que me preguntaba si tendría algún sentido hacerlo, para hacerlo.

Aquí está la función que utilizó:

  

hashlib.sha256 (string + SALT) .hexdigest ()

Update2:

Lo siento si no estaba claro. Quiero decir, públicamente disponible, que se representa en el HTML del proyecto (para vincular, etc.) & Por lo tanto, puede ser leído fácilmente por un tercero.

El proyecto es una aplicación web basada en python que involucra páginas creadas por los usuarios que se rastrean utilizando sus hashes como myproject.com/hash , lo que revela el hash públicamente. Así que mi pregunta es, si en cualquier circunstancia algún programador en su sano juicio saldrá un hash?

Pregunta: Usar hashlib.sha256(string+SALT).hexdigest() vs hashlib.sha256(string).hexdigest() , cuando el hash no es un secreto.

    
pregunta Sathvik 19.11.2011 - 20:29
fuente

2 respuestas

8

Sí. Normalmente se da por sentado que la sal estará disponible para un atacante. La sal no debe mantenerse en secreto para que sea útil.

La aplicación de sal a un hash se realiza principalmente para proteger contra un ataque de diccionario. Un ataque de diccionario funciona mediante el hash de palabras comunes (por ejemplo, todo en un diccionario, por lo tanto, el nombre) y luego comparando los valores de hash con los del diccionario. Si encuentra una coincidencia (y para cosas como contraseñas con hash, normalmente lo hará) sabrá qué palabra produjo ese resultado con hash.

La sal simplemente hace que este tipo de ataque consuma mucho más tiempo y (especialmente) espacio de almacenamiento. Solo por el mismo argumento, digamos que un diccionario relativamente completo (que incluye muchos nombres y demás) con resultados de hash tomó 3 días para calcular y ocupar un gigabyte de almacenamiento.

Si agregamos, digamos, una sal de 16 bits, el cálculo ahora tomaría aproximadamente 65536x3 = 196,608 días = ~ 538 años. El almacenamiento del resultado requeriría aproximadamente 64 terabytes en lugar de un gigabyte. Para ser justos, la mayoría de las personas no tendrán 65536 usuarios (por ejemplo), por lo que el atacante probablemente recolectará las sales y los hashes, y solo hará un ataque de diccionario a las sales que realmente usó. Esto todavía significa un ataque de diccionario por usuario (o lo que sea) en lugar de uno para todos.

Para la mayoría de los propósitos, eso hace la diferencia entre algo que casi cualquier persona podría hacer solo porque se sentía así, y algo que solo un atacante bastante determinado (y probablemente bien financiado) consideraría.

    
respondido por el Jerry Coffin 19.11.2011 - 22:23
fuente
5

La idea de una sal para un hash es que el mismo mensaje no produce el mismo hash para cada hash, sino que también depende de la sal.

(La misma idea se aplica a un vector de inicialización para las funciones de cifrado).

Si entiendo bien la pregunta, está copiando el contenido de una página contribuida por el usuario para crear una URL para ella. Entonces, la sala de distribución podría tener el objetivo de que dos usuarios que carguen el mismo contenido sigan obteniendo diferentes URL para sus páginas.

El secreto del hash o la sal no es realmente relevante aquí.

Por otro lado, necesitas almacenar la sal en algún lugar, así que realmente no veo que esto sea una buena idea para una función hash, simplemente puedes tomar un número aleatorio solo como el identificador. .

    
respondido por el Paŭlo Ebermann 19.11.2011 - 23:25
fuente

Lea otras preguntas en las etiquetas