Domanda Decodifica Green Pass

Stato
Discussione chiusa ad ulteriori risposte.
Qualcuno è riuscito a trovare una chiave privata?
Da altri forum esteri vedo alcuni italiani che si stanno sbizzaarendo con i green pass
 
Ci sono altri thread a riguardo, in particolare questo e questo. Pare che non ci sia nessuna chiave leakata. Molto semplicemente, qualche sito governativo aveva il frontend ufficiale per generare i green pass accessibile senza alcuna protezione (no VPN e no credenziali). Una volta trovato il link giusto, compilavi il form con i dati di tuo interesse (nome, cognome, etc.), clickavi su genera certificato e avevi il tuo green pass. Non dovevi essere un hacker per essere capace di farlo, dovevi solo trovare l'indirizzo giusto utilizzando gli strumenti appropriati. Da qualche ora stanno risolvendo il problema e stanno chiudendo tutti quei portali. I certificati (fasulli e non) autenticati utilizzando quel servizio per adesso rimangono prevalentemente verdi. Più avanti si vedrà. Più info in questa discussione.

Se avessero veramente leakato qualche chiave, il problema sarebbe stato significativamente più grave. Hanno commesso un errore da idioti, ma il sistema crittografico è ancora solido. Vedremo cosa succederà nei prossimi giorni, ma a me sembra abbastanza evidente che sia ormai tutto finito. Adesso si stanno occupando di chiudere la falla (qualche indirizzo è già stato fixato) e più avanti si occuperanno di arrossare i green pass falsi. In base ai dati che loggano, potrebbe volerci poco o "tanto" tempo.

Magari continuiamo in una discussione sola almeno evitiamo di frammentare il discorso per tutto il forum.
 
ma farmacie e centri vaccinali come e a quali indirizzi passano i dati per la generazione del green pass?
Per saperlo bisognerebbe chiedere a un medico che si occupa di fare tamponi e a un medico che si occupa di fare vaccini. Io posso dirti che in Italia quando vai a fare un tampone in farmacia ti chiedono solo la tessera sanitaria e te lo stampano direttamente, mentre quando vai a un centro vaccinale previa prenotazione online ti chiedono solo la tessera sanitaria e lo potrai scaricare sul sito della regione solo qualche giorno dopo, ma comunque prima della data di attivazione. Assumo che in Italia chi ha fatto il vaccino non ha semplicemente il qr code con i dati firmati digitalmente dal Ministero della Salute, ma che la vaccinazione sia presente anche nella sua identità digitale; altrimenti non si spiega il motivo per cui il geren pass post-vaccinazione sia da scaricare sul sito della regione e non venga consegnato al momento dell'iniezione.

Negli altri paesi Europei la situazione potrebbe essere significativamente diversa e nei paesi extra UE che hanno aderito al green pass europeo (tra cui la famosa Macedonia del Nord) idem. Fatto sta che un green pass dei loro è riconosciuto anche da noi, e vice versa. Per questo è uscito fuori tutto sto casino.
 
Ultima modifica:
impossibile O.O
Messaggio unito automaticamente:

News
 
Hanno hackerato il green pass. Pare che sia stato un polacco e ancora non si hanno notizie su come abbia fatto. Realisticamente ha violato i server nella italiani regione Lazio e ha beccato la chiave privata, ma ancora non è chiaro. Ansa parla di chiavi sottratte (link).

452294_FCqDPDFWUAQm_Sn.jpeg
Purtroppo funziona ancora
 
Messaggio unito automaticamente:

idee su come bypassare?
Secondo me è un errore dovuto al fatto che non hai le Grant necessarie per accedere, infatti non vedi login.jps, è una pagina creata appositamente per restituire un errore.
Credo usino IBM websphere dall'errore che becchi:
Link

puoi provare a pingare il DNS e risolverlo e poi fare un nslookup sull'IP che trovi;
ma probabilmente è sotto un LoaderBalancer, quindi dubito che tu riesca a risalire al'hostname reale del server.
 
