33.4.1. MI-észlelést segítő vízjelek

2025.10.06.
AI Biztonság Blog

Mielőtt a digitális szövegek elárasztották volna a világot, egy dokumentum eredetiségének egyik legfontosabb bizonyítéka a papírba ágyazott vízjel volt. Ez a rejtett, mégis ellenőrizhető jelzés megkülönböztette a valódi bankjegyet a hamisítványtól, a hivatalos okiratot a másolattól. A generatív MI-k korában ugyanez a kihívás merül fel, csak éppen bitek és bájtok szintjén: hogyan ágyazhatunk el egy észrevehetetlen, mégis statisztikailag szignifikáns jelet egy MI által generált szövegbe?

Kapcsolati űrlap

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

A gépi tanulásban alkalmazott vízjelezés (watermarking) erre a kérdésre ad választ. A cél nem egy látható logó elhelyezése, hanem a modell kimenetének finom, de matematikailag igazolható módosítása a generálás pillanatában. Ez a beavatkozás olyan statisztikai anomáliát hoz létre a szövegben, amely emberi szem számára láthatatlan, de egy megfelelő algoritmussal és a titkos kulccsal könnyedén detektálható.

A vízjelezés mechanizmusa

A legtöbb modern vízjelezési technika a nagy nyelvi modellek (LLM-ek) token-kiválasztási folyamatába avatkozik be. Normál esetben a modell minden egyes lépésben kiszámítja a lehetséges következő tokenek (szavak, szótagok) valószínűségi eloszlását. A vízjelezés ezt az eloszlást torzítja el egy előre meghatározott séma szerint.

A „zöld lista” módszer

Az egyik legelterjedtebb megközelítés egy titkos kulcs segítségével a szókészletet dinamikusan két részre osztja: egy „zöld listára” és egy „piros listára”.

  1. Előkontextus hash-elése: A rendszer veszi az előző egy vagy több tokent, és egy titkos kulccsal együtt egy kriptográfiai hash függvényen futtatja keresztül.
  2. Listák generálása: A hash kimenete alapján a lehetséges következő tokenek egy részét a „zöld listára” (preferált tokenek), a többit pedig a „piros listára” (nem preferált tokenek) helyezi. Ez a felosztás minden egyes generált token után újra megtörténik, így a listák folyamatosan változnak.
  3. Logit-módosítás: A modell generálási folyamatában, a token kiválasztása előtti utolsó lépésben a „zöld listán” szereplő tokenek valószínűségi súlyát (logitját) enyhén megnöveli egy fix értékkel (delta, δ).
  4. Mintavételezés: A modell a módosított valószínűségi eloszlásból választja ki a következő tokent.

Ennek eredményeképpen a generált szövegben statisztikailag szignifikánsan több „zöld listás” token fog szerepelni, mint ami a véletlen alapján várható lenne. A minőségromlás minimális, mivel a modell továbbra is a legvalószínűbb szavak közül választ, csupán egy finom „lökést” ad a vízjellel megjelölt opcióknak.

Előző token(ek) Hash(kulcs, előző_token) Zöld Lista Piros Lista Módosított Valószínűségek

A vízjelezési folyamat: Az előző tokenből és egy titkos kulcsból képzett hash határozza meg a preferált (zöld) és nem preferált (piros) tokenek listáját, ami módosítja a következő token kiválasztásának valószínűségeit.

A vízjel észlelése

Az ellenőrzés a generálási folyamat logikáját fordítja meg. Az ellenőrző félnek szüksége van a titkos kulcsra.

  1. A vizsgált szöveget tokenekre bontják.
  2. Minden egyes token esetében, az azt megelőző token(ek) és a titkos kulcs segítségével legenerálják az adott pozícióhoz tartozó „zöld listát”.
  3. Megszámolják, hogy a szövegben hány token esik a saját pozíciójához tartozó „zöld listára”.
  4. Ezt a számot összevetik azzal az értékkel, ami egy véletlenszerű (vízjel nélküli) szövegben várható lenne. Ha a „zöld” tokenek aránya szignifikánsan magasabb, a szöveg nagy valószínűséggel vízjellel ellátott, azaz MI által generált. A statisztikai szignifikancia mérésére gyakran a z-score (z-érték) mutatót használják.

A Red Teamer nézőpontja: Erősségek és sebezhetőségek

