Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
reverse-SynthID — обратная разработка обнаружения SynthID от Gemini | Kitploit
Инструменты/GitHubGitHub/aloshdenny/reverse-synthid
Обратная инженерияСтеганографияЦифровая криминалистикаМашинное ОбучениеСтатьи и ИсследованияОбучение и ОбразованиеПодобранные РесурсыБезопасность ИИСостязательная Атака
GitHubaloshdenny/reverse-synthid

reverse-SynthID

обратная разработка обнаружения SynthID от Gemini

4.7k499282 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
РепозиторийСайт
Поделиться
<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/11393/e3290ff4d3e6074647026feb3327c04ff98514547efca925f52d6d1349c23477.png" alt="Анализ водяного знака SynthID" width="100%">
</p>

<h1 align="center">Обратная разработка SynthID</h1>

<p align="center">
  <b>Обнаружение, выявление и хирургическое удаление ИИ-водяного знака Google с помощью спектрального анализа</b>
</p>

Посетите нас на [PitchHut](https://www.pitchhut.com/project/reverse-synthid-engineering)

> Этот форк добавляет десктопное приложение с функцией drag-and-drop для обхода V3, после настройки командная строка не требуется. См. [gui/README.md](https://github.com/aloshdenny/reverse-synthid/blob/main/gui/README.md) по установке и использованию.

<p align="center">
  <img src="https://img.shields.io/badge/Python-3.10+-blue?style=flat-square&amp;logo=python" alt="Python">
  <img src="https://img.shields.io/badge/License-Research-green?style=flat-square" alt="License">
  <img src="https://img.shields.io/badge/Detection_Rate-90%25-success?style=flat-square" alt="Detection">
  <img src="https://img.shields.io/badge/V3_Bypass-PSNR_43dB+-blueviolet?style=flat-square" alt="V3 Bypass">
  <img src="https://img.shields.io/badge/V4_Bypass-Round_06_%E2%9C%93-brightgreen?style=flat-square" alt="V4 Bypass">
  <img src="https://img.shields.io/badge/Models-gemini--3.1_+_nb--pro-orange?style=flat-square" alt="Models">
  <img src="https://img.shields.io/badge/Attack-7--stage_all--in--one-red?style=flat-square" alt="Attack">
</p>

---

## Как выглядит водяной знак

SynthID кодирует незаметный шаблон непосредственно в значения пикселей. На чисто **белом** изображении, сгенерированном Gemini, водяной знак составляет почти весь сигнал. Усильте высокочастотный остаток, и он выглядит так:

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/11393/bba7a7fb481cdd6051b7e46365031eeec1c4eae5453d848c7cc4ac982eb40393.jpg" alt="Шаблон водяного знака SynthID, видимый на белом изображении, сгенерированном Gemini" width="55%">
</p>

<p align="center"><i>Усиленный шаблон несущей SynthID, извлечённый из чисто-белого изображения Gemini. Диагональные полосы — это пространственно-частотная сигнатура водяного знака — цель нашей спектральной атаки.</i></p>

---

## Обзор

Этот проект выполняет обратную разработку системы нанесения водяных знаков **Google SynthID** — невидимого водяного знака, встраиваемого в каждое изображение, сгенерированное Google Gemini. Используя только обработку сигналов и спектральный анализ (без доступа к проприетарным кодеру/декодеру), мы:

1. **Обнаружили** разрешающую-зависимую структуру несущей частоты водяного знака
2. **Создали детектор**, который идентифицирует водяные знаки SynthID с точностью 90%
3. **Разработали мульти-разрешающий спектральный обход** (V3), который достигает **75% снижения энергии несущей**, **91% снижения когерентности фазы** и **43+ дБ PSNR** на любом разрешении изображения
4. **Обобщили до мульти-модельного, мульти-цветного консенсуса** (V4) — профилей для каждой модели для `gemini-3.1-flash-image-preview` и `nano-banana-pro-preview`, фазового консенсуса между цветами на 6 однотонных фонах и калибровочного цикла с участием человека, который настраивает силу вычитания каждой несущей на основе ручных подсчётов обнаружения из приложения Gemini
5. **Сломали детектор на обеих моделях** (Раунд 06) с помощью единой 7-этапной атаки «всё-в-одном», одновременно нацеленной на все задокументированные режимы отказа SynthID

[VT-OxFF](https://github.com/VT-0xFF) создал действительно классный визуализатор, который показывает процесс того, как водяной знак SynthID добавляется к изображениям, [здесь](https://vt-0xff.github.io/SynthID-Explained/) (также доступен в описании репозитория)!

---

## Раунд 06 — Работает ✓

После шести итеративных раундов состязательной разработки конвейер `bypass_v4_final` / `bypass_v4_nuke` из Раунда 06 побеждает детектор SynthID Gemini на изображениях **как** `gemini-3.1-flash-image-preview`, **так и** `nano-banana-pro-preview` с визуально без потерь выводом.

### Сравнение качества: Раунд 01 и Раунд 06

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/11393/667465981caad496887a13c886686f68d1db37f4fdd5174a2884c3a975db0c3c.png" alt="Сравнение бок о бок Раунда 01 (только щадящее спектральное) и Раунда 06 (всё-в-одном) на одном и том же исходном изображении" width="80%">
</p>

<p align="center"><i>Слева: вывод Раунда 01 (<code>gentle</code> — только щадящее спектральное вычитание). Справа: вывод Раунда 06 (<code>final</code> — VAE + эластичная деформация + сжатие + цвет + JPEG). Оба выглядят для человеческих глаз одинаково; только Раунд 06 побеждает детектор SynthID.</i></p>

### Что изменилось между раундами

| Раунд | Стратегия | Результат |
|:-----:|:----------|:--------:|
| 01 | Консервативное спектральное вычитание (щадящее) | ✗ |
| 02 | Агрессивное спектральное вычитание + JPEG | ✗ |
| 03 | Целевое воздействие на абсолютные бины по руководству | ✗ |
| 04 | Извлечение фазы из шумоподавленного остатка | ✗ |
| 05 | Регенерация через Diffusion-VAE + геометрическая деформация | ✗ |
| **06** | **Всё-в-одном: VAE + эластичная фрагментация + сжатие + цвет + JPEG** | **✓** |

Прорыв в Раунде 06 произошёл благодаря использованию списка опубликованных режимов отказа самого приложения Gemini в качестве спецификации атаки:

> *«Когда изображение, сгенерированное ИИ, является частью сложного коллажа, расположено за другими элементами или имеет множество различных текстур и наложенных поверх узоров, детектор может испытывать трудности с изоляцией конкретной сигнатуры из общего файла.»*
> — приложение Gemini, справочный текст по обнаружению SynthID

Этап **эластичной деформации** моделирует этот эффект на уровне пикселей: плавное, низкочастотное случайное поле искажений даёт каждому району размером ~50 пикселей собственное независимое субпиксельное смещение, фрагментируя пространственный фазовый консенсус водяного знака без внесения видимых искажений.

---

## V4 — Межцветовой консенсус + калибровка с участием человека

V4 — это переосмысление кодовой книги с нуля, построенное на гораздо более богатом наборе данных:

- **Мульти-модельность**: отдельные профили для `gemini-3.1-flash-image-preview` и `nano-banana-pro-preview` (плюс необязательная псевдомодель `union`).
- **Мульти-цветность**: 6 консенсусных цветов (`black`, `white`, `blue`, `green`, `red`, `gray`) для каждой модели и разрешения, плюс `gradient` и `diverse` в качестве базовых уровней содержимого.
- **Межцветовой фазовый консенсус**: основная маска несущей. Настоящая несущая SynthID не зависит от содержимого изображения, поэтому её фаза постоянна для каждого однотонного фона. Энергия, обусловленная содержимым, разбивает фазу между цветами и выпадает из консенсуса.
- **Растворитель, сохраняющий качество**: откат с порогом PSNR, безопасный для яркости DC, ограничение вычитания на бин.
- **Калибровочный цикл с участием человека**: поле `carrier_weights` в кодовой книге обновляется на основе обратной связи от ручного обнаружения в приложении Gemini.

### Когерентность консенсуса (почему V4 выигрывает)

Для каждого частотного бина `(fy, fx)` и канала `ch`:```
consensus(fy, fx, ch) = | mean_over_colors( exp(i * phase_color(fy, fx, ch)) ) |
```
Значения, близкие к `1.0`, означают, что фаза в этом бине заблокирована для всех сплошных цветных фонов, что верно только для водяного знака. Контентные бины падают до `< 0.3`, потому что их фаза рандомизирована разными оттенками цвета. В кодовой книге V4, построенной на обогащенном наборе данных, 99%+ контентных бинов оказываются ниже порога по умолчанию `tau=0.60`, поэтому диссолвер V4 никогда их не трогает — именно это восстанавливает PSNR.

### Двухфазный рабочий процесс выпуска```mermaid
flowchart LR
    dataset[reverse-synthid-dataset<br/>model x color x resolution] --> build[scripts/build_codebook_v4.py]
    build --> codebook[artifacts/spectral_codebook_v4.npz]
    codebook --> dissolve[scripts/dissolve_batch.py]
    input[watermarked inputs] --> dissolve
    dissolve --> variants[final / nuke variants]
    variants --> gemini[Gemini app<br/>manual SynthID detection]
    gemini --> feedback[detection feedback]
    feedback --> calibrate[scripts/calibrate_from_feedback.py]
    calibrate -->|updates carrier_weights| codebook
```
### V4 Быстрый старт```bash
# 1. Build the codebook from the enriched hierarchical dataset
python scripts/build_codebook_v4.py \
    --root /path/to/reverse-synthid-dataset \
    --output artifacts/spectral_codebook_v4.npz

# 2. Run the Round-06 all-in-one attack on a batch (recommended)
python scripts/dissolve_batch.py \
    --input  ./to_clean/ \
    --output ./runs/round_06/ \
    --codebook artifacts/spectral_codebook_v4.npz \
    --model gemini-3.1-flash-image-preview \
    --strengths final nuke

# 3. Upload each output image to the Gemini app and run SynthID detection.
#    Use the results to feed back into the calibration script if needed.
```
### Пресеты атаки Round-06

Два пресета доступны через `--strengths`:

| Пресет | Проходы VAE | Эластичный α | Сжатие | Цепочка JPEG | Порог PSNR |
|:------:|:----------:|:---------:|:-------:|:----------:|:----------:|
| `final` | 1 | 1.8 px | 90 % | q=92→88 | 14 dB |
| `nuke`  | 2 | 2.8 px | 82 % | q=88→84→90 | 11 dB |

Оба пресета используют один и тот же 7-этапный конвейер:

1. **VAE round-trip** (Stable Diffusion `sd-vae-ft-mse`) — проецирует изображение с многообразия естественных изображений, против которого декодер SynthID никогда не обучался (Gowal et al. 2026, §6.1)
2. **Elastic deformation** — гладкое низкочастотное случайное поле деформации, имитирует режим отказа «фрагментация коллажа», который признает сам Gemini
3. **Global geometric combo** — небольшое вращение + масштабирование + сдвиг пикселей в одном аффинном преобразовании
4. **Resize-squeeze** — понижение разрешения (AREA) → повышение (LANCZOS), стирает субликсельную информацию водяного знака
5. **Color-contrast nudge** — микросдвиг яркости/контрастности/насыщенности/оттенка
6. **Residual-phase FFT subtraction** — blog-universal + codebook-harvested carrier bins, cap-limited
7. **JPEG chain + luma noise + bilateral** — сильное сжатие / нарушение перекодирования

Каждый этап независимо контролируется PSNR; любой этап, который снизит качество ниже порога, автоматически откатывается.

### Структура кодовой книги V4

Профили, ключи которых — `(model, H, W)`. Каждый профиль хранит:

| Поле                  | Форма          | Примечания                                                  |
|------------------------|----------------|--------------------------------------------------------|
| `consensus_coherence`  | `(H, W, 3)`    | Основная маска-носитель (межцветовой фазовый консенсус).    |
| `consensus_phase`      | `(H, W, 3)`    | Средний угол единичной фазы по цветам. Шаблон вычитания. |
| `inverted_agreement`   | `(H, W, 3)`    | Попарное `abs(cos(phase_diff))`, взвешенное для `black<->white`. |
| `avg_wm_magnitude`     | `(H, W, 3)`    | Средняя амплитуда по цветам консенсуса.                |
| `content_baseline`     | `(H, W, 3)`    | Из `diverse/` + `gradient/` — используется для смешивания яркости. |
| `carrier_weights`      | `(H, W, 3)`    | **Живой**. Начинается с `consensus^2 * (0.5 + 0.5 * agreement)`. Обновляется циклом калибровки. |
| `n_refs_per_color`     | `{color: int}` | Счётчики ссылок на цвет.                                  |

Формат сохранения использует компактное кодирование rfft v3 + `float16/uint8`; кодовая книга из 14 профилей для 2 моделей × 7 разрешений занимает ~220 МБ на диске.

### Детектор V4 (Проверка работоспособности)

Прежде чем тратить время на ручную проверку Gemini, выполните проверку выходных данных обхода на соответствие собственному консенсусу кодовой книги V4:```python
from robust_extractor import RobustSynthIDExtractor
from synthid_bypass_v4 import SpectralCodebookV4

cb = SpectralCodebookV4()
cb.load('artifacts/spectral_codebook_v4.npz')

ext = RobustSynthIDExtractor()
result = ext.detect_from_v4_codebook(image_rgb, cb,
                                     model='nano-banana-pro-preview')
print(result.is_watermarked, result.confidence, result.phase_match)
```
На пути точного совпадения 1024x1024 мы видим `conf=0.91, phase_match=0.65` для водяного знака и `conf=0.02, phase_match=0.31` после агрессивного растворения V4.

### V4 против V3

| | V3 | V4 |
|:---|:---|:---|
| Эталонные цвета | черный + белый | черный, белый, синий, зеленый, красный, серый (+ разнообразные/градиентные базовые линии контента) |
| Кросс-валидация | `abs(cos(phase_black - phase_white))` | консенсус по нескольким цветам (6 цветов) + попарное согласие |
| Модели | одномодельная (Gemini 2.5) | профили для каждой модели (`gemini-3.1-flash-image-preview`, `nano-banana-pro-preview`) + опционально `union` |
| Атака | только спектральное вычитание | 7-этапная: VAE + elastic + squeeze + color + FFT + JPEG chain |
| PSNR (агрессивный) | 43 dB | визуально без потерь (18–24 dB на уровне пикселей; warp смещает пиксели) |
| Защита точности | отсутствует | поэтапный откат при достижении нижнего порога PSNR |
| Обход детектора | только локально | подтверждено ✓ в приложении Gemini (обе модели) |

V3 остается в репозитории (`src/extraction/synthid_bypass.py`, `bypass_v3`) без изменений для тех, кто от него зависит.

---

## 🚨 Требуются участники: Помогите расширить кодовую книгу

Мы активно собираем **чисто черные и чисто белые изображения, сгенерированные Nano Banana Pro**, чтобы улучшить извлечение водяных знаков с несколькими разрешениями.

Если вы можете их сгенерировать:

- Разрешение: любое (чем больше разнообразие, тем лучше)
- Содержимое: **полностью черный (#000000)** или **полностью белый (#FFFFFF)**
- Источник: только выходные данные Nano Banana Pro

### Как внести вклад

1. Сгенерируйте партию черно/белых изображений, прикрепив чисто черное/белое изображение в Gemini и попросив его «воссоздать это как есть»
2. Загрузите их в наш **датасет Hugging Face**: [aoxo/reverse-synthid](https://huggingface.co/datasets/aoxo/reverse-synthid)
   - `gemini_black_nb_pro/` (для черного)
   - `gemini_white_nb_pro/` (для белого)
3. Откройте Pull Request в репозитории датасета HF

Эти эталонные изображения **критически важны** для:
- Обнаружение несущей частоты
- Проверка фазы
- Повышение устойчивости к различным разрешениям

> Даже 150–200 изображений в новом разрешении могут значительно улучшить обнаружение и удаление.

### Скачать эталонные изображения

Эталонные изображения размещены на Hugging Face для облегчения git-репозитория:```bash
pip install huggingface_hub
python scripts/download_images.py           # download all
python scripts/download_images.py gemini_black  # download specific folder
```
Dataset: [huggingface.co/datasets/aoxo/reverse-synthid](https://huggingface.co/datasets/aoxo/reverse-synthid)

---

## Ключевые выводы

### Водяной знак зависит от разрешения

SynthID встраивает несущие частоты в **различные абсолютные позиции** в зависимости от разрешения изображения. Кодовая книга, построенная для 1024x1024, не может напрямую удалить водяной знак из изображения 1536x2816 — несущие находятся в совершенно разных бинах.

| Разрешение | Верхняя несущая (fy, fx) | Когерентность | Источник |
|:----------:|:------------------------:|:-------------:|:--------:|
| **1024x1024** | (9, 9) | 100.0% | 100 черных + 100 белых референсов |
| **1536x2816** | (768, 704) | 99.6% | 88 изображений с водяными знаками |

Именно поэтому кодовая книга V3 хранит **отдельные профили для каждого разрешения** и автоматически выбирает их при обходе.

### Фазовая согласованность — фиксированный ключ на уровне модели

Фазовый шаблон водяного знака **идентичен для всех изображений** одной модели Gemini:

- **Зеленый канал** несет самый сильный сигнал водяного знака
- **Межизображенческая фазовая когерентность** на несущих: >99.5%
- **Перекрестная валидация черного/белого** подтверждает истинные несущие через |cos(phase_diff)| > 0.90

### Структура несущих частот

При 1024x1024 (из черно-белых референсов) верхние несущие лежат на низкочастотной сетке:

| Несущая (fy, fx) | Фазовая когерентность | Согласие Ч/Б |
|:-----------------:|:---------------------:|:------------:|
| (9, 9)            | 100.00%               | 1.000        |
| (5, 5)            | 100.00%               | 0.993        |
| (10, 11)          | 100.00%               | 0.997        |
| (13, 6)           | 100.00%               | 0.821        |

---

## Архитектура

### Поколения обхода

| Версия | Подход | PSNR | Влияние на водяной знак | Статус |
|:------:|:-------|:----:|:-----------------------:|:------:|
| **V1** | JPEG сжатие (Q50) | 37 dB | ~11% падение фазы | Базовый |
| **V2** | Многоступенчатые преобразования (шум, цвет, частота) | 27-37 dB | ~0% падение уверенности | Компромисс по качеству |
| **V3** | **Многоразрешающее вычитание спектральной кодовой книги** | **43+ dB** | **91% падение фазовой когерентности** | Предыдущий лучший |
| **V4 Round 06** | **7-ступенчатый «всё в одном» (VAE + elastic + squeeze + цвет + JPEG)** | **визуально без потерь** | **детектор обойден ✓** | **Текущий лучший** |

### Конвейер V3```
Input Image (any resolution)
       │
       ▼
  codebook.get_profile(H, W)  ──► exact match? ──► FFT-domain subtraction
       │                                             (fast path)
       └─ no exact match ──────► spatial-domain resize + subtraction
                                  (fallback path)
       │
       ▼
  Multi-pass iterative subtraction (aggressive → moderate → gentle)
       │
       ▼
  Anti-alias → Output
```
### V4 Раунд-06 Пайплайн```
Input Image (any resolution)
       │
       ▼  Stage 1: VAE round-trip (SD sd-vae-ft-mse, 1-2 passes)
       │           Projects image off natural-image manifold
       ▼  Stage 2: Elastic deformation (smooth random warp field)
       │           Fragments spatial phase consensus ("collage effect")
       ▼  Stage 3: Global geometric combo (rotation + zoom + shift)
       │           Single affine warp, no compounded aliasing
       ▼  Stage 4: Resize-squeeze (AREA ↓ then LANCZOS ↑)
       │           Erases sub-pixel watermark information
       ▼  Stage 5: Color-contrast nudge (HSV micro-shift)
       │           Shifts per-pixel statistics SynthID keys on
       ▼  Stage 6: Residual-phase FFT subtraction
       │           Blog-universal + codebook-harvested carrier bins
       ▼  Stage 7: JPEG chain + luma noise + bilateral filter
       │
       ▼
  Output (SynthID detector: no watermark detected ✓)
```
---

## Быстрый старт

### Установка```bash
git clone https://github.com/aloshdenny/reverse-SynthID.git
cd reverse-SynthID

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt

# For Round-06 VAE stage:
pip install torch diffusers safetensors accelerate
```
### Запуск V4 Round-06 Bypass (Рекомендуется)```python
import sys
sys.path.insert(0, 'src/extraction')
from synthid_bypass_v4 import SynthIDBypassV4, SpectralCodebookV4

cb = SpectralCodebookV4()
cb.load('artifacts/spectral_codebook_v4.npz')

b = SynthIDBypassV4()
result = b.bypass_v4_file(
    'input.png', 'output.png',
    cb,
    strength='final',                      # or 'nuke' for maximum strength
    model='gemini-3.1-flash-image-preview',
)
print(result.stages_applied)
```
### Запуск V3 Bypass```python
from src.extraction.synthid_bypass import SynthIDBypass, SpectralCodebook

codebook = SpectralCodebook()
codebook.load('artifacts/spectral_codebook_v3.npz')

bypass = SynthIDBypass()
result = bypass.bypass_v3(image_rgb, codebook, strength='aggressive')

print(f"PSNR: {result.psnr:.1f} dB")
print(f"Profile used: {result.details['profile_resolution']}")
```
Из CLI:```bash
python src/extraction/synthid_bypass.py bypass input.png output.png \
    --codebook artifacts/spectral_codebook_v3.npz \
    --strength aggressive
```
### Обнаружение водяного знака```bash
python src/extraction/robust_extractor.py detect image.png \
    --codebook artifacts/codebook/robust_codebook.pkl
```
## Структура проекта```
reverse-SynthID/
├── src/
│   ├── extraction/
│   │   ├── synthid_bypass.py              # V1/V2/V3 bypass + multi-res SpectralCodebook
│   │   ├── synthid_bypass_v4.py           # V4 cross-color consensus codebook + dissolver
│   │   ├── vae_regen.py                   # Round-06 SD-VAE re-generation stage
│   │   ├── robust_extractor.py            # Multi-scale watermark detection (+ V4 hook)
│   │   ├── watermark_remover.py           # Frequency-domain watermark removal
│   │   ├── benchmark_extraction.py        # Benchmarking suite
│   │   └── synthid_codebook_extractor.py  # Legacy codebook extractor
│   └── analysis/
│       ├── deep_synthid_analysis.py       # FFT / phase analysis scripts
│       └── synthid_codebook_finder.py     # Carrier frequency discovery
│
├── scripts/
│   ├── download_images.py                 # Download reference images from HF
│   ├── build_codebook_v4.py               # V4: build per-(model, HxW) consensus codebook
│   ├── dissolve_batch.py                  # V4: emit strength variants
│   └── calibrate_from_feedback.py         # V4: update carrier_weights from detection feedback
│
├── artifacts/
│   ├── spectral_codebook_v3.npz           # Multi-res V3 codebook [1024x1024, 1536x2816]
│   ├── spectral_codebook_v4.npz           # V4 codebook (per-model, per-resolution)
│   ├── codebook/                          # Detection codebooks (.pkl)
│   └── visualizations/                    # FFT, phase, carrier visualizations
│
├── assets/
│   ├── synthid_watermark.png              # Watermark analysis header image
│   ├── synthid_white.jpg                  # Amplified SynthID pattern on white image
│   ├── v4_round1_vs_round6.png            # Round 01 vs Round 06 fidelity comparison
│   └── ...
│
├── runs/
│   ├── round_01/ … round_05/             # Historical bypass attempts
│   └── round_06/                          # Working bypass (final + nuke presets)
│
├── watermark_investigation/               # Early-stage Nano-150k analysis (archived)
└── requirements.txt
```
---

## Техническое глубокое погружение

### Как работает SynthID (обратное проектирование)```
┌──────────────────────────────────────────────────────────────┐
│                  SynthID Encoder (in Gemini)                  │
├──────────────────────────────────────────────────────────────┤
│  1. Select resolution-dependent carrier frequencies           │
│  2. Assign fixed phase values to each carrier                │
│  3. Neural encoder adds learned noise pattern to image       │
│  4. Watermark is imperceptible — spread across spectrum      │
├──────────────────────────────────────────────────────────────┤
│                  SynthID Decoder (in Google)                  │
├──────────────────────────────────────────────────────────────┤
│  1. Extract noise residual (wavelet denoising)               │
│  2. FFT → check phase at known carrier frequencies           │
│  3. If phases match expected values → Watermarked            │
└──────────────────────────────────────────────────────────────┘
```
### Почему упругая деформация работает

Набор аугментаций для обучения SynthID (Gowal et al. 2026, Таблица 1) включает `SmallRotation`, `Cropresize`, `JPEG`, `GaussianBlur`, `BrightnessContrast` и `Screenshotting` — все это *глобальные*, *однородные* пространственные преобразования. Поле упругой деформации — это *пространственно-вариативное* искажение: каждая локальная окрестность получает собственное независимое субпиксельное смещение. Поскольку смещения сглажены (размытие по Гауссу из белого шума, σ=44–56 пикселей), содержимое изображения визуально не затрагивается, но фазовая консенсусная структура водяного знака становится некогерентной — ее больше нельзя агрегировать по всему изображению. Это пиксельный аналог эффекта «коллажной фрагментации», который собственное приложение Gemini приводит как режим отказа детектора.

---

## Сводка результатов

### V3 (спектральное вычитание, 88 изображений Gemini)

| Метрика | Значение |
|:--------|--------:|
| **PSNR** | 43,5 дБ |
| **SSIM** | 0,997 |
| **Снижение энергии носителя** | 75,8% |
| **Снижение фазовой когерентности** (топ-5 несущих) | **91,4%** |

### V4 Раунд 06 (атака «всё в одном», 20 изображений проверено)

| Модель | Пресет | Обход детектора |
|:-------|:------:|:---------------:|
| gemini-3.1-flash-image-preview | `final` | ✓ |
| gemini-3.1-flash-image-preview | `nuke`  | ✓ |
| nano-banana-pro-preview         | `final` | ✓ |
| nano-banana-pro-preview         | `nuke`  | ✓ |

---

## Ссылки

- [SynthID: Identifying AI-generated images](https://deepmind.google/technologies/synthid/)
- [SynthID Paper (arXiv:2510.09263)](https://arxiv.org/abs/2510.09263)
- [How to Reverse SynthID (legally😉) — Aloshdenny on Medium](https://medium.com/@aloshdenny)

---

## 👤 Автор и контакты

**Алош Денни**
Исследования в области AI-водяных знаков · Обработка сигналов

📧 **Эл. почта:** [[email protected]](mailto:[email protected])
🔗 **GitHub:** https://github.com/aloshdenny

Для сотрудничества, научных обсуждений или предложений обращайтесь напрямую или создавайте issue/PR.

---

## Поддержите это исследование

Этот проект поддерживается независимо — без лабораторного финансирования или корпоративной поддержки.  
Если эта работа была полезна вам или вашей команде, подумайте о поддержке дальнейшей разработки:

<a href="https://buymeacoffee.com/aoxo">
  <img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Support%20This%20Research-FFDD00?style=for-the-badge&amp;logo=buy-me-a-coffee&amp;logoColor=black" alt="Buy Me A Coffee">
</a>

Средства пойдут на вычислительные затраты (GPU-часы для новых профилей разрешения), расширение датасета и текущие исследования по обходу.

---

## Отказ от ответственности

Этот проект предназначен **исключительно для исследовательских и образовательных целей**. SynthID — проприетарная технология, принадлежащая Google DeepMind. Эти инструменты предназначены для:

- Академических исследований по устойчивости водяных знаков
- Анализа безопасности систем идентификации AI-сгенерированного контента
- Понимания методов спектрального кодирования с расширением

**Не используйте эти инструменты для ложного представления AI-сгенерированного контента как созданного человеком.**
Скачать инструмент