Come lavorano insieme AI Disclosure, Content Credentials e C2PA Sign in un sito Drupal, e a che cosa servono per l'AI Act?

Approfondisci il progetto AI Disclosure
In un sito Drupal tre moduli si passano un'immagine fatta con l'AI: Content Credentials legge la firma C2PA del file caricato e propone il grado, AI Disclosure registra il grado che sceglie il redattore e scrive l'etichetta, C2PA Sign firma le copie pubblicate con dentro quella dichiarazione. Per chi pubblica l'obbligo dell'AI Act è l'etichetta visibile. La firma è una prova in più; la marcatura è un obbligo solo per chi fornisce il sistema che genera le immagini.

Un'immagine generata con l'AI può arrivare in un sito Drupal con una firma digitale attaccata, e può uscirne con un'altra. In mezzo ci sono tre moduli, e ognuno fa una cosa sola. Qui li seguo uno per uno su un'immagine vera, la copertina di questo articolo fatta con ChatGPT, e dico che cosa sul mio sito di prova ha retto e dove si è rotto. Che cosa porta dentro un'immagine AI e come la etichetta AI Disclosure, il modulo che ho creato su drupal.org nella Drupal AI Initiative, lo spiega l'articolo su metadati ed etichette delle immagini AI.

Che cosa fanno i tre moduli, in una frase ciascuno?

Content Credentials legge: apre la firma dei file che il redattore carica e, se dice che il file è fatto con l'AI, propone il grado in AI Disclosure. AI Disclosure dichiara: tiene il grado che il redattore conferma, mostra l'etichetta al lettore dove la legge la chiede e scrive i metadati nelle copie. C2PA Sign firma: applica alle copie pubblicate una firma nuova, con il certificato del sito, e ci include la dichiarazione di AI Disclosure.

Il grado lo decide sempre una persona: gli altri due moduli si appoggiano a quella decisione, uno per suggerirla e uno per sigillarla.

Che cos'è la firma C2PA di un'immagine?

La firma C2PA, che il pubblico conosce come Content Credentials, è una carta d'identità digitale attaccata al file. Dice chi l'ha prodotto, con quale strumento, che cosa gli è successo dopo, ed è firmata con un certificato, così chiunque può controllare che nessuno l'abbia alterata. ChatGPT la mette su ogni immagine: quella in testa a questo articolo porta una firma di OpenAI che dice «creata da un modello addestrato».

La firma vale solo per quel file, byte per byte. Basta ridimensionare l'immagine, come fa Drupal per ogni pagina, e la firma originale non regge più: per averne una valida sulla copia, qualcuno deve firmarla di nuovo. È quello che fa C2PA Sign.

Come passa un'immagine da un modulo all'altro?

Il video segue l'immagine in otto tappe. Nasce in ChatGPT, il redattore la carica, Content Credentials legge la firma, il redattore conferma il grado, Drupal fa la copia per la pagina, AI Disclosure la dichiara e C2PA Sign la firma. All'ultima tappa un lettore la scarica, oppure ne fa uno screenshot.

Che cosa succede ai segnali di un'immagine AI, passo per passo?

Guarda il video o scegli una tappa, e confronta Drupal da solo con Drupal e i tre moduli.

Il video mostra la configurazione consigliata, con C2PA Sign che firma solo le copie. Con la firma al caricamento accesa e c2patool 0.9 il giro si rompe al primo passo: C2PA Sign rifirma il file e cancella la firma di OpenAI, e Content Credentials non ha più niente da leggere.

C2PA Sign: le correzioni

Dal 13 ottobre sono co-maintainer di C2PA Sign, accanto a @jrglasgow (si apre in una nuova scheda) che l'ha creato. Le correzioni di cui parlo qui sotto sono uscite il 20 ottobre 2026 nella release 1.5.0 (si apre in una nuova scheda), che vuole il programma c2patool 0.27 o successivo e la libreria PHP jrglasgow/c2patool 0.6.0: su immagini Debian 12 va compilato con cargo. L'ultima release del modulo è la 1.5.0 (Drupal.org, al ).

Cosa funziona Cosa serve
Lettura della firma di OpenAI e proposta del grado con la trust list C2PA, al primo cron; campo immagine senza risoluzione massima
Conferma del grado, XMP e JSON-LD di AI Disclosure AI Disclosure 1.0.0-beta1
Icona UE impressa sul deep fake con il grado deep fake e il mezzo «deep fake: immagine, audio o video» impostati tutti e due
Firma di C2PA Sign al caricamento, alla pubblicazione e sulle copie C2PA Sign (si apre in una nuova scheda) dalla 1.5.0, ultima release 1.5.0 (Drupal.org, al ). La firma di OpenAI resta come ingrediente
Download che conserva la firma affidabile con un certificato della trust list
Grado proposto dal file rifirmato Content Credentials 1.0.0-alpha1 (si apre in una nuova scheda), verificatore in PHP, certificato del sito fra quelli di fiducia

