ANSAcheck … ma perchè?

Edit-add: questo articolo è nato come curiosità, per capire il giro ANSAcheck. Ho aggiunto in fondo la sezione ‘Altri articoli o video sullo stesso tema’, in modo da poter mixare le informazioni che otteniamo.

ANSA ha implementato ANSAcheck,

https://www.ansa.it/sito/static/ansa_check.html

“una soluzione che consente di “certificare” l’origine ANSA delle notizie grazie alla tecnologia Blockchain, che agisce come garante di trasparenza, sicurezza e apertura dell’informazione.”

TL;DR;

L’implementazione attuale di ‘verifica’ prevede passaggi che attualmente non mi risulta siano praticabili da terze parti. Dovendo fidarsi del dominio ANSA.it, mi risulta tutto inutile. 

Inoltre nella blockchain Ethereum viene salvato un ID specifico di ANSA (tra l’altro determinabile, essendo una data), NESSUN HASH di contenuti. Tecnicamente, è un timestamp su blockchain di un ID specifico di ANSA, di cui non colgo il senso.

Infine, i contenuti pubblicati sul sito web ANSA non corrispondono (perlomeno in termini di eventi) a quel che riportano nello storico su cui è basato il procedimento di verifica.

Mia opinione

Premessa: sono un fan della tecnologia blockchain, che ha e può avere diverse applicazioni pratiche e logiche. Ma come ogni tecnologia, non è una panacea.

A livello concettuale (sotto entro più nel merito tecnico) di ANSAcheck mi sfugge lo scopo al lato pratico utente.

Se leggo la notizia inventata “La cioccolata cura il covid19, notizia ANSA!”:

1- Se è riportata sul sito ANSA, è autentica per forza (garantita da protezione SSL sul dominio), e un sistema come ANSAcheck non serve.

2- Se l’ho letta su una testata giornalistica diversa,

2.1 – Se non riporta il bollino ANSAcheck (p.s. attualmente non ho ancora trovato una notizia ANSA rilanciata da altri che riporta tale bollino), allora il lettore deve cercare la notizia sul sito ANSA, e a quel punto torniamo al punto 1).

2.2 – Se riporta il bollino ANSAcheck (come link a ansa.it), a) siamo comunque al punto 1), e b) sarebbe bastato che il bollino punti all’articolo originale su ansa.it, senza tutto il giro ANSAcheck.

NON è possibile, partendo da un articolo rilanciato da una fonte non-ANSA, ricavare i dati che servono per consultare la blockchain senza passare prima dal sito ANSA. Se devo passare dal sito ANSA… discorso sopra.

Inoltre, i dati salvati su blockchain Ethereum sono inutili perchè richiedono comunque un trust nei confronti di ANSA per una eventuale (anche se impossibile ad ora) verifica di terze parti.

Di buono c’è che ora ANSA fornisce informazioni come ad esempio quando modifica una notizia, o il tempo intercorso tra la creazione e la pubblicazione. Potevano chiamarlo ANSAopen piuttosto, imho.
….
Aggiornamento: NO, capita che le date degli articoli sul sito ANSA siano posteriori alla data dell’ultimo evento dello storico per le ‘certificazioni’, compresa la data dell’evento pubblicazione (e no, non c’entra fuso ITA vs UTC). In fondo nelle note un esempio oltre ad altre mie perplessità.

Un occhiata passo passo

Provo a spiegarvi passo passo in cosa consiste la parte pubblica del sistema, partendo da un articolo di riferimento come esempio:

https://www.ansa.it/sito/notizie/cronaca/2020/04/06/buddisti-15-mln-euro-per-90-enti_f8dc8da1-5c4e-45f9-a839-047fd42363d7.html

PAGINA bollino ANSACHECK

Il link del ‘bollino’ “ANSAcheck – Notizie d’origine certificata” punta a

https://blockchain.check.ansa.it/landing/299de19d773a31c6a31a1b65233d4750/XCW7SUR847X047N

Qui abbiamo:

“MD5 News”: Ignoro attualmente come è computato. NON è l’MD5 del titolo, e non trovo documentazione in merito.

