Domanda Decodifica Green Pass

Stato
Discussione chiusa ad ulteriori risposte.
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...
 
Ultima modifica:
grazie mille .lo provo subito
Scusa ma sono crollato sul PC dalla stanchezza , appena trovo il tempo li provo e ti dico



mi ha creato il private-key.pem che ho poi inserito nella stessa directory cioe /home/kali
mi da questo errore, ho provato a cambiare directory /home/kali/certificate/script.py e private-key.pem ma nulla

Codice:
[SPOILER]python3 script.py                                                  
Traceback (most recent call last):
  File "/home/kali/script.py", line 19, in <module>
    with open(pem_path, 'rb') as pem_in:
FileNotFoundError: [Errno 2] No such file or directory: '.\\certificate\\private-key.pem[/SPOILER]
/SPOILER]

e poi non installa

Codice:
cryptography.hazmat.primitives.serialization

come ti ho accennato non sono molto esperto ...e che ste cose mi attizzano.......
 
Ultima modifica:
Supponendo che tu non fossi vaccinato, cosa ci fai con questi 100 green pass? Stabilito che al lavoro la gente ti conosce, non puoi di certo presentare un certificato a nome non tuo e sperare che nessuno se ne accorga. Vuoi viaggiare? Buona fortuna a presentarti agli aeroporti senza che nessuno si faccia due domande quando il nome sul green pass non corrisponde al nome sul biglietto, del passaporto e della carta d'identità. Le uniche cose che puoi fare con un green pass a nome di qualcun altro è andare nei bar, nei cinema e nelle zone d'intrattenimento... sperando che non ti dicano niente quando fingi di esserti dimenticato un documento di identità. Se poi qualcuno ti becca o capita il giorno sfigato che ci sono i carabinieri a fare i controlli random poi l'accusa non è semplicemente "è andato in giro senza vaccino"; qui si parla di furto d'identità e cose simili e se qualcuno vuole farti passare problemi, stai tranquillo che ci riesce.

Di green pass (falsi o veri) ne serve solo uno, ma dev'essere a nome tuo e con la tua data di nascita. Con 100 green pass non ci fai proprio niente.


A leggere il readme, è chiaramente un progetto didattico che non ha portato ad alcun risultato significativo. Roba molto amatoriale anche perché, per esempio, leggo: "This public keys also called certificates and are not public, perhaps that inside the QR Code is the public key and the other is the private however we need to find a way to get them". Cosa assolutamente falsa, visto le chiavi pubbliche sono veramente pubbliche.

Visto che ti piace smanettare, se usi linux puoi fare:
Codice:
curl "https://get.dgc.gov.it/v1/dgc/signercertificate/update" -H "X-RESUME-TOKEN: 5" | base64 -d | openssl x509 -inform DER -text

