
Инструментарий для проверки устойчивости ИИ-водяных знаков только для исследовательских целей: локальный обратный прокси удаляет C2PA/EXIF/XMP, Unicode, стеганографию изображений/аудио, метаданные OOXML/PDF и сканирует на Trojan Source.
Универсальное промежуточное ПО для санитизации провенанса и водяных знаков ИИ Научный артефакт — только для оценки устойчивости водяных знаков.
NullOrigin — это научный артефакт. Он публикуется для поддержки академического и независимого изучения устойчивости водяных знаков и ни для каких других целей.
Схемы водяных знаков — это заявления о безопасности, а заявления о безопасности имеют смысл только после того, как кто-то попытался их взломать. Литература, которую реализует этот проект — Кирхенбауэр и др. по KGW, Кришна и др. по атакам парафразом, Бушер и Андерсон по Trojan Source — существует потому, что исследователи публиковали работающие атаки, чтобы защитники могли измерять реальную устойчивость, а не предполагать её. Именно к этой традиции относится данный репозиторий.
Предполагаемое использование
Не предполагается и не поддерживается
Ничто здесь не является техническим ограничением на выполнение кода. Это заявление об условиях, на которых он предоставляется, и о том, что его автор будет и не будет поддерживать. Программное обеспечение предоставляется «КАК ЕСТЬ», без каких-либо гарантий — см. LICENSE.
Прочтите Область применения и честные ограничения, прежде чем делать какой-либо вывод из числа, которое печатает этот инструмент. Некоторые из схем, на которые он направлен, невозможно проверить с помощью публичного детектора, и в README об этом сказано прямо, а не иносказательно.
Прочтите это, прежде чем делать выводы из любого числа, которое печатает этот инструмент.
| Уровень | Что он фактически делает |
|---|---|
| Невидимые символы | Полностью эффективно. Нулевой ширины, bidi-управляющие, селекторы вариантов начертания и полезные нагрузки из блока Unicode Tags удаляются полностью, с выводом счётчика. Гомоглифные конфьюзаблы между письменностями (кириллица/греческий, отображаемые как ASCII) сводятся. |
| Метаданные документа (.docx) | Полностью эффективно. Автор, последний редактор, количество ревизий, временные метки, шаблон и версия приложения очищаются из docProps, с сохранением форматирования побайтово. |
| C2PA / EXIF / XMP | Полностью эффективно. Изображение пересобирается из сырых образцов пикселей в новый контейнер, поэтому подписанные манифесты JUMBF и все метаданные исчезают. Проверено тестами против размеченных фикстур. |
| Статистический водяной знак KGW | Полностью зависит от бэкенда переписывания. Если локальная модель не настроена, статистический водяной знак выживает — инструмент прямо говорит об этом, а не создаёт видимость обратного. |
| SynthID-Text / SynthID-Image / Tree-Ring | Здесь не проверяемо. В них используются приватные ключи и проприетарные декодеры. NullOrigin применяет возмущения, описываемые в литературе, но не утверждается, что они побеждают реальные детекторы, потому что нет публичного детектора, по которому можно было бы измерять. |
| AudioSeal / SynthID-Audio | Здесь не проверяемо по той же причине. |
KGWStatisticalDetector — это математически точная, самосогласованная реализация
схемы зелёного/красного списка Кирхенбауэра и др. по токенам пробелов. Это не
декодер для продакшн-водяных знаков какого-либо вендора — те основаны на приватном секрете и
собственном BPE-словаре модели.
Его цель — сделать бенчмарк реальным: KGWWatermarkEmbedder внедряет настоящий
водяной знак, конвейер атакует его, а соответствующий детектор измеряет фактическое
снижение. Это истинное измерение атаки на данную схему. Оно не переносится
на водяной знак вендора.
Словарь $V$ разбивается на каждом шаге $t$ хэшем, зависящим от предшествующего контекста:
$$s_t = \text{Hash}(w_{t-k}, \dots, w_{t-1})$$
на зелёный список $G_t$ размера $\gamma|V|$ и красный список $R_t$. Смещение $\delta > 0$ добавляется к зелёным логитам:
$$\tilde{l}{t,v} = \begin{cases} l{t,v} + \delta, & v \in G_t \\ l_{t,v}, & v \in R_t \end{cases}$$
Обнаружение подсчитывает попадания зелёного. При $H_0$ они распределены как $\text{Binomial}(T, \gamma)$, поэтому:
$$z = \frac{|S_G| - \gamma T}{\sqrt{T\gamma(1-\gamma)}}$$
при $z > 4.0$ ($p < 3\times10^{-5}$) помечается как синтетическое.
Почему атака парафразом работает: водяной знак живёт целиком в локальных n-граммных переходах. Переписывание поверхностной формы немеченой моделью пересоздаёт хэш на каждой позиции. Это стандартная атака на устойчивость в литературе о водяных знаках.
Почему важна длина: $z$ растёт как $\sqrt{T}$. Отрывок из 100 токенов при доле зелёного 0.70 достигает лишь $z \approx 3.9$ — ниже порога. Для обнаружения нужны несколько сотен токенов, и поэтому осмысленные бенчмарк-фикстуры тоже должны быть такими.