Рейтинг:2

Проверка хеша по ключу

флаг cn

Я хочу реализовать следующий алгоритм, но не знаю, какие инструменты использовать.

Д - данные

  1. Я генерирую некоторое универсальное значение для D - Y
  2. Я генерирую какой-то случайный ключ - K, получаю хэш D по этому ключу - H
  3. Я хочу иметь функцию - F: F(Y, K, H) = true, если H правильно, и false в противном случае.

Основная цель: доказать валидность хэша данных по некоторому ключу, используя только часть исходных данных.

Использование: скажем, у нас есть компьютеры: A, B, C. A отправляет некоторые данные в B, затем данные удаляются из A. Теперь я хочу иметь возможность проверять (из узлов A, C), что B содержит данные каждый раз. 10 минут, но я не могу этому доверять, поэтому мне нужен какой-то инструмент, чтобы убедиться, что Б меня не обманывает.

Ответ: PDP (доказательство владения данными)

kelalaka avatar
флаг in
Вы спрашиваете HMAC или больше?
ischenko avatar
флаг cn
@kelalaka Я хочу иметь возможность доказать, что данные существуют на другом устройстве, поэтому я хочу отправлять ему запросы с разными ключами и получать хэши, а затем проверять хэши по какому-то фрагменту данных (фиксированного размера), извлеченному из исходных данных
ischenko avatar
флаг cn
@kelalaka добавил раздел использования
ischenko avatar
флаг cn
@kelakala Я отправляю запросы со случайными ключами, поэтому B должен хранить данные для вычисления хэша для данного ключа (я ошибаюсь?)
ischenko avatar
флаг cn
да, это самая большая проблема, я должен иметь возможность проверить пару (ключ, хэш) по какому-то маленькому фрагменту исходных данных (но должно быть невозможно получить хэш (по заданному ключу) из этого фрагмента)
kelalaka avatar
флаг in
Используйте HMAC, отправьте ключ, чтобы получить значение HMAC, чтобы проверить это, хотя у вас будет ограниченное количество запросов с количеством пар, которые вы сохранили. Может быть умное решение, которого я сейчас не вижу.
ischenko avatar
флаг cn
@kelakala, кроме того, я не могу предварительно вычислить хэши, потому что узел A не является доверенным, поэтому я должен придумать небольшое представление данных, которое могло бы работать как верификатор хэша.
kelalaka avatar
флаг in
Не могли бы вы полностью переписать свой вопрос, включая все детали...
ischenko avatar
флаг cn
о, извините за путаницу
kelalaka avatar
флаг in
Пожалуйста, [не делайте перекрестных сообщений] (https://stackoverflow.com/q/70852888/1820553), сохраняйте только одну копию. [См. эту мета] (https://meta.stackexchange.com/q/64068/403350)
knaccc avatar
флаг es
Что именно вы подразумеваете под «узел A не является доверенным»? Вы имеете в виду, что A может лгать о том, какие данные, по его утверждению, хранятся у B?
ischenko avatar
флаг cn
@knaccc да. Правильным ответом было использование некоторого алгоритма PDP (доказательство владения данными)
knaccc avatar
флаг es
Было бы интересно, если бы вы могли точно объяснить, какой метод PDP удовлетворяет критериям вашего вопроса. Насколько я понимаю, простейший метод случайного вызова $c$ и ответа, вычисляемого как $H(c\mathbin\|data)$, не удовлетворяет вашим критериям.
ischenko avatar
флаг cn
@knaccc Извините, я не очень разбираюсь в криптографии, поэтому могу ошибаться. Я узнал, что есть очень мощная вещь - гомоморфные хэши, и кажется, что они могут помочь мне построить (или найти существующий) алгоритм, который решит мою проблему.

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

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