Il file arriva come JPEG. Lo screenshot da telefono di un estratto conto, ritagliato sulla pagina, leggermente inclinato. Nessuna stringa producer. Nessun font. Nessuna cronologia delle revisioni. Nessun content stream. Solo un rettangolo piatto di pixel.
Qualche mese fa abbiamo scritto un lungo articolo su ciò che un PDF non può nascondere: i marcatori dell'editor, le tabelle dei font, i salvataggi incrementali che conservano la cronologia delle modifiche del file stesso. Tutto vero. Tutto sparito qui. Questo file non ha più nulla da nascondere, perché chiunque lo abbia creato ha buttato via la struttura del file.
Quando il file smette di parlare, il documento deve ancora farlo.

Tre modi per lavare un documento
La forense strutturale ha un punto cieco che ogni falsario serio ha scoperto: ispeziona il contenitore del file, e il contenitore è opzionale.
Ci sono tre modi comuni per sbarazzarsene.
- Stampa e nuova scansione. La modifica avviene in un editor PDF, il risultato passa attraverso una stampante e uno scanner, e ciò che ne esce è la scansione onesta di una pagina disonesta. Ogni traccia strutturale rimane sul primo computer.
- Rigenerazione. Si consegna la pagina a un modello di immagini con "cambia il saldo di chiusura in 4.820,00". Restituisce una nuova immagine. Non un file modificato: uno nuovo, senza alcuna cronologia.
- Salto di formato. Esporta in PDF, fai uno screenshot, invia lo screenshot, lascia che il sistema ricevente lo reincapsuli in un PDF. Ogni conversione ricicla un po' di più.
Cosa emerge dal lavaggio
Lo stesso estratto conto falsificato, consegnato in quattro modi. Le prove su come è stato creato il file scompaiono. Ciò che il documento dichiara passa intatto.
| Prova | PDF modificato | Stampa e scansiona | Rigenerato con AI | Salto con screenshot |
|---|---|---|---|---|
| Come è stato creato il file | ||||
| Marcatori dell'editor nella pagina | presenti | spariti | spariti | spariti |
| Font, revisioni, cronologia oggetti | presenti | spariti | spariti | spariti |
| Producer e metadati | presenti | dello scanner | spariti | del convertitore |
| Cosa dichiara il documento | ||||
| Saldi, totali, somme parziali | intatti | intatti | intatti | intatti |
| Cifre di controllo IBAN e RIB | intatte | intatte | intatte | intatte |
| Sigillo 2D-Doc firmato dall'emittente | intatto | intatto | ridisegnato | intatto |
| Identità visiva dell'emittente | intatta | intatta | intatta | intatta |
Un rilevatore che legge solo il file si ritrova con due pessime opzioni quando arriva una scansione. Per il file, ogni scansione sembra uguale: un nuovo producer, nessun font, un'immagine per pagina, modificata o meno. Quindi o tratta ogni scansione come sospetta, e gli analisti imparano a ignorarla, o lascia passare ogni scansione, e i falsari imparano a stampare.
In entrambi i casi, sta giudicando lo scanner, non la modifica.
Cosa sopravvive al lavaggio
Ecco la cosa che un falsario non può riciclare: le dichiarazioni.
Un estratto conto dichiara un saldo iniziale, un elenco di transazioni, un saldo di chiusura e un periodo di riferimento. Dichiara un IBAN le cui cifre di controllo sono calcolate dal resto. Dichiara di provenire da una banca specifica, con l'intestazione e il layout di quella banca. Un avviso di accertamento fiscale francese può riportare un sigillo che l'amministrazione emittente ha firmato con la propria chiave privata.
La stampa non cancella nulla di tutto ciò. Nemmeno passare la pagina attraverso un modello di immagini lo cancella: rende solo la coerenza un problema del falsario. Quindi la domanda si ribalta. Non "come è stato creato questo file?" ma "questo documento può essere vero?"
Questo cambiamento ci ha costretti a modificare il modo in cui pesiamo le prove. Oggi, ognuno dei nostri 92 segnali appartiene a uno di quattro livelli, e il livello decide cosa un segnale è autorizzato a fare a un verdetto.
Non tutte le prove sono autorizzate a condannare
Il livello di un segnale, non il suo conteggio, decide cosa può fare a un verdetto. Venti conteggi anomali si sommano comunque a "vale la pena dare un'occhiata".
La forense strutturale vive principalmente nei due livelli intermedi. Il lavaggio li distrugge entrambi. Le contraddizioni sono le prove che sopravvivono al lavaggio, quindi è lì che abbiamo scavato.
Aritmetica, al centesimo
Un'equazione di bilancio è il controllo più vecchio del mondo: saldo iniziale, più accrediti, meno addebiti, uguale saldo di chiusura. Tutti dicono di farlo. I dettagli decidono se funziona o ti mente.
La tolleranza. La nostra pipeline di estrazione riconcilia i saldi con una tolleranza di 0,02 €, perché un modello che legge una scansione rumorosa occasionalmente perderà un centesimo e non vogliamo bocciare un estratto conto onesto per questo. Il controllo antifrode usa 0,005 €. Due modifiche da un centesimo spostano un saldo di esattamente 0,02 €, e un falsario che conosce la tua tolleranza sa quanto può rubare per riga.
Più di un'equazione. Un estratto conto stampa la stessa verità più volte. La riga dei totali deve essere uguale alla somma delle righe. Il riepilogo nell'intestazione deve essere uguale ai totali. Un saldo intermedio stampato a metà tabella (una riga di fine mese "SOLDE AU 30/11") deve corrispondere al totale parziale in quella riga esatta. Cambia una transazione, e un falsario ora ha quattro numeri da riparare invece di uno.
Il falsario ha corretto il saldo di chiusura. Altre tre equazioni non concordano.
Un accredito di stipendio aumentato di 1.000 €, e il saldo di chiusura aumentato per corrispondere, così il classico controllo del saldo passa. L'estratto conto stampa la stessa verità in altri tre punti, e nessuno li ha corretti.
| Data · causale | Addebito | Accredito | Saldo |
|---|---|---|---|
| 01/10 · Saldo iniziale | 2,104.30 | ||
| 02/10 · Stipendio, ACME SAS | 2,480.00modificato | ||
| 05/10 · Affitto | 850.00 | ||
| Saldo al 15/10 | 2,734.30 | ||
| 18/10 · Pagamenti con carta | 127.45 | ||
| 24/10 · Bonifico in entrata | 300.00 | ||
| Totali | 977.45 | 1,780.00 | |
| 31/10 · Saldo di chiusura | 3,906.85modificato anche questo |
Date e identificatori. Ogni transazione dovrebbe rientrare nel periodo stampato. Un periodo non dovrebbe finire prima di iniziare. Un IBAN contiene un checksum MOD-97, e uno francese contiene anche una chiave RIB. Cambia una cifra e si rompono entrambi, a meno che il falsario non li ricalcoli.
Ecco cosa è successo quando abbiamo falsificato estratti conto nativi digitali sul posto (stesso font, salvataggio pulito, nessuna traccia strutturale) e li abbiamo eseguiti con questi controlli disattivati, e poi attivati:
Modifiche che il file non può vedere, scoperte dalla pagina
Ognuna di queste modifiche lascia il PDF strutturalmente pulito. Prima dei controlli sui contenuti, tutte e quattro sono state scoperte 0 volte.
Zero prima, perché queste modifiche sono state salvate in modo pulito, sul posto, con lo stesso font. Il file non aveva nulla da dire al riguardo. La pagina sì.
Le cicatrici
Due cose che abbiamo imparato a nostre spese.
Mai fidarsi di un anno dedotto. Molti estratti conto stampano "31.10" senza l'anno, e ogni parser lo indovina. Sugli estratti conto autentici di una banca, il nostro parser inseriva le date di valuta esattamente con un anno di anticipo ogni volta che una transazione superava il limite del mese: 364 giorni di errore, su ogni campione. Un controllo della data che si fosse fidato di quell'ipotesi avrebbe segnalato ogni cliente onesto di quella banca. Una data conta come prova solo quando la banca ha stampato l'anno.
Un controllo di coerenza è un'affermazione sul tuo lettore tanto quanto sul documento. Quando abbiamo eseguito per la prima volta il controllo del saldo su estratti conto grezzi in produzione, è scattato sul 19% di essi. Non era un'ondata di frodi. Era il nostro parser che leggeva male le righe, trovando tipicamente una riga senza il suo importo. Una contraddizione aritmetica è una prova solo se sei certo di aver letto bene i numeri. Quindi il controllo viene eseguito solo dove leggiamo direttamente il testo del PDF, su pagine native digitali, senza OCR di mezzo. E da solo solleva un avviso, non un verdetto.
Non serve un falsario per fallire un controllo del saldo. Basta un bug del parser.
Il testo che dice una cosa e ne disegna un'altra
C'è un inghippo nel "leggere direttamente il testo del PDF". Un falsario che sa che ci fidiamo del testo nativo digitale può saltare completamente il lavaggio e mentire invece al parser. Ogni pipeline di estrazione legge il livello di testo, inclusa la nostra e ogni pipeline LLM, il che rende il livello di testo stesso una superficie di attacco.
Un PDF può allegare una sostituzione /ActualText a una serie di glifi, disegnando una cifra sullo schermo mentre ne fornisce un'altra a ogni estrattore di testo. La mappa /ToUnicode di un font può essere ricablata in modo che la forma sia un 7 e il testo copiato sia un 1. Il sottoscrittore umano vede un estratto conto. Il controllo automatico del saldo ne convalida un altro. Entrambi passano, perché stanno leggendo due documenti diversi.
Una pagina, due documenti
I glifi e il livello di testo sono cose separate in un PDF. Nulla li obbliga a concordare.
BT /F1 11 Tf 412 318 Td
/Span << /ActualText (1,450.00) >> BDC
(9,450.00) Tj % the glyphs a human sees
EMC
ETQuindi abbiamo smesso di fidarci del livello di testo per i numeri. Prendiamo ogni cifra che un font dichiara di disegnare, la renderizziamo da sola, la rileggiamo con l'OCR e la confrontiamo con il livello di testo. Nel nostro benchmark questo ha rilevato 101 scambi /ActualText su 101, con zero falsi positivi su 208 file autentici.
Abbiamo incontrato una versione più grezza della stessa idea in produzione, su un estratto conto che dichiarava di provenire da un'importante banca francese. Il falsario non si è preoccupato di eliminare le transazioni originali: ha disegnato rettangoli bianchi opachi sopra le righe e ha digitato nuove cifre sopra, 48,00 posizionato direttamente sopra 162,00. All'epoca, il nostro motore lo aveva valutato come normale. Oggi controlliamo l'ordine di disegno per gli importi sepolti sotto un successivo riempimento opaco con nuovo testo disegnato sopra, e viene valutato ad alto rischio. (Il controllo ha bisogno di entrambe le metà. Un riempimento bianco da solo è scattato su 13 file autentici, perché alcuni driver di stampa ombreggiano le celle della tabella dopo aver disegnato il testo.)
Se il tuo controllo antifrode e il tuo estrattore leggono lo stesso livello di testo, un falsario deve ingannarlo solo una volta.
La crittografia sopravvive allo scanner
Ogni controllo finora chiede se il documento concorda con se stesso. Un falsario attento può vincere quel gioco. Se cambia una transazione e poi aggiorna accuratamente la riga dei totali, il riepilogo dell'intestazione e il saldo parziale, l'aritmetica da sola non lo scoprirà.
Alcuni documenti contengono un controllo che nessuna quantità di attenzione può sconfiggere. Le amministrazioni e le utenze francesi stampano un 2D-Doc: un codice a barre Data Matrix che contiene i campi chiave del documento (nome, indirizzo, importi fiscali, periodo di riferimento), firmato con la chiave privata dell'emittente secondo lo standard ANTS.

