
Reverse Engineering von SynthID für Text
Dieses Verzeichnis enthält Werkzeuge zur Analyse und Entfernung von SynthID-Wasserzeichen aus KI-generiertem Text. Das Wasserzeichen wurde von Google DeepMind entwickelt und 2024 in Nature veröffentlicht.
N-Gramm-Kontext: Für jede Token-Position betrachtet SynthID die vorherigen ngram_len - 1 Tokens (Standard: 4 Tokens) als Kontext.
Hash-Berechnung: Es berechnet einen Hash aus:
G-Wert-Zuweisung: Der Hash wird verwendet, um jedem möglichen nächsten Token für jede Schlüsselebene einen binären G-Wert (0 oder 1) zuzuweisen.
Wahrscheinlichkeitsänderung: Die Token-Wahrscheinlichkeiten werden so geändert, dass Tokens mit G-Wert = 1 bevorzugt werden:
new_prob[i] = prob[i] * (1 + g[i] - mean(g * prob))
Stichprobenziehung: Das Modell zieht Stichproben aus der geänderten Verteilung.
Wirksamkeit: 90–100 %
Das Wasserzeichen ist in der spezifischen Token-Sequenz eingebettet, nicht in der Bedeutung. Durch Paraphrasierung mit einem nicht-wasserzeichenbehafteten Modell wird die Token-Sequenz vollständig neu generiert.
from reverse_synthid import ParaphrasingAttack
attack = ParaphrasingAttack(model_name="gpt2")
clean_text = attack.paraphrase(watermarked_text)
Wirksamkeit: 50–70 %
Das Ersetzen von Tokens durch Synonyme durchbricht die N-Gramm-Muster:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.substitute_synonyms(text, rate=0.3)
Wirksamkeit: 95–100 %
Das Ersetzen von Zeichen durch visuell identische Unicode-Zeichen durchbricht den Hash:
from reverse_synthid import HomoglyphAttack
attack = HomoglyphAttack()
clean_text = attack.apply_homoglyphs(text, rate=0.1)
Wirksamkeit: 30–50 %
Das Einfügen oder Entfernen von Wörtern verschiebt alle nachfolgenden N-Gramm-Grenzen:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.insert_fillers(text, rate=0.1)
reverse_synthid.py - Haupt-Angriffswerkzeug mit mehreren Methodenanalyze_watermark.py - Werkzeug zur Erkennung und Analyse von Wasserzeichentest_removal.py - Testskript zur Demonstration der Wasserzeichenentfernungpython analyze_watermark.py --input text.txt --verbose
# Using paraphrasing (most effective, requires model)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method paraphrase
# Using perturbation (no model needed)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method perturb
# Using combined attack
python reverse_synthid.py --input text.txt --output clean.txt --method combined
python analysis/test_removal.py
Das Wasserzeichen basiert auf:
Wenn Sie Text paraphrasieren:
Für einen Text der Länge N mit Wasserzeichenstärke W:
1 - (1-r)^(ngram_len)N*r N-Gramm-GrenzenDieser Code dient ausschließlich zu Bildungs- und Forschungszwecken. Er demonstriert Schwachstellen in Wasserzeichenverfahren, um die Entwicklung robusterer Methoden zu unterstützen.