Verifica Green Pass API

la possibilità di chiamare un servizio dell’app (verifica dell’integrità e validità del DGC) tramite intent

Questo è quello che ci vorrebbe. Una api gw che ti permetta di farlo e basta.
Che senso ha sennò il gp se non se ne può validare il contenuto se non tramite l’app VerificaC19?

Ciao Ragazzi,
visto che non avevo trovato nulla, partendo dal github del ministero degli interni
https://github.com/ministero-salute/dcc-utils
Ho “scritto” (metto tra virgole perché l’ho buttato giù al volo ed è davvero ancora instabile ne test automatici), un pacchettino flutter per la lettura del green pass.
[GitHub - loreberti89/flutter_ita_greenpass: A library for get data from GreenPass Italy]
Ora, come potete vedere avevo iniziato a provare a gestire la Validazione, ma sto trovando difficoltà con i vari pacchetti usati da Dcc-Utils, qualcuno ci ha già messo mano a Dart?

Salve,
anche io come molti qui sto tentando di decodificare il codice QR del Green Pass.
Ho avuto successo con python ed un Raspberry Pi, ora sto tentando con C# in ambiente Windows.
Partendo dal risultato della lettura del QR (HC1:…ecc) che funziona in Python, in C# dopo la decodifica base45, decompressione con ZlibStream quando arrivo all’ultimo step ovvero la conversione con CBorObject (nuget package PeterO.CBor) ottengo l’errore “Premature end of data” se dopo la conversione in Base45 converto la stringa decodificata in un array di bytes con “Encoding.ASCII.GetBytes”, la decomprimo e la passo all’oggetto CBorObject.
Se invece la converto in UTF-8 con “Encoding.UTF-8.GetBytes” ottengo l’errore “Invalid UTF8” da “CBORObject.DecodeFromBytes(varUnzip, CBOREncodeOptions.Default);” dove “varUnzip” è l’array di bytes che contiene i valori da “trasformare” per poi renderli leggibili.
Se serve posso pubblicare il codice completo, in pratica ho usato le stesse librerie che ha suggerito Denis71.
Da cosa può dipendere l’errore?
Grazie, saluti.

Roberto

Ho risolto esaminando il codice “ufficiale” sviluppato in versione Xamarin e copiando alcune procedure presenti.
Pur utilizzando gli stessi packages le procedure erano leggermente diverse dalle mie.
Ora riesco a decodificare correttamente i dati ed è anche presente la possibilità di verificare la validità del green pass dal certificato digitale.
Saluti,

Roberto

ciao mi sai dire dove hai trovato il codice per la verifica del pass?
ho fatto le tue stesse cose ma non ho visto la parte di verifica, ovvero scaricamento id bloccati.

Grazie Mille

1 Mi Piace

Non lo so se fa quel tipo di verifica, ma da quello che ho capito (se ho interpretato bene il codice e la documentazione) verifica solo la “genuinità” del green pass esaminando il certificato digitale incluso.
Il file “github” in cui ho visto la verifica è qui:

devi cercare la routine “public byte[] Verify(byte[] signedDGC, SignedDGC vacProof)”.

Tutta la procedura di decodifica e verifica si vede qui:

Devo ancora esaminare tutta la parte di verifica tramite il certificato digitale, spero che vi sia implmentata anche la parte che cerchi tu (l’eventuale bloccaggio del green pass).
Ciao,

Roberto

Salve a tutti, ringrazio per le utili informazioni in questo thread.
Mi chiedevo se fosse possibile “capovolgere” questo codice python per ottenere l’inverso, cioè inserire il risultato decodificato e trasformarlo in “HC1:…” e poi in qr code.

Sto avendo dei problemi per la parte di cbor2, il resto dovrebbe essere semplice, qualcuno saprebbe ottenere il codice da me descritto? Grazie in anticipo.

Non potresti comunque firmarlo, quindi non risulterebbe mai valido ad un controllo.

Si certo, lo so. Era a scopo didattico, una curiosità mia.

Comunque volendo si potrebbe fare una fork dell’app di verifica, open source, per validare qualsiasi qr code, è già stato fatto. E secondo me non è neanche impossibile studiare un metodo per far funzionare la firma, compito però ovviamente molto più arduo.

trovo utile questa pagina, facilmente modificabile, per la generzione di un qr code (o della stringa prima del qr code)
https://dgc.a-sit.at/ehn/

Se riesci a fare funzionare la firma puoi farci cose più interessanti che firmare i green pass (e decisamente più redditizie)!