Il sigillo ha una proprietà che le prove strutturali non hanno mai avuto: sopravvive al lavaggio. Un codice a barre si stampa e si scansiona di nuovo perfettamente.
Controllare un documento rispetto al suo emittente, non rispetto a se stesso
Il sigillo viene letto dai pixel, quindi funziona su una scansione, una foto o una stampa di una stampa.
Quest'ultimo caso proveniva da un gruppo di avvisi di accertamento fiscale creati con un kit di desktop-publishing. Il codice a barre sembrava corretto. Qualcuno ha disegnato l'immagine di un sigillo, sperando che nessuno lo scansionasse.
Il controllo di coerenza più forte non è il documento che concorda con se stesso. È il documento che concorda con la chiave del suo emittente.
Ha l'aspetto di chi dichiara di essere?
La falsificazione più economica non tocca i numeri. Prende un estratto conto autentico di una piccola banca e ci incolla sopra l'intestazione di una grande banca.
I numeri sono onesti. Solo la carta intestata mente. Quindi confrontiamo la pagina, porzione per porzione, con pagine di riferimento verificate per ogni famiglia di banche e chiediamo a quale assomigli effettivamente. Quando la banca che nomina e la banca a cui assomiglia non concordano con un margine netto, segnaliamo la discrepanza.
Su un set di test tenuto da parte, questo ha rilevato il 75% dei falsi con scambio di intestazione, scattando su solo 1 di 213 documenti autentici. Quell'unico falso positivo è istruttivo: un file la cui prima pagina era il retro della pagina della banca, che non assomiglia all'intestazione di nessuno.
E sì, i pixel
Niente di tutto questo significa che ignoriamo l'immagine. Quando un documento viene rigenerato da un modello di immagini, i pixel sono l'unico posto in cui il modello lascia una firma.
I rilevatori generici di immagini AI sono addestrati su foto, e i documenti non sono foto. Ne abbiamo testato uno su pagine di documenti rigenerate dall'AI, a una soglia che segnala solo l'1% dei documenti autentici (misurato su circa 825 pagine autentiche per canale, perché un rilevatore rumoroso è uno che gli analisti imparano a spegnere). Ne ha rilevato il 20%. Ottimizzata sulle pagine dei documenti, la stessa architettura ne ha rilevato il 90% dopo la nostra conversione di upload, l'85% dopo un passaggio su WhatsApp e il 95% su pagine provenienti da un modello di immagini che non aveva mai visto in fase di addestramento.
Ecco l'inghippo, e il motivo per cui il rilevamento dei pixel non può reggersi da solo: quando un falsario ritaglia una piccola porzione, rigenera solo quella e la incolla di nuovo, il rilevamento scende quasi a zero. Tra lo 0% e il 4%, anche a risoluzione nativa.
Due livelli, due punti ciechi, nessuna sovrapposizione
Percentuale di pagine rigenerate dall'AI rilevate, a una soglia che segnala l'1% delle pagine autentiche.
È qui che i livelli smettono di essere una checklist e iniziano a coprirsi a vicenda. Un modello di immagini a cui viene chiesto di cambiare un numero in una pagina densa tende a ridisegnarla tutta: le cifre altrove si spostano, le parole tornano leggermente distorte. Il rilevatore di pixel vede il re-render. E un falsario attento che rigenera solo una piccola porzione per sfuggirgli finisce dritto nell'equazione di bilancio, nel checksum dell'IBAN e nel sigillo crittografico.

