Dada una salida que ha sido generada por una función hash, ¿es posible extraer la entrada en una cantidad de tiempo factible usando Quantum Computers?

Depende.

Los algoritmos de hashing más comunes, como MD5 y SHA1, producen un hash de longitud fija (digamos N bits) y, por lo tanto, solo tienen 2 ^ N de salidas posibles. Si hay más de este número de entradas posibles (por ejemplo, se sabe que la entrada es más larga que N bits), entonces es obvio que cada entrada no se puede dividir en una salida única: habrá colisiones . Incluso para un conjunto más pequeño de valores de entrada, una función hash puede tener colisiones.

Por lo tanto, el hash puede perder información, y ningún algoritmo, cuántico o de otro tipo, puede devolverlo.

Sin embargo, si de alguna manera supiera que todas las M entradas posibles se combinan con salidas únicas, entonces podría usar el algoritmo de Grover para reducir el tiempo de ejecución del hash inverso desde O (M), es decir, pruebe todas las entradas hasta encontrar la que funciona – a O (sqrt (M)).

Las computadoras Quantum actuales no son capaces de lograr demasiado. Todavía están en una etapa temprana de desarrollo y no alcanzarán una forma madura durante al menos las próximas 3 décadas. En teoría, podría ser posible con computadoras cuánticas muy avanzadas contra algoritmos como md5. Sin embargo, debe considerar el hecho de que cuando llegue este momento, utilizaremos algoritmos hash mucho más complejos, lo que lo hace imposible incluso para las computadoras cuánticas avanzadas.

No. No es posible para ningún tipo de computadora, nunca.

Los hash son una forma de compresión con pérdida: cada valor de hash representa muchas entradas de texto sin formato diferentes.

Entonces, aunque puede descubrir todas las entradas posibles que dan como resultado un hash, no hay información que lo lleve a la correcta.

Sin funciones hash (por diseño y por su propia naturaleza) arrojan mucha información de la fuente.

Puede hacer un hash de 100 bytes del nombre y la dirección de alguien en un código de 32 bits; no hay posibilidad, incluso en teoría, de recuperar el nombre y la dirección del hash.

Lo mejor que puede hacer es averiguar cuál de una lista de nombres y direcciones se ha incluido en ese código en particular … lo cual es trivial y no requiere nada cuántico para resolver en O (n).

En general, las funciones hash no son uno a uno (considere el hash de todos los textos posibles de 20 páginas a un hash de 512 bytes. Obtendría duplicados).

Entonces, si bien puede encontrar una entrada, pero sería imposible asegurarse de que fuera la correcta.