Ragazzi faccio una domanda da ignorante. Ma da un GP valido è possibile poter estrarre la chiave privata?
No. La chiave privata serve solo per costruire un green pass valido. Per verificare il green pass serve quella pubblica, che viene scaricata dalla app una volta sola e poi viene utilizzata (offline) per verificare tutti i green pass che vuoi. All'interno del green pass non è presente né la chiave pubblica e né quella privata. Qui ci sono scritti i dati contenuti in un green pass.
 
OK un brute force, in quanto tempo la risolverebbe...almeno la lunghezza è possible saperla?

Il sistema accetta certificati RSA o ECDSA (Curva ellittica) senza specificare la dimensione, viene lasciata al singolo paese la scelta di cosa usare. Nel caso di ECDSA sarà molto probabilmente una chiave a 256 bit, per RSA quasi certamente a 4096 bit (è sicuro quanto ECDSA nonostante la dimensione della chiave). Il bruteforce non è pensabile se non con un potente computer quantistico che ha un notevole vantaggio nel rompere la crittografia asimmetrica.
 
  • Mi piace
Reazioni: Eoloprox
OK un brute force, in quanto tempo la risolverebbe...almeno la lunghezza è possible saperla?
In Italia e un po' ovunque usano ECDSA con prime256v1, quindi la chiave è di 256 bit. Sembra un numero piccolo, ma non lo è. Se hai un processore da 1000 THz e ad ogni colpo di clock riesci a testare una chiave diversa, ti ci vogliono 183 * 10^50 (i.e., 183000...000 con 50 zeri) anni per avere lo 0.1% di probabilità di indovinare la chiave.

Come ha fatto notare JunkCoder, alcuni paesi (e.g. Svizzera e Lituania) hanno anche delle chiavi con RSA 2048 e qualche altro paese (e.g., Macedonia del Nord) ha RSA 4096. In termini di sicurezza effettiva più o meno siamo lì, attaccare logaritmo discreto (ECDSA) su 256 bit è paragonabile ad attaccare la fattorizzazione (RSA) a 3072 bit.

Dico "più o meno siamo lì" perché sia RSA che ECDSA si possono attaccare con tecniche molto più intelligenti del bruteforce, quindi per garantire lo stesso livello di sicurezza un algoritmo ha bisogno di più bit dell'altro. Di fatto siamo attorno ai 128 bit of security, quindi in realtà bastano qualcosa del tipo 5 mila miliardi di anni (un numero a 13 cifre invece che 53) per avere lo 0.1% di probabilità 0.1% di beccare la chiave.

Stime molto spannometriche calcolate con python, ma rendono l'idea. Sono algoritmi usati da banche e da agenzie varie agenzie governative: se volete puntare a trovare una chiave privata, cercate quella che protegge il conto bancario di Bezos... poi il cinema, il teatro e il ristorante ve lo costruite privato a casa vostra, senza bisogno di green pass. Il livello di difficoltà, computazionalmente parlando, credo sia lo stesso.
 
Bazzigando in rete ho trovato questo... con questa storia, cosa ne pensate..

A oggi esiste la possibilità di acquistare un green pass valido su telegram, non è vero che sono tutte truffe, un mio amico lo ha comprato e funziona perfettamente.
Perché gli hacker “cattivi” speculano vendendo green pass e gli hacker “buoni”invece non danno la possibilità di crearlo personalizzato facendo crollare informaticamente il sistema a vantaggio di tutti?
A quanto ho capito è un problema di “chiavi”, esiste già un pannello di creazione del green pass a questo link:
https://github.pathcheck.org/eu.dgc.html
Il problema è che la chiave privata non è valida e serve una persona compiacente all’interno del servizio sanitario in qualsiasi parte della comunità europea che ti rilasci la sua chiave per generare green pass che passino la validazione. Di queste persone compiacenti ce ne sono molte ed è per questo motivo che iniziano a girare molti green pass che sono perfettamente funzionanti ma c’è un problema, questa chiave non può essere rilasciata pubblicamente altrimenti chi controlla le frodi potrebbe facilmente annullare tutti i green pass creati con quella determinata chiave.
Quindi ad oggi per avere un green pass valido senza farsi il vaccino o il tampone l’unica soluzione è affidarsi a questi speculatori in rete.
Qui nasce l’ennesima discriminazione, soggetti che sono “smanettoni” riescono a procurarsi il green pass con 100 euro e si risolvono il “problema”, gli altri poco pratici continuano a farsi stuprare il naso per poter lavorare.
Il nostro governo si dovrebbe vergognare per tutto questo ma ormai siamo all’interno di una follia collettiva dove la vergogna non è contemplata.
Il sistema informatico del green pass si regge sul nulla, è pieno di falle e come ho già ripetuto spesso non può essere usato come strumento di controllo.
Questa cosa che ho scritto dovrebbe essere l’apertura di ogni telegiornale per denunciare questa truffa ma come al solito tutto tace...
 
  • Mi piace
