He leído sobre tablas de arco iris (que confundí con tablas de hash al principio).
Entiendo que usa una función de reducción R(x)
y al guardar el valor de inicio P
(texto sin formato) y al valor de hash final final H
puedo "ahorrar" espacio con solo guardar (R,P,H)
.
Pero no entiendo por qué no puedo hacer eso con tablas hash: cree la función "GetNext (x)" GN(x)
y guarde los valores de inicio y finalización de texto plano (P1, P2)
y con eso 'guardar 'espacio, mientras que está claro que un atacante elige calcular todos los hashes antes o no.
Por ejemplo, una función de reducción que devuelve los primeros 5 caracteres de md5. ¿Cómo puedo manejar con texto plano que contiene caracteres especiales? Además de eso tendré colisiones como:
12211ndjdkxjdns....
12211poiplioiippp...
Esos hashes obtendrán el siguiente texto sin formato después de la función de reducción, incluso si le agrego algo al azar, siempre estaré limitado a la entrada del hash y su longitud.
Lo último: si tengo algunas tablas de arco iris, ¿cómo puedo asegurarme de que no tengo plaintexts duplicados (colisiones), ya que veo que no puedo sin clasificar y luego toda la idea de espacio desaparece? ¿Por qué no solo genera valores de inicio y finalización de texto sin formato y los almacena si desea ahorrar espacio? No entiendo la lógica detrás de tratar de crear texto plano a partir de hash.