La protezione dietro al Green Pass

Alessandro Mazzeo
3 min readNov 24, 2021

--

Di recente un lettore mi ha fatto alcune domande tecniche sul mio progetto di ricerca sul Green Pass, vista la complessità dell’argomento ho deciso di scrivere un breve articolo.

Cosa protegge il Green Pass?

Dietro al certificato verde, dietro a quel semplice QR Code, si nasconde un sistema di firma digitale chiamato ECC (Elliptic Curve Cryptography) che permette solo a chi è autorizzato di firmare il certificato come autentico in modo che le app di validazione come VerificaC19 lo riconoscano come valido.

Questo sistema è molto simile a quello che viene usato da BitCoin e da altre cripto valute. In sostanza sono presenti due chiavi, una privata che solo il possessore autorizzato a firmare i certificati conosce e l’altra pubblica che tutti possono vedere e che serve a verificare che il certificato sia stato realmente rilasciato da un ente autorizzato. Spiego meglio il funzionamento di questo sistema nei miei due progetti, Green Pass Experiments cancellatomi da GitHub per motivi a loro dire etici e Human-Method un tentativo di implementazione della libreria SunEC.

jojo2234/Human-Method: A SunEC reimplementation (github.com)

Per riassumere, la chiave privata firma il certificato e la chiave pubblica verifica che sia autentico.

Chi genera la chiave privata?

La chiave privata in Italia viene probabilmente generata sotto disposizione del Ministero della Salute, all’atto pratico potrebbe venire generata da Sogei SPA che poi invierà la corrispondente pubblica ai server Europei. Un altra ipotesi è che venga assegnata dall’Europa agli enti che uno stato riconosce come abili a rilasciare i certificati.

Cos’è la chiave privata?

La chiave privata nel caso del GP è un numero generato casualmente che può avere fino a 77 cifre. Quindi è facile comprendere che diventa impossibile testare tutti i possibili numeri per vedere quale genera la chiave pubblica corrispondente.

Si potrebbe pensare che avendo la chiave pubblica generata con una chiave privata sia possibile invertire il processo per ottenere la chiave privata ma non è così. Questo per via del sistema usato per generare la chiave pubblica https://it.wikipedia.org/wiki/Funzione_unidirezionale

Quello che succede è che il numero casuale che corrisponde alla chiave privata viene elaborato sotto forma di un array di 32 byte, dove ogni byte può assumere valori che vanno da -127 a +127, il valore del primo byte viene legato in un procedimento complesso alla curva e al punto di generazione, il che genera altri valori, i quali poi vengono usati per legare il valore successivo che a sua volta effettua la stessa cosa rendendo così imprevedibile determinare l’andamento.

Bisogna vedere la chiave privata come se fosse un percorso che conduce a un luogo su una mappa, ogni byte dell’array corrisponde a un’indicazione su dove bisogna andare e non si può tornare indietro dalla meta perché la prossima indicazione è determinata dalla precedente. Solo chi possiede le indicazioni può seguire il percorso e arrivare alla meta.

Si può recuperare la chiave privata da un Green Pass?

In teoria la chiave privata è contenuta all’interno di ogni Green Pass in Italia ma viene protetta con un altro numero casuale anch’esso con parecchie cifre. In questo progetto spiego meglio come funziona il tutto, compreso il metodo di verifica dell’autenticità: https://github.com/jojo2234/Human-Method

Il mio precedente progetto può creare un GP valido?

Per concludere, il progetto può produrre un Green Pass valido, lo dimostrano le chiavi d’esempio che ho inserito, concretamente però non è possibile perché serve una chiave privata la cui pubblica corrispondente si trovi nel database e senza modifiche e anche necessario che la chiave privata utilizzata sia la stessa con cui è stato firmato il Green Pass originale che si intende modificare. Per intenderci un Green Pass fatto in Italia per essere modificato e firmato necessita per forza della chiave privata Italiana.

--

--