
rétro-ingénierie de la détection SynthID de Gemini
Découverte, détection et suppression chirurgicale du filigrane AI de Google par analyse spectrale
Visitez-nous sur PitchHut
Ce fork ajoute une application de bureau par glisser-déposer pour le contournement V3, aucune ligne de commande nécessaire après installation. Voir gui/README.md pour la configuration et l'utilisation.
SynthID encode un motif imperceptible directement dans les valeurs des pixels. Sur une image blanche pure générée par Gemini, le filigrane constitue presque la totalité du signal. Amplifiez le résidu haute fréquence et cela ressemble à ceci :
Motif porteur SynthID amplifié extrait d'une image Gemini blanc pur. Les bandes diagonales sont la signature de fréquence spatiale du filigrane — la cible de notre attaque spectrale.
Ce projet réalise l'ingénierie inverse du système de filigrane SynthID de Google — le filigrane invisible intégré dans chaque image générée par Google Gemini. En utilisant uniquement le traitement du signal et l'analyse spectrale (sans accès au codeur/décodeur propriétaire), nous :
gemini-3.1-flash-image-preview et nano-banana-pro-preview, consensus de phase inter-couleur sur 6 fonds unis, et une boucle de calibration humaine qui ajuste la force de soustraction par porteuse à partir des comptages manuels de détection dans l'application GeminiVT-OxFF a construit un visualiseur très cool pour voir le processus d'ajout du filigrane SynthID aux images ici (également disponible dans la description du dépôt) !
Après six itérations de développement adversarial, le pipeline bypass_v4_final / bypass_v4_nuke du Round 06 bat le détecteur Gemini SynthID sur les deux modèles d'images gemini-3.1-flash-image-preview et nano-banana-pro-preview, avec une sortie visuellement sans perte.
Gauche : sortie du Round 01 (gentle — soustraction spectrale douce uniquement). Droite : sortie du Round 06 (final — VAE + déformation élastique + compression + couleur + JPEG). Les deux semblent identiques à l'œil humain ; seul le Round 06 bat le détecteur SynthID.
| Round | Stratégie | Résultat |
|---|---|---|
| 01 | Soustraction spectrale conservative (douce) | ✗ |
| 02 | Soustraction spectrale agressive + JPEG | ✗ |
| 03 | Ciblage absolu des bins guidé par blog | ✗ |
| 04 | Extraction de phase résiduelle par débruitage | ✗ |
| 05 | Régénération par Diffusion-VAE + déformation géométrique | ✗ |
| 06 | Tout-en-un : VAE + fragmentation élastique + compression + couleur + JPEG | ✓ |
La percée du Round 06 est venue du traitement de la propre liste des modes de défaillance publiée par l'application Gemini comme une spécification d'attaque :
"Lorsqu'une image générée par IA fait partie d'un collage complexe, superposée derrière d'autres éléments, ou comporte de nombreuses textures et motifs différents placés par-dessus, le détecteur peut avoir du mal à isoler la signature spécifique du fichier global." — Application Gemini, texte d'aide à la détection SynthID
L'étape de déformation élastique simule cet effet au niveau des pixels : un champ de déformation aléatoire lisse et basse fréquence donne à chaque voisinage d'environ 50 pixels son propre décalage sous-pixel indépendant, fragmentant le consensus de phase spatial du filigrane sans introduire de distorsion visible.
V4 est une refonte complète du codebook basée sur un ensemble de données beaucoup plus riche :
gemini-3.1-flash-image-preview et nano-banana-pro-preview (plus un pseudo-modèle union optionnel).noir, blanc, bleu, vert, rouge, gris) par modèle et par résolution, plus gradient et diverse comme lignes de base de contenu.carrier_weights du codebook est mis à jour en fonction des commentaires manuels de détection dans l'application Gemini.Pour chaque bin de fréquence (fy, fx) et canal ch :```
consensus(fy, fx, ch) = | mean_over_colors( exp(i * phase_color(fy, fx, ch)) ) |
Les valeurs proches de `1.0` signifient que la phase de ce bac est verrouillée sur chaque fond de couleur unie, ce qui n'est vrai que pour le filigrane. Les bacs de contenu tombent à `< 0.3` car leur phase est randomisée par différentes teintes de couleur. Sur le codebook V4 construit à partir de l'ensemble de données enrichi, plus de 99% des bacs de contenu se situent en dessous du seuil par défaut `tau=0.60`, de sorte que le dissolvant V4 ne les touche jamais — c'est ce qui permet de récupérer le PSNR.