Quante volte hai letto l’acronimo ZKP o sentito parlare di Zero-Knowledge-Proof?
Probabilmente tante, perché le “dimostrazioni a conoscenza zero” sono dei protocolli utilizzati sempre più frequentemente in ambito blockchain.
Conosci però i meccanismi e i vantaggi che le contraddistinguono?
Proviamo ad approfondirli insieme.
Le Zero-Knowledge Proof sono una famiglia di tecnologie crittografiche che permettono di dimostrare la veridicità di un’affermazione senza dover rivelare le informazioni che la riguardano. Per esempio, con le ZKP è possibile dimostrare a qualcuno di conoscere la soluzione di un complesso schema di sudoku, senza svelare nulla della soluzione stessa.
Le ZKP sono alla base di una delle principali soluzioni di scalabilità Layer 2, i cosiddetti rollup, sviluppati con l’obiettivo di aumentare il volume (throughput) e la velocità delle transazioni su blockchain e circoscrivere così sia la congestione della rete che i costi di transazioni troppo elevati.
Cosa sono i rollup?
Li esploreremo in modo più dettagliato in uno dei prossimi articoli del blog, ma, in generale, possiamo definirli come una soluzione che accorpa tutti i dati delle transazioni, ne comprime le dimensioni e li registra sulla catena principale.
A differenza delle transazioni “normali”, però, nei rollup gli effetti dell’esecuzione vengono calcolati off-chain, liberando quindi i validatori da questo onere. Il risultato del calcolo viene poi eseguito sulla catena principale.
Ti starai chiedendo come è possibile garantire che il calcolo fatto off-chain sia corretto. Il meccanismo di consenso delle blockchain non serve proprio a questo?!
Ebbene, qui entrano in gioco le ZKP.
Chi ha fatto il calcolo off-chain produce una prova crittografica che dimostra che il calcolo è corretto. Verificare la prova è molto più economico che rifare i calcoli, e questo consente di abbassare i costi di validazione senza rinunciare all’affidabilità.
Questa architettura, inoltre, abilita meccanismi di privacy e controllo dell’accesso alle informazioni delle transazioni.
Poiché permettono di garantire maggior privacy e sicurezza degli utenti, i roll-up basati su ZKP giocano un ruolo sempre più importante in ambito blockchain, soprattutto nel caso di reti che operano su larga scala, e il numero di blockchain L1 che li utilizzano è in costante crescita.
Un esempio per tutti?
Ethereum, con il suo nuovo rollup Linea.
Per questo, è importante esplorarne e comprenderne caratteristiche e dinamiche di funzionamento.
Il concetto che sta alla base del metodo di verifica a conoscenza zero nasce ben prima dell’invenzione della blockchain ad opera del misterioso Satoshi Nakamoto.
Siamo nel 1985.
Shafi Goldwasser, Silvio Micali e Charles Rackoff, ricercatori e docenti del Massachussetts Institute of Technology, firmano un articolo, oggi celeberrimo, in cui provano per la prima volta che è possibile provare la conoscenza di un numero con determinate proprietà senza svelare il numero né alcun altra informazione che possa aiutare ad ottenerlo.
Perfetto, dirai, questa è la possibilità formalizzata concettualmente…
Ma in concreto come funziona?
Partiamo dagli attori chiamati ad interagire.
In un sistema ZKP, il “prover” ha la possibilità di dimostrare al “verifier” che conosce una determinata informazione, che viene chiamata “witness”, senza dover rivelare l’informazione stessa, cioè senza dover necessariamente condividere con il verifier dati riservati e sensibili.
Questo meccanismo permette di garantire al sistema un elevato standard di sicurezza e di privacy.
Proviamo a capire meglio con un esempio concreto.
Anzi, utilizziamo proprio l’esempio ideato nel 1990 dal crittografo Jean-Jacques Quisquater (se sei curioso, trovi il documento originale qui).
Come descrivere il protocollo ZK ad un bimbo? Si chiedeva Quisquater.
Semplice! Con l’esempio della caverna di Ali Baba.
Vediamolo insieme.
Immagina una caverna a forma di anello con:
La porta magica separa il corridoio in due parti, ciascuna delle quali crea un percorso distinto che corre dall’unico ingresso alla porta stessa.
Se la porta è chiusa, come possiamo superarla e riuscire a percorrere il corridoio?
Abbiamo detto che è una porta magica!
Quindi basta trovare la giusta formula di “Apriti, Sesamo!” per farla aprire.
Mike, in effetti, conosce le parole giuste per aprirla.
E vuole dimostrarlo al reporter Bob, senza però rivelargli quelle parole.
Come può farlo?
Attraverso una prova pratica, cioè entrando nella caverna ed uscendo indifferentemente attraverso il percorso di destra o quello di sinistra, a seconda della richiesta di Bob.
Così facendo e ripetendo la prova più volte, Mike può provare di conoscere l’informazione che gli permette di aprire la porta magica, senza però doverla rivelare.
Ecco, le ZKP funzionano esattamente così.
Si distinguono in due tipologie principali:
Il termine SNARK sta per Succint Non-interactive Argument of Knowledge, una soluzione sempre più diffusa, soprattutto in ambito DeFi.
Ethereum, ad esempio, impiega protocolli zk-SNARK già dal suo aggiornamento Byzantium, nel 2017.
Probabilmente, ti stai domandando il significato di questo acronimo.
“Succinct” si riferisce al fatto che queste prove sono di piccole dimensioni e possono essere verificate velocemente.
Sono dette “non-interactive” perché l’interazione tra prover e verifier non è necessaria. Rappresentano l’evoluzione delle precedenti “interactive”, che richiedevano invece un fitto scambio tra prover e verifier.
In questo tipo di protocollo, prover e verifier hanno bisogno di scambiarsi una sola prova. L’architettura del sistema prevede, infatti, una configurazione preliminare fidata, con la condivisione di una serie di parametri pubblici che sono incorporati nel protocollo stesso. Questi parametri hanno la funzione di minimizzare la possibilità che qualcuno possa produrre prove falsificate che risultino invece valide al verifier.
Sicuramente ti starai ponendo una domanda: chi definisce questi parametri e, così facendo, detta sostanzialmente le regole del gioco?
Esatto, hai centrato uno dei punti deboli di questo tipo di prova.
Spesso i parametri, infatti, sono stabiliti da un gruppo molto piccolo di persone, con tutti i possibili problemi di centralizzazione che questo comporta.
Proprio per questo, i ricercatori stanno lavorando a soluzioni che permettano di ridurre il fattore di fiducia ora necessario per eseguire il processo.
Una delle più interessanti è la KZG ceremony, che approfondiremo tra poco.
Prima, però, finiamo di sciogliere il nostro acronimo.
Le zk-SNARK sono, come indica la “A”, “Argument”, prove cioè considerate valide dal punto di vista computazionale. È, infatti, estremamente improbabile che un prover disonesto abbia a disposizione una potenza di calcolo così alta da permettergli di ingannare il sistema.
E sono argument “of Knowledge”, è cioè impossibile che il prover riesca ad elaborare una prova senza possedere effettivamente la conoscenza, la “witness” che abbiamo menzionato in apertura al post.
Ecco, siamo pronti per esplorare meglio la KZG ceremony.
Proviamo a spiegarti, in parole semplici, come funziona e perché gioca un ruolo fondamentale nella costruzione della fiducia all’interno del sistema.
L’upgrade EIP-4844 di Ethereum segna l’introduzione dei “blob”, che sono un nuovo tipo di spazio a breve durata (e quindi a basso costo!) per memorizzare dati che può essere utilizzato dai rollup.
Per garantire in modo economico che i dati nei blob siano effettivamente disponibili si utilizza una tecnica crittografica basata sui cosiddetti “KZG committment”.
Per funzionare, i committment richiedono un “seed”, cioè uno speciale dato che deve essere generato inizialmente, secondo una specifica procedura, a partire da una chiave segreta.
È molto importante che, una volta utilizzata, la chiave segreta venga cancellata perché altrimenti chi la conosce è in grado di ingannare il sistema.
Chi ha il compito di generare la chiave segreta e assicurarsi che alla fine venga eliminata?
Per creare un sistema totalmente affidabile e trasparente, è possibile distribuire il procedimento di creazione della chiave su un numero molto grande di persone, coinvolgendole, appunto, nella KZG ceremony.
Basta che uno solo degli attori coinvolti sia onesto e, a fine cerimonia, butti via la chiave per neutralizzare ogni rischio di alterazione del processo.
Anzi, a dirla tutta, puoi assicurarti tu stesso della presenza di almeno un partecipante onesto, decidendo di partecipare in prima persona alla creazione della chiave.
Il rituale è ancora in corso, puoi accedere cliccando qui!
Tra le soluzioni elaborate per non essere troppo vincolati al fattore iniziale di fiducia e alla configurazione preliminare di parametri specifici ci sono le zk-STARK, che rappresentano l’evoluzione delle zk-SNARK anche in termini di velocità, sicurezza e performance.
STARK sta per Scalable Transparent Argument of Knowledge.
Questo tipo di prove sono “Transparent” perché non richiedono alcuna configurazione iniziale fidata, ma si basano invece su funzioni di HASH con resistenza alla collisione, e “Scalable” perché il tempo richiesto al verifier aumenta lentamente (come un logaritmo, il duale “lento” dell’esponenziale) rispetto alle dimensioni dei dati di cui si vuole dimostrare la proprietà.
Man mano che i protocolli evolvono, l’applicazione delle ZKP si rivela sempre più una soluzione efficiente per garantire la piena sicurezza, riservatezza e scalabilità delle transazioni su blockchain, pur preservando appieno l’integrità del registro distribuito.
Basti pensare alle loro potenzialità in ambiti come:
Diventa possibile verificare l’identità di un utente senza rivelare alcun suo dato sensibile.
Questo, naturalmente, può avere risvolti molto interessanti per l’implementazione di sistemi di votazione digitale perché consente di verificare l’identità del cittadino senza dover accedere alle sue informazioni personali, mantenendo così il sistema stesso trasparente ed anonimo allo stesso tempo.
Le ZKP permettono di verificare la proprietà di un asset su blockchain senza compromettere e rivelare l’identità né alcun altra informazione sensibile di chi detiene il bene.
In modo analogo, consentono di registrare ogni scambio di valore e di tracciare ogni dato della supply chain mantenendo la completa privacy sugli attori coinvolti e i dettagli delle transazioni.
L’impiego della dimostrazione a conoscenza zero, infine, può giocare un ruolo importante nel definire linee guida sovranazionali per i servizi finanziari su blockchain.
Apre, infatti, la possibilità di condividere le informazioni finanziarie solo nella misura necessaria a fornire meccanismi di controllo e tutela – efficaci ma poco invasivi della privacy – alle autorità preposte alla regolamentazione.
Sicuramente le Zero Knowledge Proof presentano al momento anche delle implicazioni negative, in primis l’alto onere computazionale richiesto a prover e verifier.
Abilitano, però, possibilità così significative in termini di condivisione dei dati, anonimato e validità delle informazioni che vengono considerate da molti un passo cruciale verso la creazione di sistemi decentralizzati più sicuri e verso una maggior fiducia dell’opinione pubblica nei confronti della blockchain e delle sue opportunità, passaggio preliminare e imprescindibile per poter giungere ad una reale mass adoption.