Introduzione
Ti sei mai chiesto come si può dimostrare di sapere qualcosa senza dire cosa si sa? Questa è la domanda che sta alla base della tecnologia zero-knowledge, una delle più promettenti innovazioni nel campo della crittografia e della blockchain. In questo articolo, vedremo cos’è la tecnologia zero-knowledge, come funziona, quali sono le sue applicazioni e quali sono le sfide e le opportunità che presenta per il futuro del Web3.
Cos’è la tecnologia zero-knowledge?
Per capire come funziona la tecnologia zero-knowledge, dobbiamo prima introdurre il concetto di prova zero-knowledge, il meccanismo che permette di realizzare questa tecnologia. Una prova zero-knowledge è una comunicazione tra due parti, chiamate prover e verifier, in cui il prover vuole convincere il verifier di una certa affermazione, senza rivelare nessun’altra informazione. Una prova zero-knowledge deve soddisfare tre proprietà fondamentali: completezza, correttezza e zero-knowledge.
La completezza significa che se l’affermazione è vera e il prover è onesto, il verifier deve accettare la prova con una probabilità arbitrariamente alta.
La correttezza significa che se l’affermazione è falsa e il prover è disonesto, il verifier deve rifiutare la prova con una probabilità superiore a una soglia prefissata.
La zero-knowledge significa che il verifier non deve apprendere nessun’altra informazione dall’interazione con il prover, oltre al fatto che l’affermazione è vera o falsa.
Immaginiamo di avere una caverna con due ingressi, A e B e una porta che blocca il passaggio tra A e B. Solo chi conosce la parola segreta può aprire la porta e attraversare la caverna da un lato all’altro. Ora, supponiamo che Alice ( prover) conosca la parola segreta e voglia venderla a Marco (verifier), che vuole accedere alla caverna. Tuttavia, Alice non vuole rivelare la parola a Marco prima di ricevere il pagamento, e Marco non vuole pagare Alice prima di essere sicuro che lei conosca davvero la parola. Come si può risolvere questo dilemma?
Una possibile soluzione è la seguente: Alice entra nella caverna da uno dei due ingressi, scelto a caso, Marco la segue fino all’entrata. Poi, Marco si ferma e grida il nome dell’ingresso da cui vuole che Alice esca. Se Alice conosce la parola segreta, può aprire la porta e uscire dall’ingresso richiesto da Marco. Se invece non la conosce, può solo uscire dallo stesso ingresso da cui è entrata, sperando che sia quella che Marco ha chiesto.
In questo caso, avrebbe il 50% di probabilità di indovinare. Se i due ripetono questo procedimento più volte, la probabilità che Alice riesca a ingannare Marco diminuisce esponenzialmente. Quindi, se Alice esce sempre dall’ingresso che Marco chiede, Marco può essere ragionevolmente convinto che Alice conosca la parola segreta, senza che Alice debba rivelargliela.
Questo esempio illustra il concetto di dimostrazione a conoscenza zero, che si basa sulle tre proprietà fondamentali:
- Completezza: se l’affermazione è vera, il dimostratore onesto (Alice) può convincere il verificatore onesto (Marco) con una probabilità arbitrariamente alta.
- Correttezza: se l’affermazione è falsa, il dimostratore disonesto non può convincere il verificatore onesto con una probabilità superiore a una soglia prefissata.
- Zero-knowledge: il verificatore onesto non apprende nulla di più dell’affermazione, oltre al fatto che sia vera o falsa.
Dietro le Quinte della Tecnologia Zero-Knowledge
L’esempio della caverna è solo una semplificazione per spiegare il principio del protocollo a conoscenza zero. Nella pratica, la tecnologia zero-knowledge si basa su tecniche matematiche e algoritmiche più complesse, che richiedono l’uso di strutture dati e funzioni crittografiche. Esistono diversi tipi di tecnologie zero-knowledge, a seconda delle proprietà e delle prestazioni che si vogliono ottenere.
Un tipo di tecnologia zero-knowledge è quella basata su problemi NP-completi, per i quali non esiste un algoritmo efficiente per trovare la soluzione, ma ne esiste un’ altro per verificarla. Il problema di Hamiltonian Cycle è un problema NP-completo, che consiste nel trovare un ciclo che passi per tutti i nodi di un grafo una sola volta. Non esiste un algoritmo efficiente per trovare un ciclo hamiltoniano, ma ne esiste uno per verificare se un ciclo è hamiltoniano. Quindi, se Alice conosce un ciclo hamiltoniano in un grafo, può usare questo problema per creare una prova zero-knowledge per Marco, che vuole verificare che Alice conosca il ciclo, senza che Alice debba rivelarglielo.
Altro tipo di tecnologia zero-knowledge è quella basata su problemi di teoria dei numeri, i quali sono legati alle proprietà dei numeri interi.
Per esempio, il problema di ‘Logaritmo Discreto’ è un problema di teoria dei numeri che consiste nel trovare un numero x tale che a^x = b (mod p), dove a, b e p sono numeri interi noti. Non esiste un algoritmo efficiente per trovare x, ma ne esiste un’ altro per verificare se x è la soluzione. Quindi, se Alice conosce x, può usare questo problema per creare una prova zero-knowledge per Marco, che vuole verificare che Alice conosca x, senza che Alice debba rivelarglielo.
Un terzo tipo di tecnologia zero-knowledge è quella basata su problemi di geometria algebrica, problemi legati alle proprietà delle curve ellittiche.
Per esempio, il problema di Elliptic Curve Pairing è un problema di geometria algebrica che consiste nel trovare una funzione e che mappi due punti P e Q su una curva ellittica in un valore e(P,Q) in un campo finito. Non esiste un algoritmo efficiente per trovare e, ma un’ altro per verificare se è la soluzione. Quindi, se Alice conosce e, può usare questo problema per creare una prova zero-knowledge per Marco, che vuole verificare che Alice conosca e, senza che Alice debba rivelarglielo.
Questi sono solo alcuni esempi di problemi che si possono usare per creare prove zero-knowledge, ma ce ne sono molti altri che si basano su principi matematici e logici diversi. L’idea generale è sempre la stessa: usare un problema difficile da risolvere ma facile da verificare per dimostrare di conoscere la soluzione senza rivelarla.
- Dimostrare il possesso di una credenziale, come una password, una chiave privata o un certificato, senza rivelarla o esporla a rischi di furto o falsificazione.
- Dimostrare il rispetto di una regola, come una politica di accesso, una condizione contrattuale o una normativa legale, senza rivelare i dettagli o le motivazioni che la giustificano.
- Dimostrare la correttezza di un’operazione, come una transazione, una computazione o una verifica, senza rivelare i dati o i processi che la rendono possibile.
- Dimostrare la proprietà di un’informazione, come una prova di lavoro, una prova di partecipazione o una prova di spazio, senza rivelare il contenuto o la fonte dell’informazione.
Nell’ecosistema blockchain, la dimostrazione a conoscenza zero ha un ruolo sempre più importante, in quanto permette di migliorare la privacy e la scalabilità delle transazioni e degli smart-contract. Molti progetti e protocolli stanno già utilizzando o integrando il protocollo a conoscenza zero per fornire agli utenti maggiore sicurezza e flessibilità.
Zcash è una criptovaluta che usa le dimostrazioni a conoscenza zero per nascondere gli importi e i destinatari delle transazioni, garantendo così privacy assoluta agli utenti. Oppure Aztec, un protocollo che usa le dimostrazioni a conoscenza zero per rendere le transazioni su Ethereum più economiche e veloci, riducendo il costo del gas fee e il tempo di conferma. Inoltre, è stata usata per creare applicazioni decentralizzate, come identità digitali, votazioni elettroniche, audit e verifiche, e molto altro. Il campo della ricerca e dello sviluppo di questa tecnologia è in continua crescita.
Sfide e Opportunità
La dimostrazione a conoscenza zero è una tecnologia in continua evoluzione e sperimentazione, che presenta ancora alcune sfide e limitazioni da superare. Tra queste, ad esempio:
- La complessità computazionale, che richiede una grande quantità di risorse e tempo per generare e verificare le prove, soprattutto per problemi di grande dimensione e complessità.
- La difficoltà di implementazione, che richiede una profonda conoscenza matematica e crittografica per creare e usare le prove, oltre a una cura particolare per evitare errori e vulnerabilità.
- La mancanza di standardizzazione, che rende difficile la compatibilità e l’interoperabilità tra le diverse tipologie e versioni di dimostrazione a conoscenza zero, oltre a creare problemi di sicurezza e affidabilità.
La dimostrazione a conoscenza zero è quindi una tecnologia che ha il potenziale di migliorare e innovare molti settori e applicazioni, come la blockchain, le transazioni, l’identità digitale, le votazioni, gli audit, le verifiche, e molto altro.
La sfida è quella di rendere questa tecnologia più accessibile, scalabile e standardizzata, per favorire la diffusione e l’adozione.