Ed eccoti qui la chiave pubblica (certificato) italiana del Ministero della Salute:
Codice:
-----BEGIN CERTIFICATE-----
MIIEDzCCAfegAwIBAgIURldu5rsfrDeZtDBxrJ+SujMr2IswDQYJKoZIhvcNAQEL
BQAwSTELMAkGA1UEBhMCSVQxHzAdBgNVBAoMFk1pbmlzdGVybyBkZWxsYSBTYWx1
dGUxGTAXBgNVBAMMEEl0YWx5IERHQyBDU0NBIDEwHhcNMjEwNTEyMDgxODE3WhcN
MjMwNTEyMDgxMTU5WjBIMQswCQYDVQQGEwJJVDEfMB0GA1UECgwWTWluaXN0ZXJv
IGRlbGxhIFNhbHV0ZTEYMBYGA1UEAwwPSXRhbHkgREdDIERTQyAxMFkwEwYHKoZI
zj0CAQYIKoZIzj0DAQcDQgAEnL9+WnIp9fvbcocZSGUFlSw9ffW/jbMONzcvm1X4
c+pXOPEs7C4/83+PxS8Swea2hgm/tKt4PI0z8wgnIehoj6OBujCBtzAfBgNVHSME
GDAWgBS+VOVpXmeSQImXYEEAB/pLRVCw/zBlBgNVHR8EXjBcMFqgWKBWhlRsZGFw
Oi8vY2Fkcy5kZ2MuZ292Lml0L0NOPUl0YWx5JTIwREdDJTIwQ1NDQSUyMHhcMSxP
PU1pbmlzdGVybyUyMGRlbGxhJTIwU2FsdXRlLEM9SVQwHQYDVR0OBBYEFC4bAbCv
pArrgZ0E+RrqS8V7TNNIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOC
AgEAjxTeF7yhKz/3PKZ9+WfgZPaIzZvnO/nmuUartgVd3xuTPNtd5tuYRNS/1B78
HNNk7fXiq5hH2q8xHF9yxYxExov2qFrfUMD5HOZzYKHZcjcWFNHvH6jx7qDCtb5P
rOgSK5QUQzycR7MgWIFinoWwsWIrA1AJOwfUoi7v1aoWNMK1eHZmR3Y9LQ84qeE2
yDk3jqEGjlJVCbgBp7O8emzy2KhWv3JyRZgTmFz7p6eRXDzUYHtJaufveIhkNM/U
8p3S7egQegliIFMmufvEyZemD2BMvb97H9PQpuzeMwB8zcFbuZmNl42AFMQ2PhQe
27pU0wFsDEqLe0ETb5eR3T9L6zdSrWldw6UuXoYV0/5fvjA55qCjAaLJ0qi16Ca/
jt6iKuws/KKh9yr+FqZMnZUH2D2j2i8LBA67Ie0JoZPSojr8cwSTxQBdJFI722uc
zCj/Rt69Y4sLdV3hNQ2A9hHrXesyQslr0ez3UHHzDRFMVlOXWCayj3LIgvtfTjKr
T1J+/3Vu9fvs1+CCJELuC9gtVLxMsdRc/A6/bvW4mAsyY78ROX27Bi8CxPN5IZbt
iyjpmdfr2bufDcwhwzdwsdQQDoSiIF1LZqCn7sHBmUhzoPcBJdXFET58EKow0BWc
erZzpvsVHcMTE2uuAUr/JUh1SBpoJCiMIRSl+XPoEA2qqYU=
-----END CERTIFICATE-----

