ANSACheck Deep Dive

Simone Cosimo
7 min readApr 8, 2020

--

Praticamente ANSA ha deciso di spendere soldi per portare su Blockchain un servizio che avrebbe come scopo quello di garantire l’autenticità di una notizia, chiamato ANSACheck. Questo il link dove è spiegato il funzionamento del servizio (“spiegato” per modo di dire). La cosa mi ha subito incuriosito perché quando in Italia si prova ad andare sul tecnologico c’è quasi sempre, sotto sotto, qualcosa che non funziona tecnicamente (non vi devo parlare della recente storia dell’INPS, dai) o concettualmente (come in questo caso, seguitemi).

A questo link potete trovare un bellissimo articolo, scritto da Fabrizio Carimati (@Clodo76), che tratta in modo molto completo il funzionamento di ANSACheck in maniera molto tecnica e pone anche delle problematiche non da poco. Consigliatissimo, read it!

Per i pigri vi riassumo alla veloce quello succede under the hood:

  • ANSA pubblica delle notizie sul suo sito. Per ogni notizia viene creato uno “scheletro” (che poi vediamo in dettaglio).
  • Ad intervalli regolari di 15 minuti, un hash di questi “scheletri” viene inviata insieme ad un id assolutamente non prevedibile (scusate se uso dell’ironia ogni tanto) ad uno smart contract Ethereum che processerà questi dati e li memorizzerà in un blocco.
  • ANSA vi da poi la possibilità, tramite un bollino a fondo news, di poter controllare l’integrità della notizia. Cliccandoci si possono vedere vari aspetti tipo l’hash del contenuto, l’hash della notizia, un “id” del blocco in cui è memorizzata e la possibilità di verificare l’integrità del blocco stesso.

Tutto bene se non fosse per dei punti in cui personalmente mi perdo e in cui non riesco a capire la praticità di una iniziativa del genere. Spero vivamente che ANSA chiarisca molte cose perché per ora si tratta di puro reverse engineering da parte di chiunque gli stia dando uno sguardo approfondito.

Che fa sto smart contract?

Per capire cosa fa lo smart contract (s.c. da ora in poi), bisogna guardare il codice dello smart contract. Non essendo però open-source, bisogna passare il bytecode (questo sì, disponibile a tutti) sotto le magie di un decompiler e si ha un qualcosa di simile ad uno s.c. con funzioni e strutture dati.

Sempre Fabrizio, in questo tweet, linka il bytecode già inserito nel decompiler.

Il risultato è ovviamente un file poco chiaro al primo sguardo ma secondo me in parte comprensibile dopo che si mettono assieme un po’ di pezzi. Il file è costituito da due funzioni soltanto, il cui scopo si può intuire. Partiamo dalla prima funzione.

Funzione 1

La funzione prende 2 parametri come input e non ha un valore di ritorno. Alla riga 31 vediamo però quello che sembra un richiamo ad una funzione di log (di stampa per farla breve) e uno di questi parametri sembra essere la stringa “News added with id:” che è esattamente la stringa che possiamo vedere nel tab “Event Logs” presente in ogni transazione relativa allo s.c.

Il penultimo valore indica la lunghezza dell’id assegnato al blocco di notizie (la confusione tra blocco di notizie e il blocco eth è evidente, fra poco provo a chiarire) che è, nel caso in esempio, AC202004081100. Sì sì, questo è l’id non prevedibile di cui vi accennavo prima. I valori precedenti non mi sono completamente chiari, parlando onestamente. Il 20 è però inspiegabilmente hard-coded.

Per riassumere possiamo dire che questa funzione è quella che si occupa di salvare dei dati in blockchain. Ma i due parametri?

Il decompiler li definisce array, ma in realtà sono stringhe (e quindi il decompiler non sbaglia). Questo è comprensibile dall’immagine qui sotto.

Potete chiaramente notare l’id e un hash che è quello che ANSACheck chiama Block Hash. Il Block Hash è un MD5 calcolato su un JSON contenente gli scheletri di tutte le notizie nell’arco dei 15 minuti relativi al blocco. Vi chiarisco cosa intendo per scheletri con una foto.

La loro struttura è:

  • id: MD5 calcolato chissà come (di più sotto)
  • title: il titolo della notizia
  • content_hash: MD5 calcolato su parte del contenuto della notizia (di più sotto)
  • event: per ora si sono solo visti i valori ‘publication’ o ‘quote’.
  • timestamp: si spiega da solo

