Tecnología · Technology offering

Marcado y detección de contenido generado con IA

GobernanzIA ofrece a proveedores y responsables del despliegue de sistemas de IA una tecnología abierta para marcar de forma visible y legible por máquina el contenido generado con IA, y para detectarlo y verificarlo.

A quién se ofrece

  • Proveedores de sistemas de IA (art. 50.2 AI Act) que necesitan marcar sus salidas en formato legible por máquina y detectable.
  • Responsables del despliegue (art. 50.4) que deben revelar que una imagen o documento se ha generado o manipulado con IA.
  • Terceros que verifican contenido: cualquiera puede comprobar la marca y la firma con el verificador público y la clave pública publicada.

Se ofrece como herramienta dentro de la plataforma y como especificación abierta que cualquier proveedor puede implementar. Para integraciones, escríbenos desde contacto.

Cómo funciona

  1. Aviso visible: franja «Contenido generado con inteligencia artificial» o «Contenido editado con inteligencia artificial» en imágenes y en cada página de PDF.
  2. Marca legible por máquina: paquete XMP estándar con el campo IPTC Iptc4xmpExt:DigitalSourceType.
  3. Firma digital Ed25519 (GBZ-AIMARK-2): vincula el contenido exacto y los campos de procedencia; cualquier modificación invalida la firma.
  4. Detección y verificación: verificador público que extrae la marca y comprueba la firma en el navegador del usuario, y verificación independiente con la clave pública.

Especificación técnica (v2)

Formatos soportados y mecanismo XMP

  • PNG: chunk iTXt con keyword exacta XML:com.adobe.xmp, sin compresión (flag 0, método 0, idioma y keyword traducida vacíos, texto UTF-8), insertado tras IHDR (XMP Specification Part 3).
  • JPG: segmento APP1 con cabecera http://ns.adobe.com/xap/1.0/\0 y paquete XMP UTF-8.
  • PDF: flujo /Metadata (/Type /Metadata /Subtype /XML, sin comprimir) referenciado desde el catálogo, más Subject/Keywords en el diccionario Info.
  • WebP: solo aviso visible, sin marca XMP ni firma.

Namespaces

  • Dublin Core http://purl.org/dc/elements/1.1/ (dc:description).
  • XMP básico http://ns.adobe.com/xap/1.0/ (xmp:CreatorTool, xmp:MetadataDate).
  • IPTC Photo Metadata Extension http://iptc.org/std/Iptc4xmpExt/2008-02-29/ (DigitalSourceType).
  • GobernanzIA https://gobernanzia.app/ns/etiquetado/1/: aiGenerated, specVersion, issuer, archivoId, etiquetadoEn, hashContenido, claveId, firma.

DigitalSourceType (vocabulario controlado IPTC)

  • Generado mediante IA generativa: http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia
  • Editado o manipulado mediante IA generativa: http://cv.iptc.org/newscodes/digitalsourcetype/compositeWithTrainedAlgorithmicMedia

El usuario elige el tipo al etiquetar; el valor se incrusta en el XMP y queda cubierto por la firma.

<rdf:Description rdf:about=""
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:xmp="http://ns.adobe.com/xap/1.0/"
  xmlns:Iptc4xmpExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/"
  xmlns:gov="https://gobernanzia.app/ns/etiquetado/1/">
 <Iptc4xmpExt:DigitalSourceType>http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia</Iptc4xmpExt:DigitalSourceType>
 <dc:description><rdf:Alt><rdf:li xml:lang="x-default">Contenido generado con inteligencia artificial</rdf:li></rdf:Alt></dc:description>
 <xmp:CreatorTool>GobernanzIA</xmp:CreatorTool>
 <xmp:MetadataDate>2026-10-07T10:00:00.000Z</xmp:MetadataDate>
 <gov:aiGenerated>true</gov:aiGenerated>
 <gov:specVersion>2</gov:specVersion>
 <gov:issuer>https://gobernanzia.app</gov:issuer>
 <gov:archivoId>3f2c…-uuid</gov:archivoId>
 <gov:etiquetadoEn>2026-10-07T10:00:00.000Z</gov:etiquetadoEn>
 <gov:hashContenido>sha256-hex</gov:hashContenido>
 <gov:claveId>gbz-ed25519-…</gov:claveId>
 <gov:firma>base64-ed25519</gov:firma>
</rdf:Description>

