2012-02-11 11 views

Respuesta

27

El parámetro de inicialización es un medio para aleatorizar la función hash. Debería proporcionar el mismo valor de inicialización para todas las llamadas a la función de hash en la misma aplicación de la función de hash. Sin embargo, cada invocación de su aplicación (suponiendo que esté creando una nueva tabla hash) puede usar una semilla diferente, por ejemplo, un valor aleatorio.

¿Por qué se proporciona?

Una razón es que los atacantes pueden usar las propiedades de una función hash para construir un ataque de denegación de servicio. Podrían hacer esto proporcionando cadenas a su función de hash que todos los hash al mismo valor destruyen el rendimiento de su tabla hash. Pero si usa una semilla diferente para cada ejecución de su programa, el conjunto de cadenas que los atacantes deben usar cambia.

Ver: Effective DoS on web application platform

También hay un Twitter tag for #hashDoS

+4

Esto está relacionado con, pero no exactamente equivalente a, la idea de [hashing universal] (http://en.wikipedia.org/wiki/Universal_hashing): en lugar de tener una función de hash, tienes una familia completa (en este caso, MurmurHash3 es la familia, con cada posible valor inicial que le da una función particular dentro de esa familia). Si descubres que tus datos de entrada producen hashes mal distribuidos (por ejemplo, debido a un ataque), puedes elegir un nuevo valor de inicialización aleatorio y volver a generar los datos; es poco probable que los datos produzcan una mala distribución para su nuevo valor de inicialización, por lo que supera el ataque. –

0

Un valor llamado seed aquí significa sal. Proporcione cualquier dato aleatorio pero privado (para usted), de modo que la función hash dará resultados diferentes para los mismos datos. Esta característica se utiliza, por ejemplo, para hacer un resumen de sus datos para detectar la modificación de datos originales por terceros. Difícilmente pueden replicar el valor hash válido hasta que conozcan la sal que usaste.

La sal (o semilla) también se usa para evitar colisiones hash para diferentes datos. Por ejemplo, sus bloques de datos A y B pueden producir el mismo hash: h (A) == h (B). Pero puede evitar esta condición conflictiva si proporciona algún tipo de datos adicionales. Las colisiones son bastante raras, pero a veces la sal es una forma de evitarlas para el conjunto concreto de datos.

+0

En realidad es dudoso. ¿Cuál es el propósito de 'sault' para la función hash no criptográfica? – Lol4t0

+2

MurmurHash es una función hash no criptográfica. No es una elección adecuada para un resumen de mensaje _secure_. –

1

En la realización dada seed se utiliza en la construcción del vector de inicialización . Es un valor arbitrario, la elección de valores diferentes para diferentes datos disminuirá la tasa de colisión. Pero tenga en cuenta que debe saber par de seed - data luego.

Cuestiones relacionadas