Рейтинг:1

Безопасная сортировка списков номеров с двух сторон

флаг jp

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

poncho avatar
флаг my
Будет ли результатом конкатенация двух отсортированных списков? Что мешает каждой стороне вывести отсортированный список другой (а если ничего, то достаточно тривиального протокола одной стороны, дающей отсортированный список другой, которая их объединяет).
Problem Solver avatar
флаг jp
Каждая сторона узнает относительное положение своих входных данных в объединенных списках, но не будет знать фактические числа от другой стороны. В идеале я хочу сделать это для произвольного количества сторон.
Рейтинг:1
флаг ng

Проблема имеет «простое решение» с использованием общих методов.

  1. Существуют расширения проблемы миллионеров Яо о том, как безопасно вычислять любая схема $С(х, у)$. Это целая область исследований, которая обычно называется «Безопасные вычисления» или «Многосторонние вычисления».

  2. Существуют схемы, которые могут сортировать входные данные по имени сортировочные сети. Пока есть технически $O(n\logn)$ (сеть сортировки AKS + сортировка Zigzag), они технически сложны, с плохими константами, поэтому на практике почти всегда лучше использовать $ О (п (\ журнал п) ^ 2) $ сеть сортировки, которых существует множество (например, Batcher Odd-Even Mergesort).

Это означает, что ваша проблема решается путем вычисления сети сортировки (скажем, Batcher Odd-Even Mergesort) с использованием общих методов двухсторонних вычислений.

Глядя на реализации протоколов MPC, это выглядит так: этот от Бостонского университета включает соответствующую демонстрацию. В частности, они

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

Вероятно, вы можете повторно использовать часть этого кода, но вам нужно быть осторожным. Гарантия безопасности MPC заключается в том, что

Протокол MPC показывает только $С(х,у)$, напримернастолько хорош, насколько оба участника вносят свой вклад $х, у$ какой-либо доверенной третьей стороне $Т$, который затем вычисляет $С(х,у)$, и говорит им ответ.

Теоретически вы можете взять приведенный выше пример кода, поменять местами часть, которая суммирует вещи, на конкатенацию, и продолжить. Это приведет к практически небезопасной схеме --- учитывая $х$ и $С(х,у)$, восстановить несложно $у$.

Я бы вместо этого предложил иметь $С(х,у)$ вычислить (в отсортированном представлении конкатенации $х||у$) битовый вектор, указывающий, где должны заканчиваться элементы каждой стороны. Это по-прежнему кодирует всю соответствующую информацию о заказе, но скрывает ввод каждой стороны от другой стороны (за исключением информации о заказе, которая «должна просочиться»).

Это можно сделать с помощью

  1. Отображение каждого элемента $t$ из $х$ к $2т$,
  2. Отображение каждого элемента $t$ из $у$ к $2т+1$,
  3. объединение этих преобразованных элементов,
  4. сортировка конкатенации,
  5. отображение $t\mapsto t\bmod 2$ в конце.

Эта схема вычисляет описанную ранее функцию и «разрывает связи» между $х$ и $у$ поставив элемент из $у$ позже в векторе. Этот выбор произволен.

Конечно, это мое представление о разумной схеме $С$ для вычисления, которые могут достичь ваших целей. Вы можете подумать, что он пропускает слишком много информации, и у вас есть какая-то другая схема, которую вы хотите вычислить. Вы по-прежнему можете использовать общие методы MPC для этого --- при условии, что вы можете указать вычисление, которое хотите сделать.


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

Позволять $P_0,\точки, P_{k-1}$ быть сторонами с входными данными $\vec x_0,\dots, \vec x_{k-1}$. Определение цепи $C(x_0,\dots, x_{k-1})$ что

  1. для каждого $я$, применяет функцию $t\mapsto kt + i$ каждой координате $x_i$,
  2. объединяет все результаты вместе
  3. сортирует результаты, например, с помощью сортировочной сети,
  4. вычисляет функцию $t\mapsto t\bmod k$ на каждый элемент вывода.

Результатом будет вектор с элементами в $\{0,\dots,k-1\}$. Для простоты скажем, что результат $[0,3,2,2,1,0,1,3]$. Это укажет всем 4 сторонам, что относительный порядок их входных данных

  1. наименьший элемент партии 0
  2. наименьший элемент партии 3
  3. наименьший элемент партии 2
  4. самый большой элемент партии 2
  5. наименьший элемент партии 1
  6. самый большой элемент партии 0
  7. самый большой элемент партии 1
  8. самый большой элемент партии 3.

Если кто-то использует соответствующую схему MPC (слова, которые нужно искать, это «Злонамеренно безопасные многосторонние вычисления»), то это доказуемо все, что злоумышленник узнает, по модулю некоторых технических предположений. Эти допущения зависят от конкретной схемы, которую вы используете, но обычно они выглядят примерно так:

  • не слишком много участников протокола "вступают в сговор с целью нарушения протокола",
  • противники эффективны в вычислительном отношении, и
  • возможно, есть какая-то фаза «надежной настройки».

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

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