
Kit de ferramentas de robustez de marcas d'água de IA somente para pesquisa: proxy reverso local remove C2PA/EXIF/XMP, Unicode, esteganografia de imagem/áudio, metadados OOXML/PDF e verifica Trojan Source.
Middleware Universal de Proveniência e Sanitização de Marcas d'Água de IA Artefato de pesquisa — somente para avaliação de robustez de marcas d'água.
NullOrigin é um artefato de pesquisa. Ele é publicado para apoiar o estudo acadêmico e independente da robustez de marcas d'água, e para nenhum outro propósito.
Esquemas de marca d'água são alegações de segurança, e alegações de segurança só são significativas quando alguém tentou quebrá-las. A literatura que este projeto implementa — Kirchenbauer et al. sobre KGW, Krishna et al. sobre ataques de paráfrase, Boucher & Anderson sobre Trojan Source — existe porque pesquisadores publicaram ataques funcionais para que defensores pudessem medir robustez real em vez de assumi-la. Essa é a tradição à qual este repositório pertence.
Usos pretendidos
Não pretendido e não suportado
Nada aqui é um controle técnico sobre como o código executa. É uma declaração dos termos sob os quais ele é oferecido, e do que seu autor apoiará ou não. O software é fornecido "AS IS", sem garantia de qualquer tipo — consulte LICENSE.
Leia Escopo e limitações honestas antes de tirar qualquer conclusão de um número que esta ferramenta imprimir. Vários dos esquemas que ela alvo não podem ser verificados contra um detector público, e o README afirma isso em vez de dar a entender o contrário.
Leia isto antes de tirar conclusões de qualquer número que esta ferramenta imprimir.
| Camada | O que ela realmente faz |
|---|---|
| Caracteres invisíveis | Totalmente eficaz. Cargas de zero-width, controle bidirecional, seletor de variação e bloco de tags Unicode são removidas completamente, com uma contagem reportada. Confusáveis homoglifos entre escritas (renderização cirílica/grega como ASCII) são normalizados. |
| Metadados de documento (.docx) | Totalmente eficaz. Autor, último editor, contagem de revisões, carimbos de data/hora, modelo e versão do aplicativo são limpos de docProps, com a formatação preservada byte por byte. |
| C2PA / EXIF / XMP | Totalmente eficaz. A imagem é reconstruída a partir de amostras de pixels brutos em um contêiner novo, portanto manifestos JUMBF assinados e todos os metadados são removidos. Verificado por teste contra fixtures marcados. |
| Marca d'água estatística KGW | Depende inteiramente do backend de reescrita. Sem um modelo local configurado, a marca d'água estatística sobrevive — a ferramenta afirma isso em vez de dar a entender o contrário. |
| SynthID-Text / SynthID-Image / Tree-Ring | Não verificável aqui. Esses usam chaves privadas e decodificadores proprietários. O NullOrigin aplica as perturbações que a literatura descreve, mas não é feita nenhuma afirmação de que eles derrotam os detectores reais, porque não há detector público para medir. |
| AudioSeal / SynthID-Audio | Não verificável aqui, pela mesma razão. |
KGWStatisticalDetector é uma implementação matematicamente fiel, autoconsistente, do
esquema de lista verde/vermelha de Kirchenbauer et al. sobre tokens de espaço em branco. Ele
não é um decodificador para a marca d'água de produção de nenhum fornecedor — essas
dependem de um segredo privado e do vocabulário BPE do próprio modelo.
Seu propósito é tornar o benchmark real: KGWWatermarkEmbedder insere uma marca d'água
genuína, o pipeline a ataca, e o detector correspondente mede a redução real. Essa é uma
medição verdadeira do ataque contra este esquema. Ela não se transfere para a marca d'água de
um fornecedor.
O vocabulário $V$ é particionado a cada passo $t$ por um hash semeado no contexto anterior:
$$s_t = \text{Hash}(w_{t-k}, \dots, w_{t-1})$$
em uma lista verde $G_t$ de tamanho $\gamma|V|$ e uma lista vermelha $R_t$. Um viés $\delta > 0$ é adicionado aos logits verdes:
$$\tilde{l}{t,v} = \begin{cases} l{t,v} + \delta, & v \in G_t \\ l_{t,v}, & v \in R_t \end{cases}$$
A detecção conta acertos verdes. Sob $H_0$ eles são $\text{Binomial}(T, \gamma)$, portanto:
$$z = \frac{|S_G| - \gamma T}{\sqrt{T\gamma(1-\gamma)}}$$
com $z > 4.0$ ($p < 3\times10^{-5}$) marcado como sintético.
Por que a paráfrase ataca isso: a marca d'água vive inteiramente em transições locais de n-gramas. Reescrever a forma de superfície com um modelo sem marca d'água re-semeia cada posição. Este é o ataque de robustez padrão na literatura de marcas d'água.
Por que o comprimento importa: $z$ cresce como $\sqrt{T}$. Uma passagem de 100 tokens com uma fração verde de 0,70 atinge apenas $z \approx 3,9$ — abaixo do limite. A detecção precisa de algumas centenas de tokens, e o mesmo vale para fixtures de benchmark significativos.
APP11, chunks PNG tEXt/iTXt,
ou caixas c2pa WebP/AVIF. Como a assinatura cobre os dados de pixel, a re-codificação
a partir de um buffer de amostra puro remove-a sem analisar JUMBF.