«Несколько онкологических центров хотят объединить геномные данные своих пациентов для проведения статистического исследования (GWAS), но законы о защите персональных данных (GDPR / HIPAA) категорически запрещают передавать за пределы клиники даже один байт исходных данных». «Конкурирующие коммерческие банки хотят совместно отслеживать межбанковские цепочки отмывания денег, не раскрывая друг другу списки клиентов и графы транзакций».
На первый взгляд это кажется логическим противоречием: чтобы вычислить функцию $f(x_1, x_2, \dots, x_n)$, разве не должна некая доверенная третья сторона (Trusted Third Party, TTP) сначала собрать все входные данные $x_i$ в открытом виде? Однако в конце 1980-х годов современная криптография доказала поразительную теорему: даже при полном отсутствии доверенной третьей стороны не доверяющие друг другу участники могут совместно вычислить любую вычислимую функцию $f(x_1, \dots, x_n)$ так, что каждый узнает точный результат, но никто не получит ни единого дополнительного бита информации о чужих секретных входах $x_i$.
Эта область называется безопасными многосторонними вычислениями (Secure Multi-Party Computation, MPC). В этой статье мы начнем с двух классических мысленных экспериментов и выведем два фундаментальных математических двигателя MPC: пороговое разделение секрета $(t, n)$ Ади Шамира (интерполяция Лагранжа, протокол BGW и мультипликативные тройки Бивера) и булев подход на основе забывчивой передачи ($\text{OT}_1^2$) Рабина и искаженных схем (Garbled Circuits) Яо.
1. Два парадоксальных мысленных эксперимента: «Средняя зарплата без начальника» и «Проблема миллионеров Яо»
1.1 Мысленный эксперимент 1: Как узнать среднюю зарплату троих, не раскрывая личных доходов
Трое инженеров $A, B$ и $C$ хотят узнать свою среднюю годовую зарплату $\bar{x} = \frac{x_A + x_B + x_C}{3}$, но никто из них не готов раскрыть свою индивидуальную зарплату $x_A, x_B$ или $x_C$ остальным. С помощью аддитивного разделения секрета (маскирования одноразовым блокнотом / One-Time Pad) они решают задачу без посредников:
- Случайная маска и первый шепот ($A \to B$): Участники выбирают большое публичное число $M$ (например, $M = 10^9$). Инженер $A$ тайно генерирует равномерно распределенное случайное число $r \xleftarrow{\$} \mathbb{Z}_M$, прибавляет к нему свою зарплату $x_A$ и шепчет инженеру $B$ только величину $s_1 = (x_A + r) \bmod M$. Поскольку $r$ распределено равномерно в кольце $\mathbb{Z}_M$, сумма $s_1$ также распределена идеально равномерно независимо от значения $x_A$: по теореме Шеннона взаимная информация равна нулю ($I(X_A; S_1) = 0$). Инженер $B$ узнает ровно ноль бит о $x_A$.
- Цепочка сложений ($B \to C \to A$): $B$ прибавляет свою зарплату $x_B$ и шепчет $s_2 = (x_A + x_B + r) \bmod M$ участнику $C$; $C$ прибавляет $x_C$ и сообщает $s_3 = (x_A + x_B + x_C + r) \bmod M$ обратно участнику $A$.
- Снятие маски: $A$ вычитает свое случайное число $r$ по модулю $M$, получает точную сумму $S = x_A + x_B + x_C$ и объявляет среднее значение $\bar{x} = S / 3$.
[!NOTE] Почему необходимы минимум 3 участника ($n \ge 3$)? Если бы участников было всего двое ($A$ и $B$), то даже если бы неподкупный ангел сообщил им только среднее $\bar{x} = \frac{x_A + x_B}{2}$, $A$ мгновенно вычислил бы $x_B = 2\bar{x} - x_A$. Это свойство самой математической функции, а не уязвимость протокола. MPC гарантирует, что в процессе вычислений не утекает ни одного бита сверх того, что логически следует из собственного входа и финального ответа.
1.2 Мысленный эксперимент 2: «Проблема миллионеров» Эндрю Яо (1982)
Сложение линейно, но как быть с нелинейным сравнением? В 1982 году будущий лауреат премии Тьюринга Эндрю Чи-Чи Яо (Andrew Yao) в работе “Protocols for Secure Computations” сформулировал знаменитую проблему миллионеров: два миллионера, Алиса (состояние $x$ млн долларов) и Боб (состояние $y$ млн долларов), хотят вычислить только один булев бит $f(x, y) = [x > y] \in \{0, 1\}$ (кто богаче?), не прибегая к третьей стороне и не раскрывая ни точных сумм $x, y$, ни даже разницы $x - y$.
2. Математическая формализация безопасности: Парадигма симуляции Идеального и Реального миров
Чтобы строго доказать отсутствие любых утечек, Гольдрайх, Микали и Вигдерсон (GMW 1987) ввели парадигму симуляции Идеального и Реального миров (Ideal/Real Simulation Paradigm):
flowchart TD
subgraph IdealWorld["Идеальный мир (Ideal World): эталон абсолютной приватности"]
direction TB
PA1["Участник P1 (секретный вход x1)"] -->|"Защищенный канал"| TTP["Неподкупная идеальная функциональность F"]
PA2["Участник P2 (секретный вход x2)"] -->|"Защищенный канал"| TTP
PAn["Участник Pn (секретный вход xn)"] -->|"Защищенный канал"| TTP
TTP -->|"Возвращает только y = f(x1,...,xn)"| Out1["Все узнают только выход y (нулевая утечка по определению)"]
Out1 --> Sim["Симулятор S (создает фальшивый лог только по входам скомпрометированных сторон и выходу y)"]
end
subgraph RealWorld["Реальный мир (Real World): криптографический протокол Π"]
direction TB
RB1["Участник P1 (секретный вход x1)"] <-->|"Шифротексты и случайные доли"| RB2["Участник P2 (секретный вход x2)"]
RB2 <-->|"Шифротексты и случайные доли"| RBn["Участник Pn (секретный вход xn)"]
RB1 <-->|"Шифротексты и случайные доли"| RBn
RB2 --> View["Полное представление View_A(x1,...,xn) атакующего A"]
end
Sim <-->|"Неразличимые распределения вероятностей (View_A ≈ Sim)"| View
$$\left\{ \mathcal{S}\left(I, \{x_i\}_{i \in I}, \{y_i\}_{i \in I}\right) \right\} \stackrel{c}{\approx} \left\{ \text{View}_I^\Pi(x_1, \dots, x_n) \right\}$$При этом различают получестных противников (Semi-Honest / Passive), соблюдающих протокол, но анализирующих трафик, и злонамеренных противников (Malicious / Active), активно искажающих сообщения.
3. Двигатель 1: Пороговое разделение секрета $(t, n)$ Шамира, интерполяция Лагранжа и протоколы BGW / SPDZ
3.1 Полиномы над полем $\mathbb{F}_p$ и формула Лагранжа
$$P(x) = s + a_1 x + a_2 x^2 + \dots + a_{t-1} x^{t-1} \pmod p$$$$s = P(0) = \sum_{i \in T} y_i \prod_{j \in T,\, j \ne i} \frac{-x_j}{x_i - x_j} \pmod p$$Для любых $t - 1$ долей каждое возможное значение секрета $s' \in \mathbb{F}_p$ равновероятно ($H(S \mid \text{Shares}_{t-1}) = H(S)$ — безусловная теоретико-информационная стойкость).
3.2 Протокол BGW и мультипликативные тройки Бивера
$$[x \cdot y] = [w] + d \cdot [v] + e \cdot [u] + d \cdot e \pmod p$$4. Двигатель 2: Забывчивая передача ($\text{OT}_1^2$) Рабина и искаженные схемы (Garbled Circuits) Яо
Для побитовых сравнений ($x > y$) булевы схемы позволяют выполнить вычисление за константное число раундов $O(1)$:
flowchart TD
subgraph Step1["1. Алиса (Garbler): шифрование булевой схемы"]
W["Сгенерировать для каждого провода w_i два случайных 128-битных ключа AES (k_i^0, k_i^1)"] --> G["Двойное шифрование всех 4 строк таблицы истинности вентиля: Enc(k_a^α, k_b^β, k_c^g(α,β))"]
G --> P["Случайная перестановка 4 шифротекстов каждого вентиля (Garbled Table)"]
end
subgraph Step2["2. Передача ключей через забывчивую передачу 1-из-2 (OT_1^2)"]
P -->|"Отправить таблицы Garbled + активный ключ Алисы k_a^x"| Eval["Боб (Evaluator)"]
BobIn["Секретный входной бит Боба y ∈ {0,1}"] --> OT["Забывчивая передача 1-из-2 (OT_1^2)"]
W -->|"Пара ключей-кандидатов (k_b^0, k_b^1)"| OT
OT -->|"Боб получает ТОЛЬКО k_b^y (Алиса ничего не узнает о y)"| Eval
end
subgraph Step3["3. Боб (Evaluator): слепое вычисление схемы"]
Eval --> Dec["Расшифровать ровно 1 из 4 строк вентиля ключами (k_a^x, k_b^y) -> выходной ключ k_c^z"]
Dec --> Out["Сопоставить ключ финального выходного провода с ответом z = f(x,y)"]
end
С помощью забывчивой передачи 1-из-2 ($\text{OT}_1^2$) Майкла Рабина Боб получает ключ $k_b^y$ для своего секретного бита $y$, не раскрывая $y$ Алисе. Три современные оптимизации — Point-and-Permute (цветные биты указывают точную строку для расшифровки), Free-XOR ($k_i^1 = k_i^0 \oplus \Delta$ делает все вентили XOR абсолютно бесплатными без шифротекстов и вызовов AES) и Half-Gates (сокращение вентиля AND до 2 шифротекстов) — ускорили искаженные схемы более чем в $1000$ раз.
5. Полная реализация на Python: Разделение секрета Шамира и тройки Бивера над $\mathbb{F}_p$
| |
6. Сравнение технологий защиты приватности (PETs) и реальные внедрения
| Критерий | Многосторонние вычисления (MPC) | Полностью гомоморфное шифрование (FHE) | Доказательства с нулевым разглашением (ZKP) | Доверенная среда исполнения (TEE) |
|---|---|---|---|---|
| Решаемая задача | Совместное вычисление функции $f(x_1, \dots, x_n)$ над секретами разных сторон | Слепые вычисления на одном сервере над шифротекстами $\text{Enc}(x) \mapsto \text{Enc}(f(x))$ | Доказательство истинности $f(x, w)=1$ одним доказывающим, уже знающим $w$ | Аппаратно-изолированное выполнение в открытом виде внутри анклава CPU |
| Узкое место | Очень быстрые операции CPU, но требуется сетевой обмен на каждый слой умножений | Всего 1 раунд связи, но вычисления CPU в $10^3–10^5$ раз медленнее | Мгновенная проверка, тяжелая генерация доказательства (MSM / FFT) | Почти нативная скорость, но ограниченный объем памяти анклава |
| Модель доверия | Отсутствие сговора (менее $t$ серверов в сговоре) | Трудность задач на решетках (RLWE) | Математическая надежность (не объединяет чужие секреты сам по себе) | Доверие производителю чипа (Intel/AMD); уязвимость к атакам по сторонним каналам |
От исторического датского двойного аукциона квот на сахарную свеклу в 2008 году до исследования гендерного разрыва в оплате труда в Бостоне (BWWC), проверки утечек паролей в Google Chrome и Apple iCloud (Private Set Intersection, PSI), межбольничных геномных исследований (Secure GWAS) и институциональных криптокошельков с пороговой подписью MPC (Fireblocks, Coinbase) — MPC заменяет институциональное доверие математической неизбежностью.
