16.2.4 Biztonságos többszereplős számítás

2025.10.06.
AI Biztonság Blog

Képzelj el három, egymással versengő kórházat. Mindegyik rendelkezik értékes, de szigorúan bizalmas betegadatokkal. Szeretnének közösen betanítani egy diagnosztikai modellt, amely mindhárom adathalmazon tanul, de egyik intézmény sem hajlandó felfedni a saját adatait a többiek előtt. Hogyan végezhetnek el egy közös számítást anélkül, hogy megosztanák a bemeneti adatokat? Ez nem egy elméleti fejtörő, hanem a Biztonságos Többszereplős Számítás (Secure Multi-Party Computation, SMPC) alapvető problémája!

A közös számítás művészete titkok felfedése nélkül

A Biztonságos Többszereplős Számítás egy kriptográfiai protokollcsalád, amely lehetővé teszi, hogy több, egymásban nem feltétlenül megbízó fél közösen kiértékeljen egy függvényt a privát bemeneteiken, anélkül, hogy ezeket a bemeneteket felfednék egymás előtt. 

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

Formálisan, ha van `n` fél, mindegyik egy `x_i` privát bemenettel, az SMPC lehetővé teszi számukra, hogy közösen kiszámítsák az `f(x_1, x_2, …, x_n) = y` értéket úgy, hogy minden fél csak a saját `x_i`-jét és a végső `y` eredményt ismeri meg (vagy annak egy részét), de semmi mást nem tud meg a többiek bemeneteiről.

Ez egy lépéssel tovább megy a homomorf titkosításnál. Míg a homomorf titkosításnál egy entitás titkosított adatokon végez számításokat egy másik fél számára, az SMPC egy decentralizált, kollaboratív számítási modellt valósít meg, ahol nincs szükség központi, megbízható harmadik félre.

Az SMPC alapfolyamata

Fél 1 Privát adat: x₁ Fél 2 Privát adat: x₂ Fél 3 Privát adat: x₃ SMPC Protokoll (Interaktív kommunikáció) Eredmény: y mindenki megkapja az eredményt

Hogyan működik a gyakorlatban?

Az SMPC nem egyetlen algoritmus, hanem egy gyűjtőfogalom. 

Két alapvető technika adja a gerincét a legtöbb modern protokollnak:

Titokmegosztás (Secret Sharing)

A Shamir-féle titokmegosztás az egyik leggyakoribb építőkocka. A lényege, hogy egy titkot (`s`) `n` darab „részre” (share) osztunk szét úgy, hogy bármely `k` darab rész birtokában a titok rekonstruálható, de `k-1` vagy kevesebb résszel semmilyen információ nem nyerhető ki róla. 

A felek nem a nyers adataikon, hanem az adatokból generált részeken végeznek számításokat. Mivel egyetlen fél sem rendelkezik elegendő résszel a többiek adatainak rekonstruálásához, az adatok privátak maradnak a számítás során.


# Pszeudokód a titokmegosztás alapelvére
# Figyelem: Ez egy egyszerűsített koncepció, nem kriptográfiailag biztonságos implementáció!

def titok_felosztasa(titok, reszek_szama, kuszob):
 """Feloszt egy titkot 'n' részre, amiből 'k' kell a visszafejtéshez."""
 # Egy k-1 fokú polinomot generálunk, ahol a konstans tag a titok.
 # p(x) = titok + a1*x + a2*x^2 + ... + a(k-1)*x^(k-1)
 polinom_egyutthatok = [titok] + [random.randint(1, 1000) for _ in range(kuszob - 1)]
 
 # A részek a polinom különböző pontjain kiértékelt értékek.
 reszek = []
 for i in range(1, reszek_szama + 1):
 reszek.append((i, evaluate_polynomial(polinom_egyutthatok, i)))
 return reszek

def titok_osszerakasa(reszek):
 """Rekonstruálja a titkot a részekből Lagrange-interpolációval."""
 # A polinomot interpoláljuk a megadott pontokból (részekből).
 # A titok a polinom konstans tagja (p(0)).
 return lagrange_interpolate(reszek, 0)

# Példa: 3 kórház átlagos betegszámot számol
betegszam_1 = 150
betegszam_2 = 200
betegszam_3 = 180

# Mindenki felosztja a saját "titkát" (betegszámát)
reszek_1 = titok_felosztasa(betegszam_1, 3, 3) # (titok, felek száma, küszöb)
reszek_2 = titok_felosztasa(betegszam_2, 3, 3)
reszek_3 = titok_felosztasa(betegszam_3, 3, 3)

# A felek kicserélik a részeket, majd mindenki a saját részeinek összegén dolgozik.
# A részeken végzett összeadás megfelel az eredeti számokon végzett összeadásnak.
# A végeredmény (az összeg) részeit szintén össze tudják rakni.
 

