
Boîte à outils de robustesse des filigranes IA à usage exclusivement de recherche : un proxy inverse local supprime C2PA/EXIF/XMP, Unicode, la stéganographie image/audio et les métadonnées OOXML/PDF, et détecte Trojan Source.
Middleware universel de provenance IA et de neutralisation de filigranes Artéfact de recherche — uniquement pour l'évaluation de la robustesse des filigranes.
NullOrigin est un artéfact de recherche. Il est publié pour soutenir l'étude académique et indépendante de la robustesse des filigranes, et pour aucune autre fin.
Les filigranes sont des assertions de sécurité, et ces assertions ne prennent de sens que lorsque quelqu'un a tenté de les briser. La littérature que ce projet implémente — Kirchenbauer et al. sur KGW, Krishna et al. sur les attaques par paraphrase, Boucher & Anderson sur Trojan Source — existe parce que les chercheurs ont publié des attaques fonctionnelles afin que les défenseurs puissent mesurer une robustesse réelle plutôt que de la supposer. C'est la tradition à laquelle appartient ce dépôt.
Usages prévus
Non prévu, et non pris en charge
Rien ici n'est un contrôle technique sur la manière dont le code s'exécute. C'est une déclaration des conditions auxquelles il est fourni, et de ce que son auteur soutiendra ou non. Le logiciel est fourni « EN L'ÉTAT », sans garantie d'aucune sorte — voir LICENSE.
Lisez Portée et limites honnêtes avant de tirer une conclusion à partir d'un nombre affiché par cet outil. Plusieurs des mécanismes qu'il cible ne peuvent pas être vérifiés auprès d'un détecteur public, et le README le dit plutôt que de laisser entendre le contraire.
Lisez ceci avant de tirer des conclusions à partir d'un nombre affiché par cet outil.
| Couche | Ce qu'elle fait réellement |
|---|---|
| Caractères invisibles | Totalement efficace. Les charges utiles à largeur nulle, de contrôle bidi, de sélecteur de variante et du bloc Unicode Tags sont entièrement supprimées, avec un décompte indiqué. Les confusables homoglyphes inter-scriptes (cyrillique/grec rendus en ASCII) sont repliés. |
| Métadonnées de document (.docx) | Totalement efficace. L'auteur, le dernier éditeur, le nombre de révisions, les horodatages, le modèle et la version de l'application sont effacés de docProps, avec mise en forme préservée octet par octet. |
| C2PA / EXIF / XMP | Totalement efficace. L'image est reconstruite à partir des échantillons bruts de pixels dans un nouveau conteneur, de sorte que les manifestes JUMBF signés et toutes les métadonnées disparaissent. Vérifié par des tests sur des maquettes étiquetées. |
| Filigrane statistique KGW | Dépend entièrement du backend de réécriture. Sans modèle local configuré, le filigrane statistique survit — l'outil le dit plutôt que de laisser entendre le contraire. |
| SynthID-Text / SynthID-Image / Tree-Ring | Non vérifiable ici. Ces mécanismes utilisent des clés privées et des décodeurs propriétaires. NullOrigin applique les perturbations décrites dans la littérature, mais aucune affirmation n'est faite selon laquelle elles neutralisent les véritables détecteurs, car il n'existe aucun détecteur public pour effectuer une mesure. |
| AudioSeal / SynthID-Audio | Non vérifiable ici, pour la même raison. |
KGWStatisticalDetector est une implémentation mathématiquement fidèle et cohérente du
mécanisme de liste verte/rouge de Kirchenbauer et al. sur les jetons d'espacement. Ce n'est pas un
décodeur pour le filigrane de production d'un fournisseur — ceux-ci reposent sur un secret privé et sur
le vocabulaire BPE propre au modèle.
Son objectif est de rendre l'analyse comparative réelle : KGWWatermarkEmbedder insère un véritable
filigrane, le pipeline l'attaque, et le détecteur correspondant mesure la réduction effective. C'est une
mesure réelle de l'attaque contre ce mécanisme. Elle ne se transpose pas au filigrane d'un fournisseur.
Le vocabulaire $V$ est partitionné à chaque étape $t$ par un hachage initialisé sur le contexte précédent :
$$s_t = \text{Hash}(w_{t-k}, \dots, w_{t-1})$$
en une liste verte $G_t$ de taille $\gamma|V|$ et une liste rouge $R_t$. Un biais $\delta > 0$ est ajouté aux logits verts :
$$\tilde{l}{t,v} = \begin{cases} l{t,v} + \delta, & v \in G_t \\ l_{t,v}, & v \in R_t \end{cases}$$
La détection compte les occurrences vertes. Sous $H_0$, elles suivent une $\text{Binomiale}(T, \gamma)$, donc :
$$z = \frac{|S_G| - \gamma T}{\sqrt{T\gamma(1-\gamma)}}$$
avec $z > 4.0$ ($p < 3\times10^{-5}$) signalé comme synthétique.
Pourquoi la paraphrase l'attaque : le filigrane réside entièrement dans les transitions locales de n-grammes. Réécrire la forme de surface avec un modèle non filigrané réinitialise chaque position. C'est l'attaque de robustesse standard dans la littérature sur les filigranes.
Pourquoi la longueur compte : $z$ croît comme $\sqrt{T}$. Un passage de 100 jetons avec une fraction verte de 0.70 n'atteint que $z \approx 3.9$ — sous le seuil. La détection nécessite quelques centaines de jetons, tout comme des maquettes d'analyse comparative pertinentes.