queste funzioni si possono “tradurre” in
javascript o
VBA per excel ?
cosi’ si possono fare un po’ di operazioni automatizzate …

Ciao Mauro,
io ho tradotto quello che sono riuscito a trovare su Verifica C-19 e insieme alla Dcc-utils sto cercando di creare una validazione.
Ovviamente questa, è una validazione che non è “legalmente” valida, dato che la validazione LEGALE è solo con Verifica C-19.
Comunque, qua ho fatto un GIST in maniera rudimentale.
Anzi se qualcuno riuscisse a provare un po di GP e magari vedere cosa non funziona sarebbe utile a tutti credo.
https://gist.github.com/loreberti89/743bf8d5ab234f3b4f148adc3fe05f24

Ripeto che con ogni probabiltà presenterà delle lacune.
Per quanto riguarda chi chiede come si può fare il processo inverso, se non ho capito male, non è assolutamente possibile, in quanto il La “signature” viene firmata con una chiave PRIVATA e poi verificata tramite CHIAVE PUBBLICA, ergo, se le mia è una cosa vera, fintanto che non avete la CHIAVE PRIVATA non potete firmare e renderlo valido.
Anche qua, correggetemi se sbaglio, perché sto cercando di capirci qualcosa in più anche io.
Ciao

partendo da

e Telegram: Contact @GPVerifyBot

si puo’ interagire con il bot di telegram ?
dando come input "/decode HC1:6BFOX… " avere come output verified: 1/0 ?

Di che lunghezza di chiave privata stiamo parlando? E’ possibile vedere la parte di codice dall’app verificaC19 per capire il tipo di algoritmo usato? Io ho dato un occhiata ma non lo sto trovando…

beh, la chiave pubblica è pubblica e le chiavi sono simmetriche.

Molto interessante, sto facendo anche io uno script in JS per validazione e verifica.
Però non mi è chiaro perchè guardando anche negli esempi della repository ufficiale “GitHub - ministero-salute/dcc-utils: Set of utilities to read EU Digital COVID Certificates, verif”, vengano applicate le regole di validazione prese tramite “https://dgca-businessrule-service.cfapps.eu10.hana.ondemand.com/rules/” mentre poi nel codice di VerificaC19, viene usato un metodo diverso.
Qualcuno ha qualche info in più ? Esistono le rules anche per l’italia ?

Grazie in anticipo a tutti

Innanzitutto grazie per l’info.

Ad ogni modo l’avevo già vista,
però sinceramente di metodi per la decodifica e la verifica della firma se ne trovano in tutti i linguaggi, penso non sia un grosso problema (o ci sono appunto i tuoi codici sul sito del ministero).

Però nel tuo codice vedo che le chiavi pubbliche le importi esternamente.
Io non so chi ci sia dietro https://raw.githubusercontent.com/bcsongor e non posso sapere se magari è un venditore di green pass falsi, che ha infilato in mezzo anche una chiave con cui ha generato e venduto dei green pass fasulli ad esempio.

Poi, tu (spero possiamo darci del tu) magari che hai utilizzato il suo repository nella sezione esempi (e vedo che hai anche sviluppato sull’app android) magari saprai dirmi qualcosa di più su come ottenere una lista dei certificati affidabile, che è il problema non risolto che abbiamo tutti in questo topic :sweat_smile:

Buongiorno,

Ma da dove si può scaricare la lista delle chiavi “pubbliche” fornita dal ministero della salute italiano?

1 Mi Piace

Ciao, da qualche Scambio di battute (non con me) su github, le CertLogic in italia ancora non sono state applicate o sviluppate, magari le tireranno fuori in un secondo momento, ma ancora non ci sono.
Io quello che ho scritto l’ho “tradotto” da Verifica C-19 che va a prendere le sue Regole da una url differente e poi hanno Hardcodato le verifiche.
La url di riferimento è quella che ho usato anche nel mio script:

https://get.dgc.gov.it/v1/dgc/settings

Se ci fai caso nel link che usa nel dcc-utils non vi è il codice ITaliano.
Non mi è chiaro perché l’italia abbia preso un approccio diverso, fatto sta che se ti guardi verifica c-19, come dicevo, le regole per la validazione vengono prese da quella url e poi verificate direttamente la sopra.
Trovi tutte le chiamate usate da Verifica C-19 nell’interfaccia ApiServices

Comunque ad ora mi è ancora oscuro a cosa serva il “signercertificate/status”