“MD5 Contenuto”: Dovrebbe essere un hash MD5. Cliccando le freccette, ci permette di vedere il corpo della notizia, che copia-incollato in https://www.md5hashgenerator.com/ al fine di verificarne la generazione hash terze parti, genera un hash diverso (notare: lo stesso metodo indipendente successivamente funziona sul corpo del blocco, quindi evidentemente non mostrano l’esatto testo su cui loro han generato il loro hash MD5).

Abbiamo l’elenco degli ‘eventi’ relativi alla notizia, in questo caso due eventi, la registrazione e la pubblicazione.

Analizziamo l’evento registrazione

ANSA ha il concetto di blocco in cui salva X eventi, che NON è il blocco blockchain.

Questo perchè evidentemente non salvano nella blockchain Ethereum OGNI evento (gli costerebbe troppo di fee?), ma raggruppano X eventi in un blocco loro ANSA, e ‘certificano’ quello. Nel nostro caso di studio, è il blocco AC202004061245 (ripeto, codice interno ANSA).

CERTIFICATO ANSACHECK

Cliccando “CERTIFICATO ANSACHECK” arriviamo qui:

https://blockchain.check.ansa.it/certification/AC202004061245

che come detto rappresenta il blocco, cioè un insieme di articoli/notizie/eventi, non singolarmente la notizia d’origine.

Qui vediamo:

  • Il BLOCK ID, quello referenziato dall’url che stiamo guardando
  • Il BLOCK HASH.
    E’ l’hash MD5 del JSON citato sotto in “Informazioni contenute nel blocco”.

Verifica indipendente, cliccate sul pulsante ‘copia in appunti’, andate su https://www.md5hashgenerator.com/ , incollate, genera 1e52cc6ff8daeff462cab1461eb18f0a
che è appunto l’hash citato in BLOCK HASH. Il dettaglio delle informazioni nel blocco è trattato successivamente. Almeno questo giro ha funzionato.

INFORMAZIONI CONTENUTE NEL BLOCCO

E’ un JSON con i vari record del blocco, nel nostro esempio

 {
        "id": "5029aaf4545931352300a1dd86eaffbe",
        "title": "Coronavirus: Buddisti, 1,5 mln euro per 90 organizzazioni",
        "content_hash": "9a08dcdf83759174fc97ae2f971e3a1b",
        "event": "publication",
        "timestamp": "2020-04-06T12:31:50.000Z"
 },
  • ID – ID univoco interno ANSA
  • Title – Titolo
  • Content Hash – Questo è l’aspetto catartico. Al 99% è un altro MD5, ma non è chiaro (e dovrebbe, altrimenti tutto crolla) come una terza-parte possa calcolarlo.
  • Event – Tipo (non entro nel dettaglio dei vari enum, non importa)
  • Timestamp – Data

TRANSAZIONE ETHEREUM

I dati custom salvati sulla blockchain pare siano questi:

Han salvato l’ID del blocco ANSA, NON c’è alcun HASH salvato nella blockchain.

Oltretutto, l’ID del blocco ANSA è determinabile (pare una data in formato AC + data (del blocco?) in formato ISO 8601 senza delimitatori).

Simone Cosimo in un articolo su Medium analizza più nel dettaglio il codice sorgente dello smart-contract Ethereum, decompilazione del bytecode e analisi.

