Czy istnieje klasa algorytmów mieszających, teoretycznych lub praktycznych, tak że algorytm w tej klasie można uznać za „zwrotny” zgodnie z definicją podaną poniżej:
- hash1 = algo1 („tekst wejściowy 1”)
- hash1 = algo1 („tekst wejściowy 1” + hash1)
Operator + może być konkatenacją lub dowolną inną określoną operacją, aby połączyć wynik (hash1) z powrotem w dane wejściowe („tekst wejściowy 1”), aby algorytm (algo1) dał dokładnie ten sam wynik. tj. kolizja na wejściu i wejściu + wyjściu. Operator + musi połączyć całość obu danych wejściowych, a algo nie może odrzucić części danych wejściowych.
Algorytm musi generować wysoką entropię na wyjściu. Może być, ale nie musi, być kryptograficznie trudne odwrócenie wyjścia z powrotem do jednego lub obu możliwych wejść.
Nie jestem matematykiem, ale dobra odpowiedź może zawierać dowód na to, że taka klasa algorytmów nie może istnieć. Nie jest to jednak abstrakcyjne pytanie. Naprawdę jestem zainteresowany wykorzystaniem takiego algorytmu w moim systemie, jeśli taki istnieje.
Jest to duplikat pytania, które zostało po raz pierwszy opublikowane na stronie /programming/4823680/reflexive-hash
źródło
Odpowiedzi:
Daję trywialną konstrukcję, która spełnia ten wymóg. Podaję to, aby jedynie odpowiedzieć na istnienie „refleksyjnej” funkcji skrótu.
Niech będzie dowolną funkcją skrótu wytwarzającą wysoką entropię na wyjściu. Załóżmy, że G hashuje łańcuchy binarne o dowolnej długości do k- bitowych łańcuchów binarnych, gdzie k jest dowolną liczbą całkowitą dodatnią. Niech + oznacza operator konkatenacji i niechsol sol k k + oznacza długość ciągu binarnego x .| x | x
Zdefiniuj funkcję skrótu na wejściu x w następujący sposób:H. x
Jak powiedziałem, jest to trywialna konstrukcja. Można go zastosować do dowolnej funkcji skrótu, praktycznej (takiej jak MD5, SHA-1, ...) lub teoretycznej.
źródło