Si sabemos cómo funciona un algoritmo de hash de contraseña en particular, ¿por qué no podemos simplemente crear una contraseña que genere el mismo hash?

Si las contraseñas son x e y, entonces un hash simple podría almacenarse como x * y. Entonces, si x e y son números primos muy grandes, se necesitaría mucha potencia informática para encontrar los x e y originales. Pero, ¿no puedo encontrar 2 números cuyo producto sea x * y aún ingresar a un sistema ya que ese número es el hash?

Está confundiendo el cifrado de clave pública RSA con un hash criptográfico aquí, creo.

Una función criptográfica de hash está diseñada para ser unidireccional : es relativamente fácil calcular el hash en función de una entrada pero imposible calcular la entrada desde el hash. De hecho, por su naturaleza, hay infinitas entradas diferentes que producen el mismo valor hash.

Para archivar esto, una función hash criptográfica utiliza algoritmos completamente diferentes que el criptosistema RSA. Tomemos, por ejemplo, la función SHA3 (que no está hecha para contraseñas en particular, solo una función hash general):

SHA-3 – Wikipedia

En su base tiene una construcción de esponja, no una multiplicación de números primos.

Para que su esquema funcione, tendría que conocer el valor hash de la contraseña en primer lugar, es decir, tener acceso a la base de datos y esperar que el propietario no haya salado las contraseñas ni haya utilizado múltiples rondas de hash. Si tiene este nivel de acceso, de todos modos no queda mucho por ganar.

Tenga en cuenta que es posible crear colisiones hash deliberadas para archivos utilizando el hash MD5. Esto lleva varias horas en una PC de escritorio. También es posible colisionar el algoritmo SHA1, pero lleva semanas en una supercomputadora. Ambos algoritmos han quedado en desuso durante años debido a eso (SHA1 mucho antes de que Google anunciara su primera colisión en el mundo real). Los hashes modernos tardarían millones o incluso miles de millones de años en romperse.

Creo que ha entendido mal cómo funciona el hashing de contraseñas comunes, tal vez lo está confundiendo con la criptografía de clave pública.

Una función hash es una transformación no reversible * de un solo valor en su “hash”. Encontrar una contraseña que produzca el mismo hash (también conocido como “colisión”) es, por diseño, solo posible por fuerza bruta (con calificaciones que no son relevantes para esta pregunta), es decir, probando una gran cantidad de diferentes valores de entrada.

Por otro lado, si desea obtener más información sobre la criptografía de clave pública, que se basa en la teoría de números y los números primos, el libro Cryptography Engineering es ideal.

* Dado que los humanos no son muy imaginativos y tienden a usar una pequeña parte del espacio de la contraseña, a veces puedes revertir inmediatamente la función usando una base de datos de hashes avanzados conocidos (este ataque se evita mediante la salazón ). Por ejemplo, google esta cadena MD5: f2340a1d30f79f3b1c1d78ca4fadbd26

Hay un teorema que dice que la factorización prima de un número es única, hasta el orden. Entonces, si x e y son primos, entonces tienes x * y = y * x o 1 veces el producto, suponiendo que no se te permita ir a racionales.