Существует ли класс алгоритмов хеширования, теоретический или практический, такой, чтобы алгоритм в классе можно было считать «рефлексивным» согласно определению, данному ниже:
- hash1 = algo1 ("текст ввода 1")
- hash1 = algo1 («входной текст 1» + hash1)
Оператор + может быть конкатенацией или любой другой указанной операцией для объединения вывода (hash1) обратно во вход («input text 1»), так что алгоритм (algo1) даст точно такой же результат. т.е. столкновение на входе и на входе + выходе. Оператор + должен объединять все оба входа, и алгоритм не может отбрасывать часть ввода.
Алгоритм должен давать высокую энтропию на выходе. Может быть, но не обязательно, криптографически трудно преобразовать выход обратно в один или оба возможных входа.
Я не математик, но хороший ответ может включать доказательство того, почему такой класс алгоритмов не может существовать. Однако это не абстрактный вопрос. Я искренне заинтересован в использовании такого алгоритма в моей системе, если таковой существует.
Это дубликат вопроса, который был впервые опубликован по адресу /programming/4823680/reflexive-hash
источник
Ответы:
Я даю тривиальную конструкцию, которая удовлетворяет требованию. Я даю это просто, чтобы ответить на существование «рефлексивной» хэш-функции.
Пусть будет любой хеш-функцией, создающей высокую энтропию на выходе. Предположим, что хэширует двоичные строки произвольной длины в битные двоичные строки, где - любое положительное целое число. Пусть обозначим конкатенацию оператор, и пустьобозначим длину двоичной строки .G k k + | х | Иксграмм грамм К К + | х | Икс
Определите хеш-функцию на входе следующим образом:хЧАС Икс
Как я уже сказал, это тривиальная конструкция. Он может применяться к любой хэш-функции, практической (например, MD5, SHA-1, ...) или теоретической.
источник