Che per la cronaca contiene queste informazioni:
Codice:
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            46:57:6e:e6:bb:1f:ac:37:99:b4:30:71:ac:9f:92:ba:33:2b:d8:8b
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = IT, O = Ministero della Salute, CN = Italy DGC CSCA 1
        Validity
            Not Before: May 12 08:18:17 2021 GMT
            Not After : May 12 08:11:59 2023 GMT
        Subject: C = IT, O = Ministero della Salute, CN = Italy DGC DSC 1
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:9c:bf:7e:5a:72:29:f5:fb:db:72:87:19:48:65:
                    05:95:2c:3d:7d:f5:bf:8d:b3:0e:37:37:2f:9b:55:
                    f8:73:ea:57:38:f1:2c:ec:2e:3f:f3:7f:8f:c5:2f:
                    12:c1:e6:b6:86:09:bf:b4:ab:78:3c:8d:33:f3:08:
                    27:21:e8:68:8f
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Authority Key Identifier:
                keyid:BE:54:E5:69:5E:67:92:40:89:97:60:41:00:07:FA:4B:45:50:B0:FF

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:ldap://cads.dgc.gov.it/CN=Italy%20DGC%20CSCA%20x\1,O=Ministero%20della%20Salute,C=IT

            X509v3 Subject Key Identifier:
                2E:1B:01:B0:AF:A4:0A:EB:81:9D:04:F9:1A:EA:4B:C5:7B:4C:D3:48
            X509v3 Key Usage: critical
                Digital Signature
    Signature Algorithm: sha256WithRSAEncryption
         8f:14:de:17:bc:a1:2b:3f:f7:3c:a6:7d:f9:67:e0:64:f6:88:
         cd:9b:e7:3b:f9:e6:b9:46:ab:b6:05:5d:df:1b:93:3c:db:5d:
         e6:db:98:44:d4:bf:d4:1e:fc:1c:d3:64:ed:f5:e2:ab:98:47:
         da:af:31:1c:5f:72:c5:8c:44:c6:8b:f6:a8:5a:df:50:c0:f9:
         1c:e6:73:60:a1:d9:72:37:16:14:d1:ef:1f:a8:f1:ee:a0:c2:
         b5:be:4f:ac:e8:12:2b:94:14:43:3c:9c:47:b3:20:58:81:62:
         9e:85:b0:b1:62:2b:03:50:09:3b:07:d4:a2:2e:ef:d5:aa:16:
         34:c2:b5:78:76:66:47:76:3d:2d:0f:38:a9:e1:36:c8:39:37:
         8e:a1:06:8e:52:55:09:b8:01:a7:b3:bc:7a:6c:f2:d8:a8:56:
         bf:72:72:45:98:13:98:5c:fb:a7:a7:91:5c:3c:d4:60:7b:49:
         6a:e7:ef:78:88:64:34:cf:d4:f2:9d:d2:ed:e8:10:7a:09:62:
         20:53:26:b9:fb:c4:c9:97:a6:0f:60:4c:bd:bf:7b:1f:d3:d0:
         a6:ec:de:33:00:7c:cd:c1:5b:b9:99:8d:97:8d:80:14:c4:36:
         3e:14:1e:db:ba:54:d3:01:6c:0c:4a:8b:7b:41:13:6f:97:91:
         dd:3f:4b:eb:37:52:ad:69:5d:c3:a5:2e:5e:86:15:d3:fe:5f:
         be:30:39:e6:a0:a3:01:a2:c9:d2:a8:b5:e8:26:bf:8e:de:a2:
         2a:ec:2c:fc:a2:a1:f7:2a:fe:16:a6:4c:9d:95:07:d8:3d:a3:
         da:2f:0b:04:0e:bb:21:ed:09:a1:93:d2:a2:3a:fc:73:04:93:
         c5:00:5d:24:52:3b:db:6b:9c:cc:28:ff:46:de:bd:63:8b:0b:
         75:5d:e1:35:0d:80:f6:11:eb:5d:eb:32:42:c9:6b:d1:ec:f7:
         50:71:f3:0d:11:4c:56:53:97:58:26:b2:8f:72:c8:82:fb:5f:
         4e:32:ab:4f:52:7e:ff:75:6e:f5:fb:ec:d7:e0:82:24:42:ee:
         0b:d8:2d:54:bc:4c:b1:d4:5c:fc:0e:bf:6e:f5:b8:98:0b:32:
         63:bf:11:39:7d:bb:06:2f:02:c4:f3:79:21:96:ed:8b:28:e9:
         99:d7:eb:d9:bb:9f:0d:cc:21:c3:37:70:b1:d4:10:0e:84:a2:
         20:5d:4b:66:a0:a7:ee:c1:c1:99:48:73:a0:f7:01:25:d5:c5:
         11:3e:7c:10:aa:30:d0:15:9c:7a:b6:73:a6:fb:15:1d:c3:13:
         13:6b:ae:01:4a:ff:25:48:75:48:1a:68:24:28:8c:21:14:a5:
         f9:73:e8:10:0d:aa:a9:85


Nah... è disinformazione. Nei primi giorni qualche giornale ha parlato di chiavi private leakate ed è quella la voce che si è sparsa in giro, poi si è scoperto che bastava aprire un link e compilare un form: roba veramente a prova di stupido, è più difficile registrarsi su Inforge. L'unica cosa un po' complicata era trovare il link giusto che, se non te lo comunicava nessuno, dovevi andarlo a cercare in un motore di ricerca fatto apposta per queste cose che si chiama Shodan. Come ho scritto in un post precedente: sembrava una cosa seria, ma alla fine si è rivelata una boiata (dal punto di vista informatico).


