Saltar al contenido

Recorrido narrado

El peor caso y el atacante

El O(1) de una tabla hash es esperado: supone que la función hash reparte las claves como si fueran al azar. Si todas las claves caen en la misma cubeta, buscar es recorrer n claves: O(n) en el peor caso, e insertar n claves cuesta O(n²).

Reparto parejo frente a todas las claves en una cubetaDos tablas de 4 cubetas con las mismas 6 claves, a a f. Arriba están repartidas: dos en la cubeta 0, una en la 1, dos en la 2 y una en la 3; la cadena más larga tiene 2 claves. Abajo están todas en la cubeta 0, en una cadena de 6, y las otras tres cubetas están vacías: buscar f recorre las 6.Reparto parejo: 6 claves en 4 cubetas0ae1b2cf3dTodas en la misma cubeta (peor caso)0abcdef123buscar f: 2 pasos como muchobuscar f: recorre las 6 claves
Las mismas claves y la misma tabla: lo que cambia es cuánto reparte la función hash.

Con claves normales esto casi no pasa. Pero si un atacante conoce la función hash, puede fabricar miles de claves con el mismo hash y enviarlas a un servidor que las guarde en una tabla. Cada petición se vuelve lenta y el servidor deja de responder. Es un ataque conocido como HashDoS (2011).

La defensa: una semilla aleatoria que se elige al arrancar el programa y entra en el cálculo del hash. Sin conocer la semilla, el atacante no puede fabricar colisiones.

Texto
hash(k) ← función_resistente(semilla, k)

Lee el recorrido de esta página. Al pasar al siguiente momento, este cuenta como leído.