Per concludere: la nostra prima funzione prende id, Hash del blocco (di notizie) e presumibilmente (riga 25 e 26) salva questo hash in una mappa, le cui chiavi sono gli id (in realtà un particolare hash degli id, di più qui). I dati sono ora sulla blockchain come si vede dalla foto sotto che mostra il cambiamento dei valori ai rispettivi indirizzi.

Blocco… di notizie? Blocco Eth?

Qui ci ho messo un attimo, lo ammetto. C’è una confusione tra le due cose evidente e questo mi ha portato fuori per un attimo, ma penso di essere giunto ad una conclusione abbastanza sensata (ovviamente @simocosimo su Twitter per correzioni, se ne avete).

Sul sito di ANSACheck relativo ad una particolare notizia si legge un id che identifica un blocco. Chi è più navigato in blockchain capisce però che non si tratta di un id tradizionale. Questo significa che AC202004081100 è un identificativo che rappresenta l’insieme di notizie scritte nel giorno 8 Aprile 2020, dalle 10:45:00 alle 10:59:59 (ricordate i blocchi da 15 min).

Nei log però abbiamo letto “News added with id:” che potrebbe portare a pensare che ad una singola notizia è stata assegnato un id. Invece no: “news” è inteso al plurale e quell’id è proprio un id di un insieme di notizie.

Alla singola notizia sono assegnati 2 hash:

  • MD5 Contenuto: calcolato su una parte del contenuto della notizia (testo vero e proprio)
  • MD5 News: che non si sa come sia calcolato (prove in corso, aggiorno appena trovo qualcosa). È usato come id della singola notizia.

Funzione 2

Questa sembra più complessa di quella di prima. La mia capacità di lettura di questa funzione è limitata lo ammetto, ma in generale sembra chiaro lo scopo. Passato un parametro (un id di blocco di notizie) viene ritornato l’hash corrispondente memorizzato nel blocco. Il processo di verifica disponibile sul sito di ANSACheck ci fa anche riferimento: “getNewsChain(AC202004081100)”

Quindi? Dopo tutto questo?

Bella domanda! I dubbi sono diversi, provo a elencarveli:

  • Se non sono un “Publisher aderente all’iniziativa” non posso fare uso del bollino? Non c’è un modo per chiunque di citare un articolo ANSA e ottenere questa presunta affidabilità? Si sta cercando di creare uno standard?
    UPDATE 10/04/20: A quanto pare no, non è possibile usare il bollino liberamente. Infatti, in data dell’update, si è scoperto che il sito di verifica di ANSACheck convalida solamente le richieste che arrivano da url di partner convenzionati (o che decide Ansa? Buh). Il risultato di un redirect da un sito non supportato porta al risultato del tweet qui sotto. Il popup è un overlay che è possibile rimuovere (a mano via inspect della pagina si fa in fretta) e solo dopo si può accedere alla cronologia dell’articolo e alla “verifica”.
  • Quando ANSA modifica una notizia, c’è uno storico memorizzato da qualche parte delle versioni precedenti? Il sito dell’iniziativa parla di “versioning trasparente” ma come è possibile? Immagino che sulla blockchain non ci sia perché in input non ci sono le singole notizie, c’è solamente un hash che ne rappresenta un gruppo. Se è una timeline memorizzata in server grazie, ma non è blockchain.
  • Il processo di verifica mi fa un po’ pensare… Praticamente ANSA ha dei dati memorizzati su un server, ne crea un hash e lo carica in blockchain. Poi controlla che quello che ha caricato è coerente con quello che ha in locale. L’unico caso in cui questo confronto non risulta positivo (che per ora mi viene in mente) può essere una modifica dei dati salvati in locale… quindi è un sistema di controllo di integrità dati?
  • La notizia ANSA chi me la certifica? ANSA? ahahah

Ho finito giuro. Ho provato a dare il mio contributo sulla questione. Esplorare il tutto è stato anche molto divertente e ho imparato un bel po’ di cose quindi

Se trovate errori e avete critiche o aggiunte mi trovate su Twitter, @simocosimo. Grazie del tempo che mi avete dedicato.

Questo post è certificato da me, comunque.
SIMOCheck ma il cane mi ha mangiato la blockchain.

--

--

Simone Cosimo
Simone Cosimo

Written by Simone Cosimo

If it’s tech related, I’m into it

Responses (1)