
Toolkit per la robustezza dei watermark AI, solo a scopo di ricerca: un reverse proxy locale rimuove C2PA/EXIF/XMP, Unicode, steganografia di immagini/audio, metadati OOXML/PDF e analizza Trojan Source.
Middleware universale per la provenienza AI e la sanificazione dei watermark Artefatto di ricerca — solo per la valutazione della robustezza del watermarking.
NullOrigin è un artefatto di ricerca. Viene pubblicato per supportare lo studio accademico e indipendente della robustezza del watermarking, e per nessun altro scopo.
Gli schemi di watermarking sono affermazioni di sicurezza, e le affermazioni di sicurezza sono significative solo dopo che qualcuno ha provato a romperle. La letteratura che questo progetto implementa — Kirchenbauer et al. su KGW, Krishna et al. sugli attacchi di parafrasi, Boucher & Anderson su Trojan Source — esiste perché i ricercatori hanno pubblicato attacchi funzionanti affinché i difensori potessero misurare la robustezza reale invece di assumerla. È questa la tradizione a cui appartiene questo repository.
Usi previsti
Non previsto e non supportato
Nulla di quanto scritto qui è un controllo tecnico su come il codice viene eseguito. È una dichiarazione dei termini con cui viene offerto e di ciò che il suo autore supporterà o meno. Il software è fornito "AS IS", senza garanzie di alcun tipo — vedi LICENSE.
Leggi Scopo e limiti onesti prima di trarre qualsiasi conclusione da un numero stampato da questo strumento. Diversi degli schemi presi di mira non possono essere verificati con un rilevatore pubblico, e il README lo dice esplicitamente piuttosto che suggerire il contrario.
Leggi questo prima di trarre conclusioni da qualsiasi numero stampato da questo strumento.
| Livello | Cosa fa realmente |
|---|---|
| Caratteri invisibili | Pienamente efficace. I payload con larghezza zero, controllo bidi, selettori di variante e blocco Unicode Tags vengono rimossi completamente, con un conteggio riportato. I confondibili omoglifi tra scritture diverse (cirillico/greco resi come ASCII) vengono normalizzati. |
| Metadati del documento (.docx) | Pienamente efficace. Autore, ultimo editor, numero di revisioni, timestamp, modello e versione dell'applicazione vengono cancellati da docProps, con la formattazione preservata byte per byte. |
| C2PA / EXIF / XMP | Pienamente efficace. L'immagine viene ricostruita da campioni di pixel grezzi in un contenitore nuovo, quindi i manifest JUMBF firmati e tutti i metadati spariscono. Verificato tramite test su fixture etichettati. |
| Watermark statistico KGW | Dipende interamente dal backend di riscrittura. Senza un modello locale configurato, il watermark statistico sopravvive — lo strumento lo dice esplicitamente piuttosto che suggerire il contrario. |
| SynthID-Text / SynthID-Image / Tree-Ring | Non verificabile qui. Questi usano chiavi private e decoder proprietari. NullOrigin applica le perturbazioni descritte dalla letteratura, ma non viene fatta alcuna affermazione che sconfiggano i rilevatori reali, perché non esiste un rilevatore pubblico con cui misurarli. |
| AudioSeal / SynthID-Audio | Non verificabile qui, per lo stesso motivo. |
KGWStatisticalDetector è un'implementazione matematicamente fedele e autoconsistente
dello schema green/red-list di Kirchenbauer et al. sui token di spazio bianco. Non è un
decoder per il watermark di produzione di alcun fornitore — questi si basano su un segreto privato e
il vocabolario BPE del modello stesso.
Il suo scopo è rendere il benchmark reale: KGWWatermarkEmbedder inserisce un watermark
genuino, la pipeline lo attacca e il rilevatore corrispondente misura la riduzione
effettiva. Questa è una misurazione vera dell'attacco contro questo schema. Non si
trasferisce al watermark di un fornitore.
Il vocabolario $V$ viene partizionato a ogni passo $t$ da un hash inizializzato sul contesto precedente:
$$s_t = \text{Hash}(w_{t-k}, \dots, w_{t-1})$$
in una lista verde $G_t$ di dimensione $\gamma|V|$ e una lista rossa $R_t$. Un bias $\delta > 0$ viene aggiunto ai logit verdi:
$$\tilde{l}{t,v} = \begin{cases} l{t,v} + \delta, & v \in G_t \\ l_{t,v}, & v \in R_t \end{cases}$$
La rilevazione conta i successi verdi. Sotto $H_0$ sono $\text{Binomial}(T, \gamma)$, quindi:
$$z = \frac{|S_G| - \gamma T}{\sqrt{T\gamma(1-\gamma)}}$$
con $z > 4.0$ ($p < 3\times10^{-5}$) segnalato come sintetico.
Perché la parafrasi lo attacca: il watermark vive interamente nelle transizioni n-gram locali. Riscrivere la forma superficiale con un modello non marcato re-inizializza ogni posizione. Questo è l'attacco di robustezza standard nella letteratura sul watermarking.
Perché la lunghezza è importante: $z$ cresce come $\sqrt{T}$. Un passaggio di 100 token a una frazione verde di 0,70 raggiunge solo $z \approx 3,9$ — sotto la soglia. La rilevazione richiede qualche centinaio di token, e così anche i fixture di benchmark significativi.
APP11, chunk PNG tEXt/iTXt,
o box c2pa WebP/AVIF. Poiché la firma copre i dati dei pixel, la ricodifica
da un buffer di campioni nudo lo rimuove senza dover analizzare affatto JUMBF.