Red teamerként a feladatunk nemcsak a védelmi mechanizmusok megértése, hanem azok korlátainak és kijátszási lehetőségeinek feltérképezése is. A vízjelezés sem kivétel.

Erősségek

  • Robusztusság: Az egyszerű átfogalmazás, szinonimák cseréje vagy mondatok átrendezése ellen többnyire ellenálló, mivel a statisztikai jel a szöveg mélyebb szerkezetében van elrejtve.
  • Bizonyíthatóság: Erős statisztikai alapot nyújt az eredet igazolására. Egy magas z-érték rendkívül alacsony hamis pozitív arányt jelent.
  • Minőségmegőrzés: Jól kalibrálva (alacsony δ értékkel) a generált szöveg minőségét, koherenciáját és kreativitását érdemben nem befolyásolja.
  • Szolgáltatói kontroll: A modellt fejlesztő cég kezében van a kulcs, így ők tudják hitelesen igazolni vagy cáfolni egy adott szöveg eredetét.

Támadási Vektorok és Korlátok

  • Kulcsfüggőség: A legfőbb korlát. A titkos kulcs nélkül a vízjel észlelése gyakorlatilag lehetetlen. Ez a publikus ellenőrizhetőséget akadályozza.
  • Paraphrasing Attack (Átfogalmazási Támadás): Egy másik, vízjel nélküli MI-modell használata a szöveg mélyreható átírására képes eltávolítani a statisztikai jelet.
  • „Hígításos” támadás: Ember által írt vagy más forrásból származó szövegrészek beillesztése a vízjellel ellátott tartalomba csökkenti a „zöld” tokenek arányát, ami az észlelési küszöb alá viheti a jelet.
  • API-alapú visszafejtés: Bár nehézkes, egy támadó célzott, rövid lekérdezésekkel (pl. egyetlen token kiegészítését kérve) és a kapott válaszok elemzésével megpróbálhatja feltérképezni a „zöld” és „piros” listák mintázatait.
  • Implementáció hiánya: A vízjelezés csak akkor működik, ha a modellszolgáltató beépítette. Az nyílt forráskódú, lokálisan futtatott modellek esetében ez nem garantált.
# Pszeudokód a vízjelezés logikájának szemléltetésére

függvény generálj_vízjellel(kontextus, titkos_kulcs, delta):
 # 1. Számítsd ki a következő token valószínűségeit
 logitek = modell.következő_token_logitek(kontextus)
 
 # 2. Hozz létre egy hash-t az előző tokenből
 utolsó_token_hash = hash(kontextus.utolsó_token() + titkos_kulcs)
 
 # 3. Határozd meg a zöld listát a hash alapján
 zöld_lista_indexek = get_zöld_lista(utolsó_token_hash, szótár_méret)
 
 # 4. Növeld meg a zöld listás tokenek logitjait
 for index in zöld_lista_indexek:
 logitek[index] += delta
 
 # 5. Válassz tokent a módosított eloszlásból
 következő_token = mintavételez(logitek)
 return következő_token

függvény észlelj_vízjelet(szöveg, titkos_kulcs):
 tokenek = tokenizál(szöveg)
 zöld_token_számláló = 0
 
 for i in range(1, len(tokenek)):
 előző_token = tokenek[i-1]
 aktuális_token = tokenek[i]
 
 # Generáld újra a zöld listát az adott pozícióra
 utolsó_token_hash = hash(előző_token + titkos_kulcs)
 zöld_lista_indexek = get_zöld_lista(utolsó_token_hash, szótár_méret)
 
 # Ellenőrizd, hogy az aktuális token a zöld listán van-e
 if aktuális_token.index in zöld_lista_indexek:
 zöld_token_számláló += 1
 
 # 6. Statisztikai elemzés (pl. z-score számítás)
 z_score = számolj_z_score(zöld_token_számláló, len(tokenek), zöld_lista_aránya)
 
 if z_score > küszöbérték:
 return "Vízjel észlelve"
 else:
 return "Nincs vízjel"

Összességében a vízjelezés egy ígéretes, de nem tévedhetetlen technológia. Nem csodaszer, ami önmagában megoldja a dezinformáció vagy a gépi tartalom azonosításának problémáját. Sokkal inkább egy fontos réteg a „defense-in-depth” stratégiában, amely más módszerekkel – mint a stilometriai elemzés vagy a metaadatok vizsgálata – kiegészülve jelentősen megnehezítheti a rosszindulatú szereplők dolgát.