Vi ricordo che nel passato son capitati bug anche molto gravi nella scrittura di codice sorgente di smart-contract (es. DAO su Ethereum: https://medium.com/@ogucluturk/the-dao-hack-explained-unfortunate-take-off-of-smart-contracts-2bd8c8db3562). 

Curiosità, si può sapere cosa pagano in $ per archiviare queste informazioni e altri dettagli (attualmente circa 0.07$ ogni ventina di eventi, a spanne).

ESEGUI VERIFICA

Il pulsante ESEGUI VERIFICA pare che verifica che il blocco che risulta ad ANSA corrisponda a quello nella blockchain.

NON verifica la notizia di partenza, in nessun momento utilizza il testo originale della notizia, non computa i content_hash del blocco.
Tecnicamente, fa ‘qualcosa’ lato client javascript, con una sola chiamata AJAX.

Per me, tutto questo è puro marketing, perchè tutta la procedura in pratica si auto-chiede la verifica, interrogando se stesso (una richiesta AJAX ad un sottodominio ansa.it). Sarebbe stato un po’ meglio se ci fossero state richieste AJAX verso un explorer Ethereum di terze parti.

Potrebbe fallire solo nei seguenti casi:

  • ANSA.it è stato compromesso (dati del blocco alterati). Irrilevante, perchè a quel punto potrebbe essere compresso il processo di verifica e restituire sempre SUCCESSO.
  • La blockchain Ethereum è stata compromessa. Ma se questo potrebbe accadere, allora tanto valeva usare un MySQL garantito dalla fonte in trust ANSA.

L’output della verifica è:

Verifying ANSAcheck Block AC202004061245 certification …
Calculating MD5 of AC202004061245 content…
Input: [{"id":"b58b3c33e6202623385efe15995a2deb","title":"Coronavirus: Ascani, confronto sia su come tornare a scuola","content_hash":"f8a53969fbec0be49690b034bfd2b9fc","event":"publication","timestamp":"2020-04-06T12:30:49.000Z"},{"id":"6ba06e89dc21f538f0dd01723807602e","title":"Coronavirus: giustizia per Bergamo, 30mila firmano petizione","content_hash":"7990e39976eaf11a720599989b26e217","event":"publi.....
Output: 1e52cc6ff8daeff462cab1461eb18f0a
Calling getter on ANSAcheck smartcontract to retrieve information…
Input: getNewsChain(AC202004061245)
Retrieved information: 1e52cc6ff8daeff462cab1461eb18f0a
Hash matches! News verified successfully!

In dettaglio, riga per riga:

Verifying ANSAcheck Block AC202004061245 certification …

D’accordo.

Calculating MD5 of AC202004061245 content…

A che pro, è tutto in casa, te lo stai chiedendo da solo.

Input: [{"id":"b58b3c33e6202623385efe15995a2deb","title":"Coronavirus: Ascani, confronto sia su come tornare a scuola","content_hash":"f8a53969fbec0be49690b034bfd2b9fc","event":"publication","timestamp":"2020-04-06T12:30:49.000Z"},{"id":"6ba06e89dc21f538f0dd01723807602e","title":"Coronavirus: giustizia per Bergamo, 30mila firmano petizione","content_hash":"7990e39976eaf11a720599989b26e217","event":"publi.....

Ok, sta calcolando 1e52cc6ff8daeff462cab1461eb18f0a, tutta roba che ha già in casa, pare scena.

Output: 1e52cc6ff8daeff462cab1461eb18f0a

Ok.

Calling getter on ANSAcheck smartcontract to retrieve information…
Input: getNewsChain(AC202004061245)

Ha fatto una richiesta AJAX a
https://scl.check.ansa.it/api/ncblock/AC202004061245/transaction
Ottenendo come risposta il JSON

{"get_news_block":"1e52cc6ff8daeff462cab1461eb18f0a"}
Retrieved information: 1e52cc6ff8daeff462cab1461eb18f0a

In pratica si è chiamato da solo (sempre ansa.it) per ottenere lo stesso hash 1e52cc6ff8daeff462cab1461eb18f0a sopracitato. Presumo che qualcosa server-side abbia consultato la blockchain Ethereum per ottenere quell’hash, ma ci dobbiamo fidare (quindi a che serve? mah).

Hash matches! News verified successfully!

Quindi ha confrontato l’hash calcolato nella prima fase, con un hash ottenuto dalla seconda.

Corrispondono, “verified successfully!”.

Entrambe le operazioni sono fatte da ANSA, non una verifica di terze parti. L’effetto step uno ad uno, ad intervallo di circa un secondo, a occhio è solo scena.

Note varie

  • Non mi è chiaro perchè non si è utilizzato degli standard aperti, come ad esempio https://opentimestamps.org/ (scherzo, immagino sia chiaro a tutti…).
  • Non mi è chiaro perchè si è preferita la blockchain Ethereum rispetto a quella Bitcoin, che ha un hashrate molto maggiore, che nel mondo blockchain significa più sicura (meno suscettibile ad attacchi).
    La risposta dovrebbe essere l’uso degli smart-contract, ma in assenza di dettagli, tutto quello sin’ora realizzato poteva essere benissimo salvato in OP_RETURN di TX Bitcoin.
    Oltretutto Ethereum dovrà fare lo switch da proof-of-work a proof-of-stake, tecnologia di fatto mai testata in produzione su questa scala, ma questi son discorsi opinabili.
  • Mi pare discutibile l’uso di MD5 al posto di, come minimo, SHA256. MD5 è considerato obsoleto da oltre una decade. Vlastimil Klima nel 2006 ha scritto un algoritmo in grado di trovare una collisione MD5 in un minuto con un notebook Pentium: https://eprint.iacr.org/2006/105 .

    Non so cosa comporterebbe prendere un articolo che cita un numero (ad esempio fondi stanziati di una manovra di governo), aggiungere un paio di zeri all’importo e tanti caratteri invisibili fino ad ottenere una collisione (lo stesso MD5 della notizia originale). A occhio penso sia fattibile, ma non sono un crittografo.
  • “MD5 News” e “MD5 Contenuto” e “content-hash” dei singoli eventi non sembrano calcolabili (o non tornano) da una terza parte.
  • Tutta la parte di “Processo di verifica” è totalmente inutile e irrilevante. In pratica si dice da solo “ok sono affidabile”.

Per ora mi fermo qui. Complimenti se avete letto fin qui, grazie.

Aggiunta 9 aprile 2020 – Whitelist siti ammessi alla consultazione storico

@bellapersonaa mi ha fatto notare che a partire da oggi, qualsiasi link ad una scheda di ANSAcheck (esempio) è permessa solo a un elenco di siti (whitelist) decisa da ANSA, altrimenti:

Immagine

Il “CHIUDI” chiude la finestra, impedendo di visionare “La storia di questa notizia” (a meno di tools tecnici).

Riflessione pratica: ANSA pubblica una fake-news. ANSA la pialla. Se non c’è un link al bollino della notizia piallata nel sito ANSA, la visione della storia di quella notizia piallata è inibita.

Riflessioni tecniche (verificano l’header HTTP ‘Referer’):

  1. Non mi risulta pubblica questa lista di Referer accettati.
  2. L’header è opzionale, può essere disabilitato, con la conseguenza che quel messaggio potrebbe venir mostrato ANCHE se visualizzo la notizia proprio da ansa.it.
  3. Esistono best-practice (via Referrer-Policy o Content-Security-Policy) che potrebbero specificare di non inoltrare il Referer (di solito per privacy). Ma noi speriamo che i siti che ospiteranno la verifica ANSAcheck non siano mai in grado di fare questo (← ironia).

Curioso che è stato introdotto così, giorni dopo l’annuncio del sistema. Sembra quasi che sia un’ideona nata al volo, non prevista nel design iniziale del sistema.

History articolo

08 aprile 2019 : Prima versione di questo articolo
09 aprile 2019: Aggiunti riferimenti ad altri articoli che trattano lo stesso tema
09 aprile 2019: Aggiunta la sezione “Whitelist siti ammessi alla consultazione storico”

Altri articoli o video sullo stesso tema

ANSACheck Deep Dive – di Simone Cosimo – Entra particolarmente nel merito dello smart-contract Ethereum

CERTIFICAZIONE BLOCKCHAIN DI ANSA? – Video YouTube, evidenzia particolarmente l’incongruenza tra i dati riportati nel sito ANSA rispetto ai dati pubblicati nel loro storico (base del sistema ANSAcheck).

3 thoughts on “ANSAcheck … ma perchè?”

  1. Il senso è quello di poter verificare che la fonte della notizia che si sta leggendo è una notizia ansa che non è stata pubblicata sul sito ansa.it ( cioè fa parte di quelle notizie rilasciate solo alle testate giornalistiche ) ?

  2. Ciao, ci sarebbero varie osservazioni sul post, andrei subito alla più importante, quella che hai evidenziato in grassetto:

    Vai su etherscan, al posto di ispezionare l’output dell’evento dove troverai l’id in formato leggibile, apri “click to see more”, Vai in input, cambia visualizzazione in utf8 e li troverai id ed hash associati.

    Questa è solamente una delle inesattezze riportate su cui i tuoi lettori si faranno un idea oggettivamente errata.

    Sarebbe bello non partire immediatamente con la caccia alle streghe cercando di trovare la truffa ovunque e provare ad ottenere maggiori informazioni dove non si vede chiaro al fine di scrivere post di miglior contenuto informativo con contributi costruttivi.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.