Firma digital GBZ-AIMARK-2

  • Algoritmo: Ed25519 (RFC 8032, PureEdDSA). Firma de 64 bytes codificada en base64 estándar. La clave privada solo existe en el servidor de GobernanzIA.
  • Mensaje firmado (exacto): GBZ-AIMARK-2|fileId|timestamp|contentHash|digitalSourceType|issuer|specVersion
  • Codificación: bytes UTF-8 de la cadena; delimitador | (U+007C); sin espacios, sin salto de línea final; ningún campo puede contener |.
  • fileId: UUID en minúsculas (gov:archivoId). timestamp: UTC ISO-8601 con milisegundos y sufijo Z, YYYY-MM-DDTHH:mm:ss.sssZ (gov:etiquetadoEn). contentHash: SHA-256 en hexadecimal minúscula. digitalSourceType: URI IPTC exacta. issuer: https://gobernanzia.app (gov:issuer). specVersion: 2 (gov:specVersion).
  • Contenido hasheado en PNG/JPG: el archivo completo sin el chunk iTXt / segmento APP1 XMP. En PDF: el documento completo (incluido su /Metadata XMP) hasta antes del bloque final \n%GBZ-AIMARK + base64(JSON {v:2, archivoId, etiquetadoEn, claveId, firma, digitalSourceType, issuer, specVersion}); el DigitalSourceType del bloque debe coincidir con el del XMP.
  • Clave pública: /.well-known/gobernanzia-content-signing.json, con formato propio (publicKey base64) y JWK estándar en jwks.keys (kty=OKP, crv=Ed25519, x base64url, kid). El kid coincide con gov:claveId.

Verificación independiente

Cualquier tercero puede verificar sin depender de nuestro verificador: leer el XMP estándar (por ejemplo exiftool -XMP-iptcExt:DigitalSourceType archivo), reconstruir el payload y comprobar la firma con la clave pública publicada. También está disponible el verificador público, que funciona en el navegador sin subir el archivo.

# pip install cryptography requests
import base64, hashlib, re, requests
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
jwk = requests.get("https://gobernanzia.app/.well-known/gobernanzia-content-signing.json").json()["jwks"]["keys"][0]
pub = Ed25519PublicKey.from_public_bytes(base64.urlsafe_b64decode(jwk["x"] + "=="))
# 1) Extraer el XMP y obtener los bytes sin el chunk iTXt / segmento APP1 (imágenes)
#    o los bytes previos a "\n%GBZ-AIMARK " (PDF).
# 2) payload = "|".join(["GBZ-AIMARK-2", fileId, timestamp, sha256(content).hexdigest(),
#                        digitalSourceType, issuer, specVersion]).encode("utf-8")
# 3) pub.verify(base64.b64decode(firma), payload)  # lanza InvalidSignature si no es válida

Integración para proveedores de sistemas de IA

La tecnología está disponible para terceros: proveedores de sistemas de IA y responsables del despliegue pueden integrarla en sus propios flujos de generación y publicación, de dos formas:

  • Implementando la especificación abierta de esta página (formato, payload y verificación son públicos y reproducibles).
  • Usando el servicio de marcado y firma de GobernanzIA bajo acuerdo; solicítalo desde contacto.

Compatibilidad con GBZ-AIMARK-1

La versión 1 (payload GBZ-AIMARK-1|fileId|timestamp|contentHash, PNG en chunk tEXt «XMP») ya no se emite. El verificador la sigue aceptando solo para archivos históricos e indica que esa firma no cubre el DigitalSourceType. Toda nueva emisión es v2.

Límites

Los metadatos pueden eliminarse al recomprimir o al hacer capturas de pantalla; por eso se combinan con el aviso visible. La ausencia de marca no prueba que un contenido no sea generado con IA. Esta tecnología no sustituye la evaluación jurídica de cada caso.

English summary

GobernanzIA offers providers and deployers of AI systems a marking and detection technology for AI-generated content: a visible disclosure, a machine-readable XMP mark (PNG iTXt XML:com.adobe.xmp, JPEG APP1, PDF /Metadata) using the standard IPTC DigitalSourceType field (trainedAlgorithmicMedia or compositeWithTrainedAlgorithmicMedia), an Ed25519 (RFC 8032) signature over the canonical GBZ-AIMARK-2 payload binding file ID, timestamp, content hash, DigitalSourceType, issuer and spec version, a published public key and a free public verifier. The technology is offered to third parties: AI system providers may implement this open specification in their own workflows or use GobernanzIA's signing service under agreement.

Empieza a gobernar tu IA

Diez hitos guiados, documentación generada automáticamente y trazabilidad lista para auditoría.

Hablar con nosotros