Рассмотрим следующий сценарий:
У нас есть два агента, А и Б.
Б должны доказать, что они знают секрет А, не раскрывая фактического секрета.
например.: А нужен способ дедупликации секретов, которые они получают от Б, но им не нужно знать настоящие секреты. (и Б не хочет, чтобы они знали)
Думайте об этом, как о том, чтобы поделиться хэшем этого секрета, кроме: это очень маленький источник с низкой энтропией (около 1 миллиарда возможных значений). Это означает, что простой хэш будет уязвим для атаки по словарю.
В настоящее время, Б могли бы добавить скрытую «соль» к каждому секрету, которым они делятся, а затем хешировать его, и это затруднило бы А сделать атаку по словарю. Насколько я могу судить, это «решило бы» проблему для случая 1-1.
Однако давайте теперь представим третьего агента, С. С отправляет одинаковые секреты на А. Б и С не могут делиться своими секретами друг с другом.
С может закончиться отправкой «дубликатов» секретов, которые Б есть, хотя они и не знают, что Б имеет на своем конце.
А, конечно, теперь нужно дедуплицировать не только секреты из Б, но и от С.
Скрытая соль больше не будет работать, потому что теперь С нужно знать соль, чтобы иметь возможность генерировать те же хэши. В противном случае А не сможет дедуплицировать ключи из Б и С. Однако наличие общей соли означает, что С может провести атаку по словарю на Б или наоборот.
Может А, Б и С прийти к соглашению, где Б и С могут поделиться своими "доказательствами" с А, таким образом, что А можно их дедуплицировать, но никто не может раскрыть секреты друг друга?
Если да, то можно ли обобщить это на любое количество потребителей/производителей?
Будучи далеко не экспертом в криптографии (я действительно знаю только самые основы), я не уверен, что использую здесь правильные термины. Дайте мне знать, если я могу прояснить что-либо из этого. Кроме того, это не домашнее задание или что-то в этом роде — хотя оно было мотивировано конкретной проблемой, которую я недавно прочитал, это в основном просто любопытство. Грубое объяснение того, почему это невозможно (в случае, если это не так), для меня определенно было бы достаточно. То же самое для краткого описания известного алгоритма, хотя бы просто названия - при правильном направлении я могу провести исследование самостоятельно.
(Просто чтобы было ясно, если это уже не так: А, Б и С не доверяйте друг другу)
(Надуманный) пример
Алиса и Боб хотят продать марки коллекционеру. Думайте о марке как о строке из 7 символов, состоящей только из символов нижнего регистра, и коллекционер марок не может просто изготовить их самостоятельно.
Коллекционер марок купит любую марку, которой у него в данный момент нет. Однако он не купит марку сразу: он подождет, пока увидит, у скольких продавцов она есть, чтобы купить марку по самой низкой цене.
Таким образом, прежде чем отправить настоящую марку, Алиса (или Боб) должны отправить «предложение» коллекционеру, чтобы он мог проверить, есть ли у них уже марка или ее предложил кто-то другой. Они не могут отправить настоящую марку с таким предложением, иначе коллекционер просто получит ее бесплатно, что никому не доставляет удовольствия. Коллекционер должен знать, на какую марку сделана ставка, даже если он не знает фактическую строку из 7 символов, иначе он не сможет сравнить ставки.