Рейтинг:0

Алгоритм проверки 1 из N входов является частью выходного хэша

флаг us

Существует ли алгоритм, который позволяет доказать, что ввод х1 использовался как 1 из N входных данных для создания выходного хэша у, не зная других входных данных?

т.е. например, если есть 5 пользователей, предоставляющих входной хэш, можем ли мы создать выходной хэш, который позволит каждому отдельному пользователю проверить, что его ввод был частью входных данных, и ему не нужно знать все остальные входные данные?

(можно узнать все входные данные в процессе проверки, входные данные не являются секретными, просто они недоступны)

Еще немного информации о конкретном варианте использования:

  1. Мне нужно представить состояние системы в краткой форме (хэш?).
  2. Состояние постоянно изменяется/развивается на основе новых пользовательских данных.
  3. Должен быть способ проверить, отражен ли уже определенный пользовательский ввод в текущем состоянии.

Грубым подходом было бы представление состояния системы в виде списка входных данных, но это не работает из-за некоторых ограничений.
Поэтому я надеялся, что может быть криптографическая функция, которая позволит представить состояние в краткой форме. Я изучал деревья Меркле, схемы с несколькими подписями и т. д., но пока не нашел ничего, что действительно соответствовало бы всем требованиям.

флаг ph
Похоже, вы могли бы решить свою проблему с помощью дерева Меркла https://en.wikipedia.org/wiki/Merkle_tree
TommyF avatar
флаг us
@ bmm6o, к сожалению, нет, это также требует знания других входных данных или их совокупного хэша, но спасибо за предложение!
флаг ph
Верно, дерево должно быть доступно любому, кто захочет проверить вычисление.
SEJPM avatar
флаг us
Итак, вы хотите доказать, что для заданного значения $y$ существует некоторый $x_i$ из множества размеров $N$ значений $S=\{x_1,x_2,\ldots,x_N\}$, таких что $y=H(x_i)$ и что вы знаете, сказал $x_i$ (возможно, не раскрывая его?)? Разрешено ли взаимодействие в таком доказательстве или требуется, чтобы оператор был сравним с хеш-значением?
TommyF avatar
флаг us
@SEJPM Я добавил больше информации о моем конкретном случае использования, чтобы сделать его более понятным. Спасибо за попытку помочь!
Ben Voigt avatar
флаг cn
@TommyF: Вы проверяли эту идею с помощью принципа Pigeonhole? То есть, если каждый из *N* входных данных имеет длину *k* бит, а выходной хэш имеет длину x бит, то, если `x > N*k`, один и тот же результат может быть получен многими различными входными данными (2* *(x - N*k)) и, следовательно, даже если у вас есть полный ввод и вы воспроизводите вычисление хеш-функции, полученное на том же выходе, вы никогда не сможете узнать, есть ли у вас исходный ввод или просто коллизия.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.