Existe-t-il une classe d'algorithmes de hachage, qu'ils soient théoriques ou pratiques, de sorte qu'un algorithme de la classe puisse être considéré comme «réflexif» selon une définition donnée ci-dessous:
- hash1 = algo1 ("texte d'entrée 1")
- hash1 = algo1 ("texte d'entrée 1" + hash1)
L'opérateur + peut être une concaténation ou toute autre opération spécifiée pour combiner la sortie (hachage1) dans l'entrée ("texte d'entrée 1") afin que l'algorithme (algo1) produise exactement le même résultat. c'est-à-dire collision sur entrée et entrée + sortie. L'opérateur + doit combiner l'intégralité des deux entrées et l'algo ne peut pas rejeter une partie de l'entrée.
L'algorithme doit produire une entropie élevée dans la sortie. Il peut, mais pas nécessairement, être cryptographiquement difficile de retourner la sortie à une ou aux deux entrées possibles.
Je ne suis pas mathématicien, mais une bonne réponse pourrait inclure une preuve de la raison pour laquelle une telle classe d'algorithmes ne peut pas exister. Ce n'est cependant pas une question abstraite. Je suis vraiment intéressé à utiliser un tel algorithme dans mon système, s'il en existe un.
Il s'agit d'un doublon d'une question qui a été publiée pour la première fois sur /programming/4823680/reflexive-hash
la source
Réponses:
Je donne une construction triviale qui satisfait à l'exigence. Je le fournis pour répondre simplement à l' existence d'une fonction de hachage "réflexive".
Soit toute fonction de hachage produisant une entropie élevée dans la sortie. Supposons que G hache des chaînes binaires de longueur arbitraire en chaînes binaires de k bits, où k est un entier positif. Soit + désigne l' opérateur de concaténation , et soit | x | désigne la longueur de la chaîne binaire x .g g k k + | x | X
Définissez la fonction de hachage sur l'entrée x comme suit:H X
Comme je l'ai dit, c'est une construction banale. Il peut être appliqué à n'importe quelle fonction de hachage, pratique (comme MD5, SHA-1, ...) ou théorique.
la source