Es imposible deducir con certeza cual fue, entre las posibles entradas que resultan en el hash 9, la que lo produjo en ese instante, pero, ¿A quien le importa ese instante?
Justamente importa a quien debe procesar que el resultado generado/recibido en ese instante coincide con el almacenado. Luego claro que importa.
... de todos modos, eres tu el que dijo eso de: "Creo que totalmente
es posible descifrar un mensaje utilizando el mismo algoritmo ...
lo aplico a algoritmos de reduccion como hashes (por ejemplo, MD5)"
Curiosamente, 99999999999992, es la menor cantidad posible que resulta en un hash "9".
No. El menor es simplemente 9.
Una cualidad intrínseca a los hashes, es que no se sabe el tamaño de origen, podría ser 1 byte, 100 millones o cualquier tamaño intermedio...
99999999999992 produce el mismo hash que 12345678903648327523634954. ¿Que importa, entonces, 12345678903648327523634954?
Cualquier múltiplo de 9 genera el mismo hash... era importante hacerte notar la infinitud de colisiones para que entiendas que el problema radica en la indecibilidad de reconocer cual fue el origen. Si te pongo de ejemplo un algoritmo cuya dificultad en hallar colisiones es complicado, flaco favor haría al caso...
En principio hablas de un modo genérico al señalar los algoritmos de hashes, sin embargo al llegar a este punto, parece más bien que te ciñas (en exclusivo) a los referidos específicamente a los algoritmos de hashes sobre criptografía. Hay muchas cosas que se podrían decir, pero no pretendo extenderme demasiado, tan solo unos puntos.
A - Utilizar hashes en crudo, no es buena idea, precisamente porque pueden ser alterados mediante las técnicas Mitm. Si no que suelen llevar otras alteraciones/añadidos, por ejemplo aplicando un simple algoritmo de Luhn al hash (que añade un simple byte al final), no te bastaría incluso en el supuesto caso de que pudieras generar colisiones para un hash, un simple byte podría suponer que tendrías que generar entre 1 y 256 colisiones idénticas (128 de promedio). Como dicho hash se aplica calculando el texto de origen (también es un hash, de hecho es el primer algoritmo de Hash, pues fue Peter Luhn recisamente el que inicialmente sugirió tales técnicas), no vendrá a coincidir con lo tuyo, con tu dato ficticio para generar la colisión al aplicársele el algoritmo (o si, 1 entre 256 posibilidades).
B - Aunque un programa calcule un hash más o menos simple, se supone que será cifrado antes del envío, luego técnicamente tampoco tienes modo de saber (a priori) dicho hash. Luego sin tal conocimiento un intento de hallar colisiones carece de sentido.
C - Cuando se diseña un algoritmo para hashes, una de las principlaes cualidades buscadas es intentar evitar colisiones todo lo posible, ahora bien, dado que el caso trata del campo de Galois, reducirlo a otro más pequeño, sí o sí tiene que haber colisiones, entonces se miran algunas cualidades:
---- Que la dispersión sea lo mas uniforme posible.
---- Que no haya acumulaciones.
---- Que el tamaño de reducción contenga todavía el mayor amplio abanico de posibilidades (si el rango M-N tiene que ser reducido a uno más pequeño X-Y, cuanto más grande sea el rango X-Y, tanto más difícil será que se produzcan colisiones si las dos propiedades previas se dan.
Por eso mismo, los algoritmos de hashes con el tiempo se deshechan y/o modifican (evolucionan) (ejemplo: MD2, Md3, MD4, Md5...)para cubrir posibles fallos o simplemente para aumentar el rango de valores que generan 128 bits (16 bytes), 256, 384, 512, etc...
D - Cuando diseñas una tabla Hash (por ejemplo), una de las cosas que debes hacer obligadamente (si eres celoso de tu trabajo), es verificar precisamente las cualidades del hash, para asegurarte que es óptimo en todos los sentidos. La eficiencia de una tabla Hash se vería comprometida si las colisiones estuvieran fuera de control. Además cuando por ejemplo añades o buscan un ítem, no basta con calcular su hash, para identificarlo unívocamente (y no ser confundido con otra coslisión), debe luego ser comparado byte a byte el valor entrado con el almacenado (si ya existe). Lueg no creas que simplemente 'viaja' un hash sin el resto de datos (cifrados convenientemente), en tales casos el hash hace más bien una doble labor de servir para la búsqueda y verificar que los datos son los que son (y no otros).
E - En ciertos algoritmos, tampoco las colisiones son deseables, solo restan eficiencia en cuanto al tiempo de operación, peor no hay afectacion alguna en cuanto a 'seguridad'. Por ejemplo el algoritmo KarpRabin, es un algortimo de búsqueda que utiliza hashes incrementales. Los hashes se crean, consumen y destruyen internamente basado en los datos recibidos para la búsqueda (por ejemplo una sección de una imagen o de un texto), luego no hay materia de seguridad que vaya a quedar comprometida.
Z - Por último, señalarte que tu afirmacion dubitativa de: "Creo que totalmente
es posible descifrar un mensaje utilizando el mismo algoritmo ...
lo aplico a algoritmos de reduccion como hashes (por ejemplo, MD5)", está en oposición directa a uno de los pilares básicos de la criptografía, que reza que la fuerza de un algoritmo criptográfico no debe recaer en el propio algoritmo (esa es la razón primera y principal por la que no hay necesidad de ocultar el funcionamiento del algoritmo), si no basado en las propias matemáticas.
...y con lo de "...lo aplico a algoritmos...", no me queda claro si esa 'aplicacion', se refiere a tu creencia (supongo que sí, porque de lo contrario el 'creo' sobraría), con lo que quiero decir es que no conviene usar la palabra aplicación (así en presente), cuando no pasa del terreno de las ideas, déajlo para cuando hagas algo tangible.
Creo que el foro donde uno puede expresar su opinión básicamente es el 'foro libre', en el resto de secciones, la opinión importa poco y el peso recáe en el conocimiento, no en el creo, me parece, me dijeron, leí... Es decir si la intención es aprender, es mejor abstenerse de ciertos comentarios que no aportan nada.