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?
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”.
- 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.
- 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.
- 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, δ).
- 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.
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.
- A vizsgált szöveget tokenekre bontják.
- 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”.
- Megszámolják, hogy a szövegben hány token esik a saját pozíciójához tartozó „zöld listára”.
- 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.