„Mehrere Universitätskliniken möchten die Genomdaten ihrer Krebspatienten für eine gemeinsame statistische Studie (GWAS) zusammenführen, doch Datenschutzgesetze (DSGVO / HIPAA) verbieten es strikt, auch nur ein einziges Byte an Rohdaten nach außen zu geben.“ „Konkurrierende Geschäftsbanken wollen gemeinsam Geldwäschenetzwerke aufdecken, ohne sich gegenseitig ihre Kundenlisten oder internen Transaktionsgraphen offenzulegen.“
Auf den ersten Blick scheint dies logisch unmöglich zu sein: Um eine Funktion $f(x_1, x_2, \dots, x_n)$ zu berechnen, müsste doch eine vertrauenswürdige dritte Partei (Trusted Third Party, TTP) zunächst alle geheimen Eingaben $x_i$ im Klartext sammeln. Doch Ende der 1980er-Jahre bewies die moderne Kryptographie ein revolutionäres Theorem: Selbst ohne jede vertrauenswürdige Instanz können einander misstrauende Parteien gemeinsam jede berechenbare Funktion $f(x_1, \dots, x_n)$ auswerten, sodass jeder das korrekte Ergebnis erfährt, aber niemand auch nur ein einziges zusätzliches Bit über die geheimen Eingaben $x_i$ der anderen lernt.
Dieses Fachgebiet heißt Secure Multi-Party Computation (MPC, sichere Mehrparteienberechnung). In diesem Artikel entwickeln wir ausgehend von zwei klassischen Gedankenexperimenten die beiden mathematischen Hauptmotoren von MPC: das arithmetische Secret-Sharing-Verfahren nach Adi Shamir (Lagrange-Interpolation, BGW und Beaver-Tripel) sowie den Booleschen Schaltkreis-Ansatz mittels Oblivious Transfer ($\text{OT}_1^2$) und Yaos Garbled Circuits.
1. Zwei paradoxe Gedankenexperimente: „Durchschnittsgehalt ohne Chef“ und „Yaos Millionärsproblem“
1.1 Gedankenexperiment 1: Das Durchschnittsgehalt berechnen, ohne Einzelgehälter zu verraten
Drei Ingenieure $A, B$ und $C$ möchten ihr durchschnittliches Jahresgehalt $\bar{x} = \frac{x_A + x_B + x_C}{3}$ ermitteln, ohne dass jemand das individuelle Gehalt $x_A, x_B$ oder $x_C$ einer anderen Person erfährt. Mit additivem Secret Sharing (One-Time-Pad-Maskierung) gelingt dies allein mit Stift und Papier:
- Zufallsmaske und erstes Flüstern ($A \to B$): Alle einigen sich auf einen großen Modul $M$ (z. B. $M = 10^9$). Ingenieur $A$ wählt geheim eine gleichverteilte Zufallszahl $r \xleftarrow{\$} \mathbb{Z}_M$, addiert sein Gehalt $x_A$ und flüstert nur $s_1 = (x_A + r) \bmod M$ an $B$. Da $r$ gleichverteilt ist, ist auch $s_1$ in $\mathbb{Z}_M$ perfekt gleichverteilt – nach Shannons Theorem über das One-Time Pad beträgt die Transinformation $I(X_A; S_1) = 0$. $B$ lernt exakt null Bits über $x_A$.
- Weitergabe ($B \to C \to A$): $B$ addiert sein Gehalt $x_B$ und flüstert $s_2 = (x_A + x_B + r) \bmod M$ an $C$. $C$ addiert $x_C$ und nennt $s_3 = (x_A + x_B + x_C + r) \bmod M$ zurück an $A$.
- Demaskierung: $A$ subtrahiert seine Zufallszahl $r$, erhält die exakte Summe $S = (s_3 - r) \bmod M = x_A + x_B + x_C$ und verkündet den Durchschnitt $\bar{x} = S / 3$.
[!NOTE] Warum sind mindestens 3 Parteien ($n \ge 3$) nötig? Bei nur zwei Personen ($A$ und $B$) würde selbst ein Engel, der nur den Durchschnitt $\bar{x} = \frac{x_A + x_B}{2}$ verkündet, es $A$ erlauben, sofort $x_B = 2\bar{x} - x_A$ auszurechnen. Das ist kein Fehler des Protokolls, sondern eine Eigenschaft der Funktion selbst. MPC garantiert, dass über das hinaus, was logisch aus der eigenen Eingabe und dem Endergebnis folgt, während der Berechnung null Bits durchsickern.
1.2 Gedankenexperiment 2: Andrew Yaos „Millionärsproblem“ (1982)
Addition ist linear; doch was ist mit einem nichtlinearen Größenvergleich? 1982 formulierte der spätere Turing-Preisträger Andrew Chi-Chih Yao in seiner Arbeit “Protocols for Secure Computations” das berühmte Millionärsproblem: Alice ($x$ Millionen Dollar) und Bob ($y$ Millionen Dollar) wollen ohne Dritte lediglich das einzelne Wahrheitsbit $f(x, y) = [x > y] \in \{0, 1\}$ bestimmen, ohne den genauen Betrag oder auch nur die Differenz $x - y$ preiszugeben.
2. Mathematische Sicherheitsdefinition: Das Ideal/Real-Simulationsparadigma
Um Sicherheit mathematisch rigoros zu fassen, führten Goldreich, Micali und Wigderson (GMW 1987) das Ideal/Real-Simulationsparadigma ein:
flowchart TD
subgraph IdealWorld["Ideale Welt (Ideal World): Absoluter Referenzstandard"]
direction TB
PA1["Partei P1 (Geheimeingabe x1)"] -->|"Sicherer Kanal"| TTP["Unbestechliche Ideale Funktionalität F"]
PA2["Partei P2 (Geheimeingabe x2)"] -->|"Sicherer Kanal"| TTP
PAn["Partei Pn (Geheimeingabe xn)"] -->|"Sicherer Kanal"| TTP
TTP -->|"Liefert nur y = f(x1,...,xn)"| Out1["Alle lernen nur y (Null Informationsleck per Definition)"]
Out1 --> Sim["Simulator S (Erzeugt künstliches Transkript nur aus korrumpierten Eingaben & y)"]
end
subgraph RealWorld["Reale Welt (Real World): Kryptographisches Protokoll Π"]
direction TB
RB1["Partei P1 (Geheimeingabe x1)"] <-->|"Chiffretexte & Zufalls-Shares"| RB2["Partei P2 (Geheimeimeingabe x2)"]
RB2 <-->|"Chiffretexte & Zufalls-Shares"| RBn["Partei Pn (Geheimeingabe xn)"]
RB1 <-->|"Chiffretexte & Zufalls-Shares"| RBn
RB2 --> View["Gesamtsicht View_A(x1,...,xn) des Angreifers A"]
end
Sim <-->|"Ununterscheidbare Wahrscheinlichkeitsverteilungen (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\}$$Man unterscheidet dabei zwischen semi-ehrlichen Angreifern (Semi-Honest / Passive), die dem Protokoll folgen, aber alle Nachrichten analysieren, und bösartigen Angreifern (Malicious / Active), die aktiv Nachrichten verfälschen.
3. Motor 1: Shamirs $(t, n)$-Secret-Sharing, Lagrange-Interpolation und BGW / SPDZ
3.1 Polynom-Sharing über $\mathbb{F}_p$ und Lagrange-Rekonstruktion
$$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$$Für $t - 1$ oder weniger Parteien ist jedes $s' \in \mathbb{F}_p$ exakt gleich wahrscheinlich ($H(S \mid \text{Shares}_{t-1}) = H(S)$ – perfekte informationstheoretische Sicherheit).
3.2 BGW-Protokoll und Beavers Multiplikationstripel
$$[x \cdot y] = [w] + d \cdot [v] + e \cdot [u] + d \cdot e \pmod p$$4. Motor 2: Oblivious Transfer ($\text{OT}_1^2$) und Yaos Garbled Circuits
Für bitweise Vergleiche ($x > y$) nutzt MPC Boolesche Schaltkreise in konstanter Rundenzahl $O(1)$:
flowchart TD
subgraph Step1["1. Alice (Garbler): Verschlüsselung des Schaltkreises"]
W["Generiere für jede Leitung w_i zwei zufällige 128-Bit-AES-Schlüssel (k_i^0, k_i^1)"] --> G["Doppelverschlüsselung aller 4 Wahrheitstabellen-Zeilen: Enc(k_a^α, k_b^β, k_c^g(α,β))"]
G --> P["Zufällige Permutation der 4 Chiffretexte pro Gatter (Garbled Table)"]
end
subgraph Step2["2. Schlüsselübertragung via 1-out-of-2 Oblivious Transfer"]
P -->|"Sende Garbled Tables + Alices aktiven Eingabeschlüssel k_a^x"| Eval["Bob (Evaluator)"]
BobIn["Bobs geheimes Eingabebit y ∈ {0,1}"] --> OT["1-out-of-2 Oblivious Transfer (OT_1^2)"]
W -->|"Schlüsselpaar (k_b^0, k_b^1)"| OT
OT -->|"Bob erhält NUR k_b^y (Alice erfährt nichts über y)"| Eval
end
subgraph Step3["3. Bob (Evaluator): Blinde Auswertung"]
Eval --> Dec["Entschlüssele mit (k_a^x, k_b^y) exakt 1 der 4 Zeilen pro Gatter -> Ausgabeschlüssel k_c^z"]
Dec --> Out["Übersetze finalen Ausgabeschlüssel in das Klartextergebnis z = f(x,y)"]
end
Mittels Michael Rabins 1-out-of-2 Oblivious Transfer ($\text{OT}_1^2$) erhält Bob genau den Schlüssel $k_b^y$ für sein geheimes Bit $y \in \{0, 1\}$, ohne dass Alice $y$ erfährt. Durch die modernen Optimierungen Point-and-Permute (Farbbits zeigen direkt auf die einzige zu entschlüsselnde Zeile), Free-XOR ($k_i^1 = k_i^0 \oplus \Delta$ macht alle XOR-Gatter komplett chiffren- und rechenfrei) und Half-Gates (nur 2 Chiffretexte pro AND-Gatter) wurden Garbled Circuits um den Faktor $1000$ beschleunigt.
5. Vollständige Python-Implementierung: Shamir Secret Sharing & Beaver-Tripel über $\mathbb{F}_p$
| |
6. Vergleich der Privacy-Enhancing Technologies (PETs) und reale Anwendungen
| Kriterium | Secure Multi-Party Computation (MPC) | Volle Homomorphe Verschlüsselung (FHE) | Zero-Knowledge-Beweise (ZKP) | Trusted Execution Environment (TEE) |
|---|---|---|---|---|
| Kernproblem | Gemeinsame Berechnung über verteilte Geheimeingaben $x_1, \dots, x_n$ | Blinde Cloud-Berechnung auf Chiffretexten $\text{Enc}(x) \mapsto \text{Enc}(f(x))$ | Verifikation einer Aussage $f(x, w)=1$ durch einen Beweiser, der $w$ bereits kennt | Hardware-isolierte Ausführung im Klartext innerhalb einer CPU-Enklave |
| Hauptengpass | Extrem schnelle CPU-Operationen, aber Netzwerkkommunikation pro Multiplikationsschicht | Nur 1 Nachrichtenrunde, aber CPU-Rechenzeit $10^3$- bis $10^5$-mal langsamer | Schnelle Verifikation, hoher Rechenaufwand beim Beweiser (MSM / FFT) | Nahezu native Geschwindigkeit, aber begrenzte Enklaven-Speichergröße |
| Vertrauensmodell | Nicht-Kollusions-Annahme (weniger als $t$ Server kolludieren) | Kryptographische Gitterannahmen (RLWE) | Mathematische Soundness (kombiniert allein keine fremden Geheimnisse) | Vertrauen in Chip-Hersteller (Intel/AMD); anfällig für Seitenkanalangriffe |
Von der historischen dänischen Zuckerrüben-Doppelauktion 2008 über die Gehaltslücken-Studie der Stadt Boston (BWWC), den Passwort-Leck-Check in Google Chrome und Apple iCloud (Private Set Intersection, PSI) und klinische Genomstudien (Secure GWAS) bis hin zu MPC-Threshold-Krypto-Wallets (Fireblocks, Coinbase) ersetzt MPC heute blindes Vertrauen durch mathematische Gewissheit.