Reazioni: spenk
Bazzigando in rete ho trovato questo... con questa storia, cosa ne pensate..

Direi che ci sono un po' di inesattezze....
Prima di tutto il personale medico non è in possesso di nessuna chiave privata... In Italia, il certificato viene emesso dal Ministero della Salute. Quello che fa il personale medico al momento del tampone / vaccino è inserire i dati del paziente nel portale web e questi vengono poi trasmessi al server preposto per generare il GreenPass.
La chiave privata è quindi custodita in qualche server del Ministero e, a dirla tutta, dubito fortemente che sia anche esposto su internet.
Gli ultimi GreenPass falsi che sono girati sono stati emessi dai server della Macedonia in quanto, a causa di una configurazione errata, il loro portale di immissione dati era esposto al pubblico, senza nessuna autenticazione.
Ci sono almeno altri due server (Vietnam e Lao) che hanno il loro servizio esposto al pubblico dove puoi inserire i dati e scaricarti il GreenPass, tuttavia il loro GP non è valido in Europa, quindi non te ne fai nulla.

Per quanto riguarda il link è stato detto più e più volte.
Il sistema del GreenPass poggia su fondamenti tecnici consultabili da chiunque su internet. Ci sono tutti i codici sorgenti su GitHub... dall'applicazione di verifica a come codificare il dato.
Non vedo perchè ci si continua a meravigliare quando si trovano queste cose....

Qui nasce l’ennesima discriminazione, soggetti che sono “smanettoni” riescono a procurarsi il green pass con 100 euro e si risolvono il “problema”, gli altri poco pratici continuano a farsi stuprare il naso per poter lavorare.
Ma discriminazione di cosa?
Se vuole il GreenPass si faccia vaccinare.
Se lo vuoi di sottobanco paghi qualcuno che te lo fa avere. Sbaglio o in Italia non puoi acquistare un carrarmato? Ma scommetto che se pago qualcuno riesco a metterlo nel mio garage... Quindi? Sono discriminato?!
 
  • Mi piace
Reazioni: LinuxUser
Bazzigando in rete ho trovato questo... con questa storia, cosa ne pensate..
Non capisco perchè io debba sconsideratamente prodigare e sudare per trovare il senso in questi discorsi mentre loro non si impegnano un minimo a metterlo.

Mi sanguinano gli occhi dalle innumerevoli stupidità che vedo leggendo. Per favore non condividete queste sconclusionatezze sul forum, e, nel caso vogliate un paio di delucidazioni sul tema, siate molto schifiltosi a dar retta alle ciance della gente che dice di sapere.
 
Ultima modifica:
ciao io ho trovato questo su github ma ora il repo e stato sospeso il file compressso che allego l ho scaricato appena in tempo prima che sospendessero il repo , l 'altro e una copia del sito offline che mi e rimasta sul tel ed e in inglese.......
io non sono molto esperto per cui chiedo a voi di cosa si tratti di preciso ...........
grazie
Messaggio unito automaticamente:

non so come mai non ha caricato l'altro file .......ecco forse ora si
 

Allegati

  • GreenPass-Experiments-4e97d3ac38574cf6aeef5b2a7a5d988023751412.zip
    639 KB · Visualizzazioni: 53
Ho controllato quell applicativo in passato ma non ci ho fatto un gran chè, se vuoi ti mando con le istruzioni uno script in .PY che ti fa generare l GP, ma siamo sempre li... senza chiave te lo genera ok, ma scansionandolo con verifica c19 da invalido, però il nome e la data si visualizza se proprio vuoi...
 
