CoronaWarnApp o Immuni?

CoronaWarnApp è l’app equivalente di Immuni in Germania. https://www.coronawarn.app/ .

L’ho installata disattivando Immuni (non è possibile usarle entrambe), nonostante vivo in provincia di Milano e non ho intenzione di viaggiare fuori dall’Italia. Attenzione: NON vi sto consigliando di fare altrettanto. IO sto sperimentando.

  • E’ affidabile come fonte, è autorizzata da Google & Apple come app ufficiale di Exposure Notification della Germania.
  • E’ disponibile sul Play Store italiano:
  • E’ un International Gateway, è spiegato nella app direttamente (Immuni non riporta nulla del genere, almeno nella UI):

    So che anche Immuni dovrebbe essere (da dichiarazioni) un international gateway. Ma il volume riportato sotto attualmente non corrisponde.
  • Immuni fa il check delle mie esposizioni in un db di 4963 chiavi attualmente:
    CoronaWarnApp fa il check delle mie esposizioni in un db di 268412 chiavi: che dichiarano comprendono ANCHE le italiane.

Quindi, qualche ipotesi:

  • Case study: io in Italia entro in contatto con un positivo italiano. Dovrei essere notificato esattamente come se usassi Immuni, perchè CoronaWarnApp è un international gateway e fornisce al mio OS ANCHE le TEK italiane.
  • Case study: un tedesco (o un irlandese) viene in visita nelle mie zone, poi torna a casa, viene riscontrato positivo e inserisce le sue TEK nel suo paese.
    CoronaWarnApp dovrebbe avvisarmi, Immuni NO. E’ evidente, se Immuni fosse un international gateway già funzionante, conterrebbe anche lei oltre >200k TEK.
  • Case study: vengo notificato di possibile esposizione, ma CoronaWarnApp non ha istruzioni specifiche per le ASL italiane:
    basta che riattivo Immuni, e dovrei ricevere la stessa notifica. Il database TEK dei miei contatti è nel Framework Exposure del mio device, NON nelle App che lo usano.
  • Case study: vengo riscontrato positivo e devo fare la procedura di upload delle mie TEK:
    installo Immuni e faccio la procedura. Le mie TEK erano nell’OS, non importa se fino al giorno prima usavo CoronaWarnApp.

Dove sbaglio? Sto davvero cercando un motivo per capire se dovrei tornare a Immuni: attualmente non lo vedo, anzi, sono più protetto con CoronaWarnApp.

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).

‘Security through obscurity’ or simply ‘Security incompetence’?

If you use a WebControl in a Windows Presentation Framework application that access to local JS files, it show this warning:
x

If i add
x
at the top of index.html,
IE 11 think is loaded from about:internet and will not display the Security warning. Currently i don’t know if is also a security issue.

Tested with Windows 10 – IE 11.

Hotmail and Gmail use blacklists of entire subnets for a single involved IP? Unbelievable

A mail to me from Leaseweb:

Dear sir, madam,

It appears you are hosting a TOR node on your LeaseWeb IP address [omissis].
This has resulted in the block of a (part) LeaseWeb IP subnet. (/24)
As the subnet is added on the SECTOOR blacklist (http://www.sectoor.de/tor.php) this is affecting customers in the same range as yourself.

The SECTOOR blacklist is e.g. implemented by Hotmail, Live and Gmail. This results in other customers not being able to longer use the mail services of these companies.

[omissis details]

Therefore, we kindly, yet urgently ask you to disable the connection to the mentioned ports within 24 hours. Failure to comply and respond (confirm) to this warning, will result in a block of your involved IP address(es).

Thank you for your co-operation and understanding.

Kind regards,

[omissis]
Team Manager Abuse Prevention
LeaseWeb Global Services B.V.