Che cosa funziona oggi?

Ho provato il giro su un sito Drupal 11 di test e ho letto ogni file con c2patool. L'ultima prova è del 20 ottobre 2026, su Drupal 11.4.8 con PHP 8.3, C2PA Sign 1.5.0 con la libreria PHP jrglasgow/c2patool 0.6.0, il programma c2patool 0.28.2, Content Credentials 1.0.0-alpha1 con il verificatore in PHP e AI Disclosure 1.0.0-beta1: la tabella sopra vale per queste versioni.

Funziona la parte in uscita. C2PA Sign firma le copie che il sito serve, e dentro c'è quello che ha dichiarato AI Disclosure: il tipo di sorgente del grado confermato, per esempio «generato da un modello», e su un deep fake con l'icona impressa un'azione «modificato» (c2pa.edited) che descrive l'icona impressa. La copia scaricata da un lettore è identica byte per byte, e la firma resta valida. Funziona anche la lettura: caricata su un altro sito che riconosce il certificato del mio, quella copia firmata fa nascere in AI Disclosure una proposta di grado, in attesa che il redattore la confermi.

Nelle release precedenti alla 1.5.0 quattro cose non funzionavano, e oggi sono tutte risolte: tre con le correzioni dei moduli, la quarta con la conferma del redattore. La 1.4.11 chiede c2patool 0.9, mentre a ottobre 2026 c2patool è alla 0.28.2, e la 0.9 non sa leggere le firme nel formato C2PA 2.x, come quella di OpenAI. Con la 0.9, quando firma il file appena caricato, sostituisce la firma di OpenAI con la propria, che non dice più «è AI», e la provenienza originale sparisce. È la issue #3596032 (si apre in una nuova scheda) di C2PA Sign. Con la libreria PHP jrglasgow/c2patool, che contiene la mia pull request #1 (si apre in una nuova scheda) per l'icona, la 1.5.0 lascia la firma di OpenAI nel file come ingrediente, con titolo e autore dell'azione (issue #3596036 (si apre in una nuova scheda)). Dalla 1.0.0-alpha1 Content Credentials legge l'origine anche nell'ingrediente: nella mia prova ha proposto il grado sul file rifirmato con il certificato del sito fra quelli di fiducia, e senza quel certificato ha segnato il file come non attendibile.

Nella 1.4.11 le copie firmate da C2PA Sign nascono con permessi che il server web non legge: la prima richiesta passa, dalla seconda la copia risponde 403 e sparisce anche dalle pagine del sito. Su un deep fake con l'icona impressa, chi arriva dopo la prima visita non vede né l'immagine né l'etichetta. La correzione della issue #3596031 (si apre in una nuova scheda) è nella 1.5.0, che serve la copia a ogni visita.