Se vuoi fare esperimenti di questo tipo usa il sito https://github.pathcheck.org/eu.dgc.html linkato anche da Eoloprox in un post precedente. Funziona bene, fai meno fatica e non devi installare niente.
ti ringrazio un casino ....un sacco di materiale da studiare .....tra una pennichella e l'altra
Messaggio unito automaticamente:

ti ringrazio un casino ....un sacco di materiale da studiare .....tra una pennichella e l'altra
in merito ai green pass scaricati era una provocazione ,(scaricati per caso con emule i primi 2/3 poi cercati per vedere l'ignoranza di alcuni che condividono il disco(" C")quelli creano piu guai che altro , ma ti posso assicurare che i greenpass dove li presenti basta che vedano che e verde .... (mi riferisco a bar ,cinema ,ristoranti,e tutti quei luoghi dove nessuno ti puo chiedere un documento legalmente )..un esercente non si fa molti problemi , lui e a posto ,la responsabilita ricade su chi presenta il documento falso ........
Tii pporto l esempio di questa estate in val gardena .....il greenpass ci e stato chiesto in tutti rifugi in alta quota (tra i 2000 e i 2300 mt ) e mai e ribadisco mai nei ristoranti dei paesi .......al di la di cio comunque grazie di nuovo per il materiale ....
 
poi si è scoperto che bastava aprire un link e compilare un form: roba veramente a prova di stupido, è più difficile registrarsi su Inforge. L'unica cosa un po' complicata era trovare il link giusto che, se non te lo comunicava nessuno, dovevi andarlo a cercare in un motore di ricerca fatto apposta per queste cose che si chiama Shodan
Quale sarebbe questo form che hanno compilato? Il link "giusto che, se non te lo comunicava nessuno, dovevi andarlo a cercare in un motore di ricerca fatto apposta per queste cose che si chiama Shodan" di cui parli qual è?

Francamente non ho capito cosa è successo anche se sono venuto a conoscenza del green pass a nome di Hitler (tramite questo thread).
 
@St3ve: come fai a sapere che questi moduli siano stati trovati con Shodan? Non è impossibile che anche Google li abbia indicizzati nel caso che il server avesse avuto una mal configurazione del file robots.txt.

Insomma, sai troppe cose al riguardo. Dove ti sei informato?
 
@St3ve: come fai a sapere che questi moduli siano stati trovati con Shodan?
Lo screenshot che ho postato proviene dal mio computer. È uno screenshot vecchio, ma è il mio browser. Non escludo che si potessero trovare anche con Google (a maggior ragione se qualcuno li ha postati in giro), ma se ho parlato di Shodan...
 
@St3ve: forse hai interpretato male il messaggio. Non mi interessa se lo screenshot proviene dal tuo browser o meno, vuoi spiegare qui in modo pratico come sei riuscito a trovare con Shodan (quale query) questo modulo o devo strapparti “le parole dalla bocca”?
 
Scusate , che senso ha creare un app che ti dica che il tuo green pass sia valido? 1 , se vai a lavoro ti controllano il tuo green pass con il ( LORO ) dispositivo che tu non puoi accedere, 2 anche se tu dovessi mettere un app che dice che il tuo green pass sia valido, arriva un controllo dal esterno che ti controlla risulta non valido... non e tanto il problema di come nascondere la scadenza del tuo green pass ai tuoi colleghi o al bar , ma il problema quando arrivano i controlli da fuori .questi scavano a fondo non si affidano mica a un app. magari chiamano addirittura al centro dove hai fatto il tampone/vaccino. non si scherza con queste cose secondo me!
 
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...
salve. potrei avere anche io quel programma per in py per favore? grazie in anticipo
 
Stato
Discussione chiusa ad ulteriori risposte.