ho letto che in un post precedente c'era il link con il file condiviso della chiave privata ......che ora da 404 .... ma presumo che fosse una bufala ....o non staremmo quu a discuterne
Comunque si dai intanto nell attesa che salti fuori sta chiave mi preparo per bene a farne un po ......male non mi fara .se non ti disturbo .ben .volentieri....grazie
Quello che ricordo della guida e che ti fa scaricare android studio ....poi uinstallarre le versioni piu recenti di android con android manager .....e un altro paio di file jdk
 

Allegati

  • Schermata 08-11-2021 22.07.21.png
    Schermata 08-11-2021 22.07.21.png
    19.3 KB · Visualizzazioni: 41
Ultima modifica:
OK, sparo... ecco lo script:

Prima generi la famigerata chiave che non puo che essere fatta da noi... "per adesso", con questo comando te la salva in un file .pem...
Codice:
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem

Ecco lo script per smanettare, che ti crea tramite l'algoritmo il codice che incollerai in qualsiasi sito online per generare i qr code:

Codice:
import json
import zlib
from datetime import datetime
import cbor2
import unidecode
from cose.messages.sign1message import Sign1Message
from cose.headers import Algorithm, KID
from cose.algorithms import Es256
from cose.keys.keyparam import EC2KpCurve, EC2KpD, KpAlg, KpKty
from cose.keys.keytype import KtyEC2
from cose.keys.curves import P256
from cose.keys.cosekey import CoseKey
from base45 import b45encode
from cryptography.hazmat.primitives.serialization import load_pem_private_key

# Private Signature Key for ecdsa-with-SHA256 for test certificate without password protection
# AS THIS IS JUST USED FOR PUBLIC TESTING IT IS NOT CRITICAL TO HAVE THIS PRIVATE KEY IN THIS CODE #
pem_path = r".\certificate\private-key.pem"
with open(pem_path, 'rb') as pem_in:
    PRIVATE_KEY = pem_in.read()

KEYID = PRIVATE_KEY.decode("utf-8").split('\n', 1)[1][:8] # first 8 hex values of SHA256 fingerprint of signing certificate, not relevant for test
KEYID = bytes(KEYID, 'utf-8')

# Custom GreenPass
# Definition of Data for Test Certificate
family_name = "Spam"
given_name = "Registration"
birthdate = "1990-06-22" # yyyy-mm-dd
country = "IT" # two letter country code
last_vaccination_date = "2021-05-01" # yyyy-mm-dd
cert_issuer = "Ministero della Salute"
time_to_live = 180 * 24 * 3600 # validity period of cert, default 180 days
issuing_country = "IT" # two letter country code
cert_id = "01IT1234567890THISISATESTCERTIFICATE#2"
vaccine_manufacturer = "ORG-100030215"
vaccine_id = "EU/1/20/1558"
dn = 2
sd = 2
tg = "840539006"
vp = "1119349007"
version = "1.0.0"

# Create upper case string without special characters and whitespace replaced by '<'
fnt = unidecode.unidecode(family_name).upper().replace(" ", "<")
gnt = unidecode.unidecode(given_name).upper().replace(" ", "<")

# Create json payload
json_issuance = '"v": [{' + \
                    '"dn": ' + str(dn) + ',' + \
                    '"ma": "' + vaccine_manufacturer + '",' + \
                    '"vp": "' + vp + '",' + \
                    '"dt": "' + last_vaccination_date + '",' + \
                    '"ci": "' + cert_id + '",' + \
                    '"co": "' + country + '",' + \
                    '"mp": "' + vaccine_id + '",' + \
                    '"is": "' + cert_issuer + '",' + \
                    '"sd": ' + str(sd) + ',' + \
                    '"tg": "' + tg + '' + \
                '"}]'

json_name = '"nam": {' + \
                '"fnt": "' + fnt + '",' + \
                '"fn": "' + family_name + '",' + \
                '"gnt": "' + gnt + '",' + \
                '"gn": "' + given_name + '' + \
            '"}'