Anche due abitudini più piccole contano qui. Leggiamo ogni upload di immagine prima di convertirlo in PDF, perché la conversione cancella la cronologia JPEG, la miniatura incorporata della fotocamera e qualsiasi dichiarazione di provenienza. Alcuni generatori etichettano il proprio output come creato dall'AI nei metadati del file, e nessuno falsifica quell'etichetta contro se stesso. Le copie ripulite non la riporteranno, quindi la sua assenza non significa nulla. La sua presenza significa molto.
Non controllato non significa superato
La regola singola più importante nel nostro motore antifrode è noiosa: quando un controllo non può essere eseguito, lo dice.
La maggior parte delle scansioni non ha un parser che le legga, quindi l'aritmetica non può essere eseguita. Molti documenti non corrispondono ad alcun template di riferimento, quindi i confronti dei template non possono essere eseguiti. Un punto verde accanto a un controllo significa "controllato, nulla di rilevato". Mostrare quel punto per un controllo che non è mai stato eseguito dice al revisore che una scansione è stata verificata quando non è stata nemmeno letta.
Un punto vuoto non è un punto verde
Come un'analisi riporta una scansione da una banca che i nostri parser non leggono ancora.
Lo abbiamo imparato a nostre spese. In produzione, lo stesso identico file una volta ha ottenuto 98,75 (alto rischio) e tre ore dopo 0,0 (affidabile). Alla prima esecuzione, la corrispondenza del template visivo è tornata vuota. Invece di astenersi, sei controlli sono ripiegati su una baseline generica per estratti conto e hanno segnalato un documento ordinario come estremamente anomalo. Ora quei controlli si astengono, l'analisi dice "non controllato" con il motivo, e un confronto mancante può costare a un documento il suo badge di affidabilità ma non può mai condannare un richiedente.
Due numeri, non uno
Un rilevatore di frodi ha due modi per fallire. Può segnalare persone oneste e può perdersi le falsificazioni. La maggior parte dei dati di accuratezza pubblicati misura uno di questi, su un set che nessun altro può vedere.
Noi li teniamo entrambi, e li misuriamo entrambi a ogni modifica.
Precisione, su ciò che i clienti caricano effettivamente. Prima che qualsiasi modifica ai segnali venga rilasciata, la rieseguiamo contro le analisi di produzione archiviate. Quando abbiamo inasprito le nostre regole di verdetto per richiedere contraddizioni invece di anomalie accumulate, la pila ad alto rischio su 224 documenti di clienti in una finestra di 30 giorni è passata da 90 a 9, e nessuna delle falsificazioni che avevamo confermato a mano ne è uscita.
Richiamo (Recall), sulle falsificazioni che creiamo noi stessi. Nessuno ti consegna un set etichettato delle frodi che ti sei perso, quindi costruiamo il nostro: documenti autentici, falsificati in dozzine di modi, ogni falso passato attraverso la vera pipeline. Su 2.080 falsificazioni, l'aggiunta dei controlli sui contenuti di cui sopra ha portato il tasso di rilevamento dal 35,4% al 63,6%. Prima di essi, le falsificazioni il cui unico difetto era che le cifre non concordavano venivano rilevate il 5% delle volte.
Entrambe le direzioni, misurate prima di ogni modifica
63,6% significa che circa un terzo passa ancora. Pubblichiamo quel numero perché l'alternativa è pubblicarne uno più bello che non potremmo difendere. Il benchmark ci dice anche esattamente quale terzo: un nome dell'intestatario del conto modificato (0 su 48), estratti conto che nessun parser legge, una modifica attenta che ripara ogni totale. Quell'elenco è la nostra roadmap.
A che punto siamo
In Holofin, la frode documentale è uno dei problemi per cui siamo pagati per essere paranoici, e il lavoro qui sopra segue alcune regole con cui non eravamo partiti:
- Un verdetto si basa su una contraddizione. Conteggi e anomalie classificano la coda. Solo un documento che non può essere vero viene condannato.
- Ogni confronto ha bisogno di un riferimento, o si astiene. Il template corrispondente dell'emittente, o ciò che questo producer PDF emette normalmente. Altrimenti, "non controllato".
- Leggi la dichiarazione, non solo il contenitore. Cifre al centesimo, date che la banca ha effettivamente stampato, checksum, sigilli rispetto alla chiave dell'emittente, l'aspetto dell'emittente.
- Mai fidarsi del livello di testo per una cifra. Ciò che una pagina disegna e ciò che dice possono differire, di proposito.
- Misura entrambe le direzioni. Precisione sul traffico reale, richiamo sulle falsificazioni, prima di ogni modifica.
In pratica, si tratta di 92 segnali tra struttura del file, tipografia, metadati, pixel, sigilli crittografici e aritmetica finanziaria, ognuno in grado di puntare alla pagina, alla regione e, quando può, al campo che ha fallito.
Un falsario può lavare via il modo in cui un documento è stato creato, e far sembrare reale ciò che resta. Ciò che dice deve comunque essere vero: al centesimo, rispetto alla chiave dell'emittente, nell'aspetto stesso dell'emittente. Quella parte non scompare nel lavaggio.
Articoli correlati

Il tuo estrattore di tabelle ha superato il test. I numeri no.
Una revisore apre il tuo risultato di estrazione per uno stato patrimoniale. Il modello mostra una precisione per cella del 99,2%. Impressionante. Poi calcola il totale della colonna delle attività a mano, come fanno i revisori, e ottiene un numero sfasato di una riga. Le attività non sono più uguali alle passività più il patrimonio netto. Il bilancio non quadra.

Rilevamento frodi documentali: Cosa un PDF non può nascondere
Pensavamo che la frode documentale fosse un problema visivo. Font sbagliati. Colonne disallineate. Un logo che sembrava leggermente fuori posto. Abbiamo costruito controlli basati su ciò che gli umani vedono, perché ciò che gli umani vedono era tutto ciò che avevamo.

Quando i documenti si ribellano
Pagina 1: Riepilogo conto, due colonne. Pagina 15: Stesso conto, tre colonne, nomi delle intestazioni diversi. Pagina 47: Una scansione con una macchia di caffè. Pagina 89: La pagina dei totali, che fa riferimento a transazioni estratte 70 pagine fa.