Zavaros Áramkörök (Garbled Circuits)

Ez a technika, különösen a két résztvevős (2PC) esetben népszerű. 

  1. Az egyik fél (a „garbler”) létrehozza egy titkosított, „zavaros” verzióját annak a logikai áramkörnek, ami a kívánt számítást végzi. 
  2. A másik fél (az „evaluator”) ezen a zavaros áramkörön futtatja a saját titkosított bemenetét, megkapva a titkosított kimenetet. 

A folyamat során az evaluator nem tanulja meg az áramkör logikáját, a garbler pedig nem tanulja meg az evaluator bemenetét. Mindketten csak a végeredményt ismerik meg.

SMPC versus Homomorf Titkosítás: Mikor melyiket?

Bár mindkét technológia a privát adatokon végzett számításokat célozza, eltérő forgatókönyvekben jeleskednek. A kettő közötti választás kulcsfontosságú egy robusztus rendszer tervezésekor.

Szempont Biztonságos Többszereplős Számítás (SMPC) Homomorf Titkosítás (HE)
Modell Decentralizált, interaktív. Több fél működik együtt. Centralizált, nem interaktív. Egy kliens kiszervezi a számítást egy szervernek.
Interakció Magas kommunikációs igény. A feleknek folyamatosan kommunikálniuk kell. Alacsony kommunikációs igény. A kliens elküldi a titkosított adatot, a szerver visszaküldi az eredményt.
Számítási teher A teher megoszlik a résztvevők között. A teher szinte teljes egészében a számítást végző szerverre hárul.
Tipikus AI use-case Közös modelltanítás több szervezet privát adatain (pl. Föderált Tanulás biztosítása). „Titkosított predikció” szolgáltatás, ahol a kliens nem fedi fel a bemenetét a modellt futtató szervernek.
Komplexitás A protokollok rendkívül bonyolultak lehetnek, főleg rosszindulatú szereplők ellen. A sémák (pl. FHE) matematikailag összetettek, és a zajkezelés kihívást jelent.

AI Red Teaming szempontok és támadási vektorok

AI Red Teamerként az SMPC-alapú rendszerek vizsgálatakor a fókusz eltolódik a hagyományos adatszivárgásról a protokoll-szintű sebezhetőségek és a meta-információk felé.

  • Félig-őszinte (Semi-Honest) vs. Rosszindulatú (Malicious) modell:
    A legtöbb SMPC protokoll az ún. „félig-őszinte” (vagy „őszinte, de kíváncsi”) fenyegetési modellben bizonyítottan biztonságos. Ez feltételezi, hogy a felek követik a protokollt, de megpróbálnak a kapott köztes üzenetekből információt kinyerni. Az AI Red Team feladata lehet annak tesztelése, mi történik, ha egy fél aktívan szabotálja a protokollt (rosszindulatú modell). Küldhet-e hibás részeket, hogy befolyásolja az eredményt, vagy összeomlassza a számítást?
  • Oldalcsatornás támadások:
    Bár a protokoll matematikailag biztonságos, az implementációja sebezhető lehet. A számítási idő, az energiafogyasztás vagy a hálózati forgalom mintázatai információt szivárogtathatnak a privát bemenetekről. Egy kifinomult támadó ezeket a meta-adatokat elemezheti.
  • Bemeneti és kimeneti adatvédelem:
    Az SMPC magát a számítást védi. Nem véd attól, ha a végeredmény önmagában szivárogtat információt. Például, ha egy közösen tanított modell kimeneteiből tagsági következtetési támadással (membership inference) visszafejthető, hogy egy adott adatpont szerepelt-e a tanító adathalmazban. Ezért az SMPC-t gyakran kombinálják Differenciális Adatvédelemmel.
  • Implementációs hibák: Az SMPC keretrendszerek (pl. PySyft, MP-SPDZ) rendkívül komplexek. Egy hiba a kriptográfiai primitívek implementációjában vagy a protokoll logikájában katasztrofális következményekkel járhat! A forráskód auditálása és a ismert sebezhetőségek keresése kulcsfontosságú.

Összegzés az AI Red Teaming számára

A Biztonságos Többszereplős Számítás erős védekezési réteg, amikor több, egymásban nem bízó félnek kell együttműködnie. 

Megakadályozza a nyers adatok közvetlen megosztását, ezzel eliminálva egy teljes támadási felületet. Azonban nem tökéletes. 

A védelmet a protokoll szintjére helyezi át, ami új, szofisztikáltabb támadási vektorokat nyit meg. 

Az AI Red Teaming  feladata, hogy ne csak az adatokat, hanem magát a számítási folyamatot és annak implementációját is vizsgáljuk, keresve a protokoll megsértésének, a meta-adatok szivárgásának és a komplex rendszerben rejlő logikai hibáknak a lehetőségét.