json_payload = '{ ' + \
                json_issuance + ', ' + \
                json_name + ', ' + \
                '"ver": "' + version + '",' + \
                '"dob": "' + birthdate + \
            '"}'

# Make sure correct utf-8 was base
json_payload = json_payload.encode("utf-8")
json_payload = json.loads(json_payload.decode("utf-8"))

# Add additional required info to json_payload
json_payload = {
    4: int(datetime.now().timestamp() + time_to_live),
    6: int(datetime.today().timestamp()),
    1: issuing_country,
    -260: {
        1: json_payload,
    },
}

print("")
print("FULL JSON PAYLOAD:")
print(json.dumps(json_payload, indent=2))



# Convert to CBOR
payload = cbor2.dumps(json_payload)
print("")
print("CBOR FORMAT:")
print(payload)

# Read in the private key that we use to actually sign this
#
keyfile = load_pem_private_key(PRIVATE_KEY, password=None)
priv = keyfile.private_numbers().private_value.to_bytes(32, byteorder="big")

# Prepare a message to sign; specifying algorithm and keyid
message = Sign1Message(phdr={Algorithm: Es256, KID: KEYID}, payload=payload)
print("")
print("MESSAGE TO BE SIGNED:")
print(message)

# Create the signing key - use ecdsa-with-SHA256
# and NIST P256 / secp256r1
cose_key = {
    KpKty: KtyEC2,
    KpAlg: Es256, # ecdsa-with-SHA256
    EC2KpCurve: P256, # Ought to be pk.curve - but the two libs clash
    EC2KpD: priv,
}

message.key = CoseKey.from_dict(cose_key)
out = message.encode()
print("")
print("SIGNED MESSAGE:")
print(out)

out = zlib.compress(out, 9)
print("")
print("COMPRESSED MESSAGE:")
print(out)

out = b'HC1:' + b45encode(out)
print("")
print("BASE45 ENCODED:")
print(out)

All'interno noterai i dati da inserire nel GP che ti genererà, ricordati di mettere il file .pem nella cartella dove gira lo script in .py.
Sotto il codice per risalire da un GP valido, e ai suoi dati inseriti all'interno, dopo avere scansionato il GP devi inserire in riga base45_encoded = "XXXXXXXXXXXX
il codice scansionato ( al posto delle XXXX, io utilizzo questa app LETTORE QR per android), e lanciare lo script, lui ti estrarrà tutti i dati in esso inseriti:

Codice:
import json
import zlib
import base45
import cbor2
from cose.messages import CoseMessage

PREFIX = "HC1:"
base45_encoded = "METTI QUI LA SCANSIONE DEL GP PER ESTRARRE I DATI"
print("")
print("BASE45 ENCODED:")
print(base45_encoded)

# decode Base45 (remove HC1: prefix)
if base45_encoded[0:4] == PREFIX:
    base45_encoded = base45_encoded[4:]

base45_decoded = base45.b45decode(base45_encoded)
print("")
print("BASE45 DECODED:")
print(base45_decoded)
 
# decompress using zlib
zlib_decompressed = zlib.decompress(base45_decoded)
print("")
print("ZLIB DECOMPRESSED:")
print(zlib_decompressed)

# decode COSE message (no signature verification done)
cose = CoseMessage.decode(zlib_decompressed)
print("")
print("COSE DECODED:")
print(vars(cose))
'''
print("")
print("COSE DECODED (phdr):")
print(cose.phdr)

print("")
print("COSE DECODED (uhdr):")
print(cose.uhdr)

print("")
print("COSE DECODED (payload):")
print(cose.payload)

print("")
print("COSE DECODED (signature):")
print(cose.signature)
'''

# decode the CBOR encoded payload and print as json
payload = cose.payload
print("")
print("PAYLOAD:")
print(payload)

cbor = cbor2.loads(cose.payload)
print("")
print("CBOR2 MESSAGE:")
print(cbor)

message = json.dumps(cbor, indent=2)
print("")
print("GreenPass DECODED:")
print(message)

Non è niente di speciale è l'operazione che viene fatta ma ripetiamo acora, senza la key non vai molto lontano...
 
Stato
Discussione chiusa ad ulteriori risposte.