Infine un deep fake arriva sull'altro sito come «generato in autonomia», perché i due gradi condividono lo stesso tipo di sorgente IPTC e la lettura sceglie il primo: lì il grado ancora non c'è, e il redattore corregge la proposta. Dalla 1.0.0-beta1 di AI Disclosure una proposta non abbassa più un grado già scelto, quindi un deep fake già dichiarato resta tale (issue #106 (si apre in una nuova scheda)).

Sul mio sito ho trovato anche un caso più banale. Fra le copertine fatte con ChatGPT, la firma di OpenAI c'è ancora solo in quelle caricate così come uscivano, in PNG: quelle convertite in JPG prima del caricamento l'avevano già persa. La firma si perde anche nel modo in cui una redazione maneggia i file, prima ancora di arrivare a Drupal.

A che cosa servono rispetto all'AI Act?

Per chi pubblica, l'obbligo dell'AI Act è l'etichetta visibile sui deep fake, con l'articolo 50(4), e quella la mette AI Disclosure. Le linee guida della Commissione, al paragrafo 117, dicono che su un deep fake chi pubblica non può contare sulla marcatura del fornitore: una firma intatta non sostituisce l'etichetta. L'AI Act non chiede a chi pubblica di conservare la firma, anche se il Codice chiede ai fornitori di vietarne la rimozione intenzionale nei termini d'uso.

La marcatura leggibile dalle macchine è un obbligo dei fornitori dei sistemi che generano le immagini, con l'articolo 50(2), e la firma C2PA è una delle tecniche per farla. Il Codice di buona pratica chiede metadati firmati più un watermark. Un sito che mette in servizio a proprio nome un sistema che genera immagini, per esempio costruito con il modulo AI di Drupal, può essere anche fornitore: lì C2PA Sign copre i metadati firmati, e il Codice chiede in più un watermark.

Per tutti gli altri, Content Credentials fa risparmiare tempo al redattore e C2PA Sign aggiunge una prova: dimostra che cosa il sito ha dichiarato e quando, se un'etichetta viene contestata.

Che cosa serve perché una firma sia considerata affidabile?

Una firma è considerata affidabile quando il certificato che l'ha prodotta viene da un'autorità della lista di fiducia di C2PA. La firma di OpenAI sulla copertina lo è. Quella del mio sito di prova, fatta con un certificato di test, è valida, ma fuori dal banco di prova nessuno la riconosce. Per un sito vero serve un certificato riconosciuto: le autorità della lista lo rilasciano a prodotti che hanno superato il programma di conformità di C2PA, e come ci arrivi un sito editoriale nessuna fonte lo spiega ancora.

Lo stesso vale per la lettura: Content Credentials propone il grado solo da una firma affidabile, e riconosce come affidabili i certificati della lista che gli si dà: nel modulo, se legge con l'estensione PHP o con il verificatore in PHP, oppure nel servizio di lettura. Configurato con la lista ufficiale, legge come affidabile la firma di OpenAI. Su un sito che usa anche C2PA Sign, il certificato del sito va aggiunto a quella lista, altrimenti ogni caricamento viene segnato come non attendibile. Serve un certificato la cui chiave privata ha solo il sito, mai quello di esempio di c2patool.

Come si configurano oggi, per non perdere la firma del generatore?

Con le versioni che ho provato, la combinazione che funziona è questa:

  1. In C2PA Sign accendi la firma delle copie degli stili immagine: le copie servite ai lettori ricevono la firma del sito con i dati di AI Disclosure. Dalla 1.5.0 anche la firma al caricamento e quella alla pubblicazione lasciano la firma di OpenAI come ingrediente: se le accendi, metti il certificato del sito fra quelli di fiducia di Content Credentials.
  2. In Content Credentials scegli i tipi di contenuto da leggere, o i tipi di media se il sito usa Media, lascia vuota la risoluzione massima dei campi immagine letti e usa la lista di fiducia ufficiale di C2PA, non quella di prova. Così la firma di OpenAI produce la proposta al primo cron dopo il caricamento: Content Credentials legge i file in coda.
  3. In AI Disclosure il redattore conferma o corregge il grado proposto: se l'immagine è un deep fake lo dice lui, perché la firma lo ignora.

Come si legge la firma di un'immagine?

Basta c2patool, un programma gratuito della Content Authenticity Initiative. Fa il lavoro dello scanner di un passaporto: dice chi ha fatto il file, con quale programma, quali modifiche ha subito e se la firma è ancora integra. Lo stesso programma, con un certificato, firma un file nuovo, ed è quello che C2PA Sign usa dietro le quinte.

c2patool copertina.png

Per questa copertina risponde, in sostanza, che il file è firmato da OpenAI, creato con ChatGPT da un modello addestrato, convertito, con un watermark dichiarato nei pixel, e che la firma è valida.

Fonti

Fonti consultate il 20 ottobre 2026.

  1. AI Disclosure (si apre in una nuova scheda), progetto su drupal.org, e la sua documentazione: Labels on images, With C2PA Sign (si apre in una nuova scheda). Fonte primaria.
  2. AI Disclosure, documentazione: Suggestions, Reading C2PA content credentials (si apre in una nuova scheda). Fonte primaria.
  3. C2PA Sign (si apre in una nuova scheda), progetto su drupal.org. Fonte primaria.
  4. Content Credentials (si apre in una nuova scheda), progetto su drupal.org. Fonte primaria.
  5. C2PA Explainer 2.3 (si apre in una nuova scheda), Coalition for Content Provenance and Authenticity. Firma, validazione, fiducia. Fonte primaria.
  6. c2patool (si apre in una nuova scheda), Content Authenticity Initiative, e il README di Content Credentials (si apre in una nuova scheda) sulla rifirma e su c2patool 0.9. Fonte primaria.
  7. C2PA Conformance Program (si apre in una nuova scheda), lista di fiducia e certificati. Fonte primaria.
  8. Code of Practice on Transparency of AI-Generated Content (si apre in una nuova scheda), Commissione europea. Marcatura per i fornitori. Fonte primaria.
  9. Guidelines on the transparency obligations of Article 50 (si apre in una nuova scheda), Commissione europea, C(2026) 5054. Paragrafo 117. Fonte primaria.
  10. La mia prova su un sito Drupal 11 di test, con C2PA Sign, Content Credentials e AI Disclosure, letta con c2patool. Misura di prima mano.
5 min 957 parole

Che cosa chiede l'AI Act a chi sviluppa software con agenti AI?

Sono Giorgio Pagano, sviluppatore Drupal freelance: uso agenti AI in tutto il flusso di sviluppo e ho creato AI Disclosure, il modulo della Drupal AI Initiative per dichiarare l'uso dell'AI nei conten...

Modificato dall'AI

Questo contenuto è stato prodotto dall'AI e rivisto da una persona.

Come è stata usata l'AI?

Le bozze sono prodotte con l'assistenza dell'AI, poi dirette, rivedute e verificate da una persona. Numeri, date e versioni sono confrontati con le fonti pubbliche prima della pubblicazione, e la data di quel controllo è indicata nel testo.